Stm32f030k6 32-разрядные микроконтроллеры серии value-line на базе ядра arm cortex-m0, 32 кб flash, частота 48 мгц
Содержание:
- Высокопроизводительные микроконтроллеры STM32F030x на основе 32-битного ядра ARM Cortex-M0 RISC-архитектуры
- Buying boards
- Libraries Included Here:
- Datasheet
- Отладочные платки для stm32f030f4p6 и stm8s103f2p6
- 3.1 Каркас исходников
- Общее описание
- Общее описание
- 2.2 Настройка утилиты
- Programming?
- Перед прочтением статьи
- 3.2 Алгоритм на пальцах
- Programming Manual
Высокопроизводительные микроконтроллеры STM32F030x на основе 32-битного ядра ARM Cortex-M0 RISC-архитектуры
Микроконтроллеры серии STM32F030x компании STMicro интегрируют 32-битный ARM-процессор Cortex-M0 с рабочей частотой до 48 МГц, высокоскоростную память (до 64 Кбайт FLASH и до 8 Кбайт SRAM), функциональный блок периферийных модулей и линий ввода/вывода. Все устройства серии поддерживают стандартный набор коммуникационных интерфейсов (до двух каналов I2C, до двух каналов SPI и до двух UART), один 12-битный АЦП, до шести 16-битных таймеров общего назначения и ШИМ-таймер с расширенными возможностями управления. Микроконтроллеры рассчитаны на работу в диапазоне температур окружающей среды от -40°C до +85°C при напряжении питания от 2.4 В до 3.6 В. Несколько энергосберегающих режимов позволяют создавать приложения с малым энергопотреблением.
Микроконтроллеры STM32F030x доступны в четырех различных корпусах с числом выводов от 20 (TSSOP) до 64 (LQFP) и в зависимости от модели оснащены различными периферийными модулями.
Внутренняя архитектура микроконтроллеров STM32F030x |
Отличительные особенности:
- 32-битное ядро ARM Cortex-M0 с тактовой частотой до 48 МГц
- FLASH память программ от 16 кБ до 64 кБ
- SRAM память данных от 4 кБ до 8 кБ с контролем чётности
- Блок вычисления кодов коррекции ошибок CRC
- Системы сброса и управления питанием
- Диапазон напряжений питания: от 2.4 В до 3.6 В
- Сброс при включении/выключении питания (POR/PDR)
- Режимы энергосбережения: спящий, останов, ждущий
- Управление частотой тактирования
- Кварцевый генератор с тактовой частотой от 4 МГц до 32 МГц
- Отдельный генератор с тактовой частотой 32 кГц для часов реального времени с калибровкой
- Внутренний RC-генератор с тактовой частотой 8 МГц и шестью узлами фазовой автоподстройки частоты
- Внутренний RC-генератор с тактовой частотой 40 кГц
- До 55 высокоскоростных линий ввода/вывода
- Карта векторов внешних прерываний
- До 36 линий ввода/вывода, поддерживающих уровень напряжения 5 В
- 5-канальный контроллер прямого доступа к памяти (DMA)
- 12-битный АЦП с временем выборки 1 мкс (до 16 каналов) и диапазоном входных напряжений от 0 до 3.6 В
- Отдельный источник питания для аналоговой части с напряжением от 2.4 В до 3.6 В
- До 10 таймеров
- 16-битный 7-канальный таймер с расширенным управлением для 6 выходных каналов ШИМ, формированием паузы и экстренной остановки
- 16-битный таймер с 4 каналами захвата/сравнения входа/выхода (IC/OC) для декодирования команд с инфракрасного датчика
- 16-битный таймер с 2 каналами IC/OC, 1 каналом OCN, формированием паузы и экстренной остановки
- Два 16-битных таймера, каждый с 1 каналом IC/OC и OCN, формированием паузы, экстренной остановки и модулятором для инфракрасного передатчика
- 16-битный таймер с 1 каналом IC/OC
- 16-битный основной таймер
- Независимый и системный сторожевые таймеры
- Таймер тактирования SysTick: 24-битный счётчик обратного счёта
- Календарь/часы реального времени с системой сигнализации и периодического пробуждения из режимов ждущий/останов
- Коммуникационные интерфейсы
- До двух интерфейсов I2C: один с поддержкой режима Fast Mode Plus (1 Мбит/с) и допустимым током 20 мА
- До двух портов приёмопередатчика USART с поддержкой синхронного SPI в режиме ведущего и управлением модемом; один из портов с автоматическим определением скорости потока
- До двух интерфейсов SPI со скоростью передачи данных 18 Мбит/с и программируемым размером кадра от 4 до 16 бит
- Последовательный отладочный интерфейс (SWD)
- Доступные корпуса
- 20-выводной SSOP
- 32-выводной LQFP, размером 7 х 7 мм
- 48-выводной LQFP, размером 7 х 7 мм
- 64-выводной LQFP, размером 10 х 10 мм
Область применения:
- Портативное оборудование
- Аудио-видео ресиверы и цифровые телевизоры
- Периферийный устройства ПК, игровые платформы
- Двухколёсные транспортные средства с электроприводом
- Бытовая техника
- Принтеры
- Сканеры
- Системы сигнализации
- Устройства видеоконференцсвязи
- Системы климат-контроля
Buying boards
The official Nucleo, Discovery, and Eval development boards manufactured and sold by STMicroelectronics are available from official ST distributors around the world.
The Chinese development boards are available from webshops like Ebay, AliExpress, Wish, Taobao, and many more. It may be hard to find the specific board you are looking for, since many of these boards do not have a clear unique name. Also, availability of these boards changes over time. Be aware of counterfeit STM32F103C8T6 devices when ordering from China. These specific devices are mostly used on the Blue Pill and Black Pill boards.
Libraries Included Here:
The F030F4 has only 16K of flash. Compiling the arduino IDE with an empty sketch will use about 8K.
However, including calls in your sketch to arduino’s regular Serial will also add many K to the build size, abruptly passing the 16k limit. One Serial.println(int) and you’ve used 15.5k! Yes, that one-liner just works — on PA2/PA3, note this, not PA9/PA10 — but your sketch now has no code space left.
And the Wire pin assignments conflict with the uart header use, as built.
The most obvious implication is that we now have no easy way to «view» any output, even any debug information,
beyond toggling a LED! (No serial terminal. It’s not connected at USB connector.
And the native Serial software is too big.)
There are some new very lightweight arduino libraries included here, so that we now can communicate
with the F030F4. We can run a «Serial» on its uart header, we can run an oled display, and we can use Wire/I2C on pins of our choice. These libraries (with example files) are:
-
miniSerial — a simple software non-interrupt low-performance duplex serial driver, max 19200.
So now a terminal can be used with your sketch. TXD/RXD ie PA9/PA10, ie at the correct uart header,
but is also pin configurable if needed.
Syntax is an approximate subset of regular native Serial.
Some miniSerial info: https://github.com/BLavery/miniSerial -
miniOled — a lean and basic driver for the ubiquitous ‘0.96″ I2C SSD1306 Oled’ display.
Optionally using I2C writes via SoftWire (allowing pin choice), or native HAL I2C on PA9 PA10.
So now we can see some display output.
Derived out of Daniel Turton’s OzOled project 2014/2015.
To use the optional software I2C, you need to also fetch and install other-party libraries SoftWire and AsyncDelay.
Some miniOled info: https://github.com/BLavery/miniOled
Quality = working, if not elegant.
Code size = comfortable in our tiny flash space.
The library code is intentionally minimal — just enough to get the job done, of being able to «talk»
to this board, leaving code space still available for a modest sketch.
Other Libraries, needed for miniOled to run on pins other than PA9 PA10:
- AsyncDelay (used by SoftWire) from here: https://github.com/stevemarple/AsyncDelay
(And incidentally, SoftWire should be equally useable with other I2C libraries or devices on the ‘030F4P6.
For example, there is an instruction note in libraries folder on adapting alternative ACROBOTIC oled library for SoftWire.)
Datasheet
Datasheet содержит в себе информацию о наличии определенной периферии в конкретном МК, цоколевке, электрических характеристиках и маркировке чипов для STM32F103x8 и STM32F103xB, то есть для вот этих, которые обведены красным прямоугольником:
Некисло, один даташит на 8 микроконтроллеров.
Основное в Datasheet-е
В первую очередь нужно обратить внимание на раздел 7. Ordering information scheme, в котором указано, то обозначает каждый символ в маркировке. Например, для STM32F103C8T6: корпус LQFP-48, 64Кб flash-а, температурный диапазон –40 to 85 °C
Далее 2.1 Device overview. В нем есть таблица, в которой сказано, какая периферия есть в конкретном микроконтроллере и в каком количестве:
Основное различие между микроконтроллерами из разных колонок в количестве ножек и объеме флеша, остальное все одинаково. Небольшое исключение составляет первая колонка версий Tx: в этих микроконтроллерах поменьше модулей SPI, I2C и USART-ов. Нумерация периферии идет с единицы: то есть, если в STM32F103Cx у нас 2 SPI, то они имеют имена SPI1 и SPI2, а в STM32F103Tx у нас только SPI1. Так как Datasheet у нас на микроконтроллеры STM32F103x8 и STM32F103xB, то эта таблица справедлива только для этих моделей. К примеру STM32F103C8 или STM32F103CB соответствуют этой таблице, а STM32F103C6 нет, для него есть отдельный даташит.
В разделе 2.2 Full compatibility throughout the family говорится о том, что устройства STM32F103xx являются программно, функционально и pin-to-pin (для одинаковых корпусов) совместимыми.
В reference manual-е есть разделение на следующие «виды» микроконтроллеров: STM32F103x4 и STM32F103x6 обозначены как low-density devices, STM32F103x8 и STM32F103xB как medium-density devices, STM32F103xC, STM32F103xD и STM32F103xE как high-density devices. В устройствах Low-density devices меньше Flash и RAM памяти, таймеров и периферийных устройств. High-density devices имеют больший объем Flash и RAM памяти, а так же имеют дополнительную периферию, такую как SDIO, FSMC, I2S и DAC, при этом оставаясь полностью совместимыми с другими представителями семейства STM32F103xx. То есть, если на каком-то этапе разработки стало ясно, что выбранного микроконтроллера не хватает для реализации всех возможностей, то можно безболезненно выбрать более навороченный камень без необходимости переписывать весь существующий софт, при этом, если новый камень будет в том же корпусе, то отпадает необходимость заново разводить печатную плату.
Отладочные платки для stm32f030f4p6 и stm8s103f2p6
Начинать применять новую детальку в своей практике без ознакомления с ней в живую — рискованно, для таких целей существую различные специальные помощники: отладочные и демонстрационные платы. Для ознакомлением с одним интересным контроллером из семейства STM32 — STM32F030F4P6 была разработана специальная отладочная платка.
Отладочные платы stm32f030f4p6 и stm8s103f2p6
Если быть точнее — то это скорее не отладочная плата, а плата переходник, с дополнительно разведенным разъёмом для подключения программатора, парой перемычек для базовой необходимой настройки периферии контроллера и ещё нескольких деталей в её обвязке. За одно, впрок, была изготовлена подобная отладочная плата для STM8S103F2P6.
Чем интересен микроконтроллер STM32F030F4P6 — это самый маленький, если смотреть со стороны количества выводов (т.к. если смотреть по размеру — в семействе есть ещё и QFN корпуса), их всего 20, и самый удобно паяемый в семействе контроллер — он единственный выпускается в корпусе tssop20 (на самом деле есть и другие, но они похожи и их невидно у нас в продаже). Правда у tssop20 шаг всего 0.5мм, так что опыт изготовления плат и пайки всё равно будет необходим. Ещё одним бонусом будет — он самый дешевый в серии, около полу бакса за штуку, правда это при оптовой закупки, в розницу он стоит 0,74$ или 46р (цены актуальны на начало марта 2015 года).
По STM8S103F2P6 — он тоже выбран в корпусе tssop20, только в отличие от его старшего собрата у него меньше обвязки. Более нечего не скажу, платы разводил в сентябре прошлого года и почему выбрал его уже не помню. Но с 8 серией у меня пока не складывается, задач и проектов на их основе пока нет, а у самого пока руки не доходят.
Схема отладки stm32f030f4p6
Отладочная плата с 32-х разрядным контроллером stm32f030f4p6 на борту. На плате имеется разъем для подключения программатора и 2 перемычки для конфигурации контролера, и необходимый минимальный обвяз. Первая перемычка отвечает за способ прошивки контроллера: когда линия boot0 контроллера подтянута к земле, то контроллер прошивается программатором через SWD разъём; когда линия подтянута к плюсу питания, то контроллер можно прошивать через встроенный UART загрузчик (по умолчанию все контроллеры его имеют) через выводы PA14/PA15 или PA9/PA10. Вторая перемычка позволяет подать плюс питания на вход питания аналоговой части контроллера (VDDA). Питание обоих плат и установленных на них микроконтроллеров 3.3В.
Схема отладки stm8s103f2p6
Печатки stm32f030f4p6 и stm8s103f2p6
Обе платы в основе себя содержат микроконтроллер в корпусе tssop20, в первом случае — это STM32F030F4P6, во втором — STM8S103F2P6. Платы получись компактными 19х31мм в первом случае и 19х29мм во втором. Все выводы микроконтроллеров разведены на 2 стандартные гребенки по краям PLS10, с шагом 2.54мм. В итоге платы имеют формат DIP корпусов, что удобно при макетировании на безпаячных макетных платах. Первая плата имеет SWD разъём для подключения программатора, выполненного из PLS5, вторая плата содержит разъём SWIM предназначенных для тех же нужд, выполненного на PLS4. На плате с 32-х битным контроллером так же содержаться 2 перемычки, выполненные из разъёмов PLS3 и PLS2. Обращаю внимания, что все разъёмы для программаторов и перемычки припаяны с лицевой стороны, т.к. платы односторонние. Обе платы по входу питания содержат блокировочные конденсаторы ёмкостью 0,1мкФ, на первой плате он имеет типоразмер 1206, на второй плате 0603. Так же на обоих платах содержатся по одному резистору на 10кОм типоразмеров 0603 для подтяжки линии reset и по конденсатору на этой же линии на 0,1 мкФ типоразмеров 0603. На второй плате установлен конденсатор для линии Vcap емкостью 1мкФ типоразмера 0603. Обе платы имеют по одной-две проводной перемычки.
Отладочные платы stm32f030f4p6 и stm8s103f2p6
На фотографиях на обоих платах полностью не установлена обвязка линий reset и на плате с stm8 есть ошибка, одна дорожка снизу не на своём месте, в печатке эта ошибка исправлена.
По опыту использования отладочной платы STM32F030F4P6. Она пригодилась только для «Hello World» и для ознакомления с АЦП контроллера. После чего контролер понравился и начал сразу применяться. Контроллер понравился тем, что в первую очередь — это 32 разрядный АРМ контроллер с полным фаршем, а во вторую, он миниатюрный и содержит немного выводов, из-за чего его удобно применять в небольших проектах.
Alex_EXE | 19.03.2015 | STM32 |
3.1 Каркас исходников
Итак, проект создан, чип выбран, теперь добавим в проект минимальный набор исходников, без которых он вообще не сможет жить.
Выделим CMSIS BOOT и среда автоматически выделит M0 Cmsis Core, т.к. зависимости требуют этого.
Соберём проект (значок Build, или клавиша F7). По непонятным мне причинам hex файл не собрался (в консоли есть предупреждение); я несколько раз переустанавливал IDE и компилятор, заново создавал проект, но на виртуальной машине почему-то такой результат; на другом компьютере (не виртуальном, а реальном) всё один-в-один и на выходе рабочий hex. К счастью, есть bin.
Хоть код и ничего не делает, я заливаю его на плату, дабы убедиться, что залить можно (что, например, утилита его не отбраковывает). Советую сделать это и читателю. Если не получается — попробовать ещё и ещё раз, а также писать комментарии.
Общее описание
Отличительные особенности:
- 32-битное ядро ARM Cortex-M0 с тактовой частотой до 48 МГц
- FLASH память программ от 16 кБ до 64 кБ
- SRAM память данных от 4 кБ до 8 кБ с контролем чётности
- Блок вычисления кодов коррекции ошибок CRC
- Системы сброса и управления питанием
- Диапазон напряжений питания: от 2.4 В до 3.6 В
- Сброс при включении/выключении питания (POR/PDR)
- Режимы энергосбережения: спящий, останов, ждущий
- Управление частотой тактирования
- Кварцевый генератор с тактовой частотой от 4 МГц до 32 МГц
- Отдельный генератор с тактовой частотой 32 кГц для часов реального времени с калибровкой
- Внутренний RC-генератор с тактовой частотой 8 МГц и шестью узлами фазовой автоподстройки частоты
- Внутренний RC-генератор с тактовой частотой 40 кГц
- До 55 высокоскоростных линий ввода/вывода
- Карта векторов внешних прерываний
- До 36 линий ввода/вывода, поддерживающих уровень напряжения 5 В
- 5-канальный контроллер прямого доступа к памяти (DMA)
- 12-битный АЦП с временем выборки 1 мкс (до 16 каналов) и диапазоном входных напряжений от 0 до 3.6 В
- Отдельный источник питания для аналоговой части с напряжением от 2.4 В до 3.6 В
- До 10 таймеров
- 16-битный 7-канальный таймер с расширенным управлением для 6 выходных каналов ШИМ, формированием паузы и экстренной остановки
- 16-битный таймер с 4 каналами захвата/сравнения входа/выхода (IC/OC) для декодирования команд с инфракрасного датчика
- 16-битный таймер с 2 каналами IC/OC, 1 каналом OCN, формированием паузы и экстренной остановки
- Два 16-битных таймера, каждый с 1 каналом IC/OC и OCN, формированием паузы, экстренной остановки и модулятором для инфракрасного передатчика
- 16-битный таймер с 1 каналом IC/OC
- 16-битный основной таймер
- Независимый и системный сторожевые таймеры
- Таймер тактирования SysTick: 24-битный счётчик обратного счёта
- Календарь/часы реального времени с системой сигнализации и периодического пробуждения из режимов ждущий/останов
- Коммуникационные интерфейсы
- До двух интерфейсов I2C: один с поддержкой режима Fast Mode Plus (1 Мбит/с) и допустимым током 20 мА
- До двух портов приёмопередатчика USART с поддержкой синхронного SPI в режиме ведущего и управлением модемом; один из портов с автоматическим определением скорости потока
- До двух интерфейсов SPI со скоростью передачи данных 18 Мбит/с и программируемым размером кадра от 4 до 16 бит
- Последовательный отладочный интерфейс (SWD)
- Доступные корпуса
- 20-выводной SSOP
- 32-выводной LQFP, размером 7 х 7 мм
- 48-выводной LQFP, размером 7 х 7 мм
- 64-выводной LQFP, размером 10 х 10 мм
Область применения:
Общее описание
Отличительные особенности:
- 32-битное ядро ARM Cortex-M0 с тактовой частотой до 48 МГц
- FLASH память программ от 16 кБ до 64 кБ
- SRAM память данных от 4 кБ до 8 кБ с контролем чётности
- Блок вычисления кодов коррекции ошибок CRC
- Системы сброса и управления питанием
- Диапазон напряжений питания: от 2.4 В до 3.6 В
- Сброс при включении/выключении питания (POR/PDR)
- Режимы энергосбережения: спящий, останов, ждущий
- Управление частотой тактирования
- Кварцевый генератор с тактовой частотой от 4 МГц до 32 МГц
- Отдельный генератор с тактовой частотой 32 кГц для часов реального времени с калибровкой
- Внутренний RC-генератор с тактовой частотой 8 МГц и шестью узлами фазовой автоподстройки частоты
- Внутренний RC-генератор с тактовой частотой 40 кГц
- До 55 высокоскоростных линий ввода/вывода
- Карта векторов внешних прерываний
- До 36 линий ввода/вывода, поддерживающих уровень напряжения 5 В
- 5-канальный контроллер прямого доступа к памяти (DMA)
- 12-битный АЦП с временем выборки 1 мкс (до 16 каналов) и диапазоном входных напряжений от 0 до 3.6 В
- Отдельный источник питания для аналоговой части с напряжением от 2.4 В до 3.6 В
- До 10 таймеров
- 16-битный 7-канальный таймер с расширенным управлением для 6 выходных каналов ШИМ, формированием паузы и экстренной остановки
- 16-битный таймер с 4 каналами захвата/сравнения входа/выхода (IC/OC) для декодирования команд с инфракрасного датчика
- 16-битный таймер с 2 каналами IC/OC, 1 каналом OCN, формированием паузы и экстренной остановки
- Два 16-битных таймера, каждый с 1 каналом IC/OC и OCN, формированием паузы, экстренной остановки и модулятором для инфракрасного передатчика
- 16-битный таймер с 1 каналом IC/OC
- 16-битный основной таймер
- Независимый и системный сторожевые таймеры
- Таймер тактирования SysTick: 24-битный счётчик обратного счёта
- Календарь/часы реального времени с системой сигнализации и периодического пробуждения из режимов ждущий/останов
- Коммуникационные интерфейсы
- До двух интерфейсов I2C: один с поддержкой режима Fast Mode Plus (1 Мбит/с) и допустимым током 20 мА
- До двух портов приёмопередатчика USART с поддержкой синхронного SPI в режиме ведущего и управлением модемом; один из портов с автоматическим определением скорости потока
- До двух интерфейсов SPI со скоростью передачи данных 18 Мбит/с и программируемым размером кадра от 4 до 16 бит
- Последовательный отладочный интерфейс (SWD)
- Доступные корпуса
- 20-выводной SSOP
- 32-выводной LQFP, размером 7 х 7 мм
- 48-выводной LQFP, размером 7 х 7 мм
- 64-выводной LQFP, размером 10 х 10 мм
Область применения:
2.2 Настройка утилиты
Запустим это приложение, оно на самом деле наипростейшее (содержит минимум настроек). На первом окне выбираем:
интерфейс (у меня это COM-3);
скорость, с которой будет общаться компьютер и микроконтроллер (имхо, 9600 нормальное значение);
количество бит данных (у меня это окно почему-то недоступно, но пока это не важно);
чётность (у меня без чётности, т.е. None);
echo (у меня ВЫКЛ);
время ожидания (у меня 10 секунд).. Жмём Next, и если всё в порядке, то увидим зелёный свет и «Target is readable»; если видим красный свет, то компьютер не смог подключиться
Жмём Next, и если всё в порядке, то увидим зелёный свет и «Target is readable»; если видим красный свет, то компьютер не смог подключиться.
Порядок шагов, которые помогают всегда:
Во-первых, нужно проверить не замкнута ли перемычка BOOT на плате.
Во-вторых, в любом случае, отключить питание микроконтроллера и желательно линии TX и RX, идущие от переходника на плату (землю можно не отключать).
В-третьих, в программе прожать Back до конца, т.е. до первой странички, или же вообще закрыть её и запустить заново (вообще говоря, она иногда подвисает)
Важно перед каждым подключением к плате через эту программу всегда начинать с первой страницы.
В-четвёртых, подцепить обратно провода от переходника к плате и снова попытаться подключиться в программе (обязательно с первой странички!).
Если ничего не помогло, можно попробовать отключить всё, перезагрузить комп, и попробовать заново подключиться к плате.
Т.к. я работаю через виртуальную машину, приходится по несколько раз переподключать переходник USB-COM, чтобы он был обнаружен виртуальной машиной, а хост-машина не успела установить нерабочие драйвера.
Другой вариант, который я обнаружил рабочим во время написания этой статьи — это нажатие кнопки на плате вместо постоянного дёргания проводов. Однако замыкать и размыкать перемычку BOOT придётся в любом случае. Работает этот вариант, потому что кнопка подведена к ноге внешнего сброса NRST.
На следующем окне нужно выбрать целевое устройство Target. Кстати говоря, иногда здесь можно увидеть (возможно, это баг) вообще левое устройство, например вместо STM32 увидеть STM8 — где-то произошёл какой-то сбой, порядок лечения описан выше
Поэтому на этом шаге нельзя спешить жать Next, а всегда обращать внимание на то, что в Target выбрано нужное устройство
Как определить, какое у нас устройство? — смотрим на чип и переписываем себе всё, что на нём написано. Открываем Datasheet на наш чип, в разделе Ordering information описано, какая буква за что отвечает. В моём случае это:
Предлагается на выбор 4 действия с чипом:
- стереть память (всю или выбрать конкретную область);
- записать прошивку на устройство;
- считать прошивку с устройства;
- включить/отключить защиту от записи или чтения.
Programming?
The USB micro connector is for 5V power only, not USB data. (The chip does not support USB!)
The easiest practical programming method is Upload Method = «STLink».
Get one ($3). (On Windows, fetch STSW_Link009 from STM for the STlink driver. Otherwise, check elsewhere if you need any further config/setup help.)
Get it running for your scenario, and programming becomes trivially easy thereafter. Simply leave the BOOT0 jumper always on the GND side.
No flash bootloader is used or needed. (And that’s a whole other hassle out of the way!)
And get a 3V TTL USB serial adapter (CP2102 and CH340 are 3V) while you are at it ($1.5). You are going to need that for «terminal», at least.
But, alternative to STLink, you can use the (ROM-based and undestroyable) factory flashing function using PA9/PA10 (ie TX/RX) and the serial adapter (TX-to-RX and RX-to-TX remember). Upload Method = «Serial». Press reset with boot0 jumper to 3V, upload with IDE, restart with boot0 to GND, and your sketch should run.
Перед прочтением статьи
Данная статья преследует следующие цели:
- показать, как работать конкретно с этой платой;
- показать подход, с помощью которого можно написать программу мигания светодиодом, опираясь исключительно на документацию и логику;
- изложить материал языком, понятным человеку, слабо знакомому с микроконтроллерами.
Код получится минималистичным с точки зрения использования дополнительных файлов — мы не будем подключать ни один файл, кроме тех, что нужны для сборки пустой, но валидной, прошивки. Т.е. на базе кода прошивки, которая работает, но ничего полезного не делает.
Нам понадобится следующая документация:
- Datasheet STM32F030x4 (я пользуюсь документом от января 2017 DocID024849 Rev 3);
- RM0360 Reference manual STM32F030x4/x6/x8/xC (я пользуюсь документом от апреля 2017 DocID025023 Rev 4);
- схема платы.
Всё собиралось на виртуальной машине Windows XP Professional 2002 SP3, запущенной через VirtualBox версии 5.2.22r126460 на хосте Windows X.
3.2 Алгоритм на пальцах
Для начала набросаем алгоритм, как с точки зрения человека микроконтроллер будет мигать светодиодом. А для этого немного рассуждений.
Каждая техника работает за счёт запасённой энергии, например некоторые двигатели могут работать на разных видах топлива, но для этого двигатель нужно скорректировать под вид топлива, которым мы собираемся его кормить. Аналогично и микроконтроллер требуется скорректировать (настроить) под источник энергии — это будет первый блок алгоритма.
Рассуждаем далее. У настольного компьютера есть монитор, колонки, клавиатура, мышь… и можно заметить, что некоторые устройства предоставляют нам информацию, а с помощью других мы предоставляем информацию компьютеру, но все они подключены к общей для всех них коробке (системному блоку). Можно догадаться, что и микроконтроллер может получать и отдавать информацию, а это значит, что его ножки могут принимать сигнал или выдавать сигнал — это будет следующий блок алгоритма.
Далее микроконтроллер должен включать светодиод, ждать какое-то время, выключать светодиод, ждать какое-то время и заново включать-ждать-выключать…
В итоге алгоритм будет выглядеть примерно так
Назначение данной блок-схемы — наглядно показать, что делает алгоритм; в первую очередь схема пишется для себя, поэтому каждый волен писатьрисовать её как хочет (для себя). Я считаю, что схема должна преследовать цель быть максимально простой, удобочитаемой и наглядной, иметь высокий уровень абстракции.
В соответствии с этим алгоритмом будем писать код.
Programming Manual
Programming Manual не является документом первой необходимости в самом начале знакомства с STM-ми, однако является очень важным при углубленном изучении этих микроконтроллеров. Он содержит информацию о процессорном ядре, системе команд и периферии ядра. Причем это не та же самая периферия, которая описана в Reference manual-е. В нее входят:
- System timer — системный таймер
- Nested vectored interrupt controller — контроллер приоритетных прерываний
- System control block
- Memory protection unit
Как только мы начнем знакомится с прерываниями в STM32, нам понадобится раздел 4.3 Nested vectored interrupt controller (NVIC). Ну и системный таймер является очень прикольной вещью, который будет полезен в каких-нибудь RTOS или для создания программных таймеров.