Программирование микроконтроллеров stm32 в arduino ide

Содержание

Вступление

На рынке представлено огромное количество отладочных плат на любой цвет и вкус. Поэтому для начинающих разработчиков электроники самым быстрым способом освоения программирования микроконтроллеров является покупка готовой отладочной платы, поскольку на разработку и изготовление собственной платы необходимо затратить значительные материальные и временные ресурсы.

Автор данной статьи разработал и изготовил собственную плату.

Вашему вниманию предлагается проект отладочной платы на базе микроконтроллера STM32F107.
Данная плата является плодом труда автора, схемотехнические решения заимствованы из технической документации других аналогичных плат. Разводка платы, возможно, требует корректировки, в частности разводка микросхемы RT8201BL для Ethernet. Соединение платы с сетью по Ethernet было протестировано с использованием готового проекта.

Плата модуля контроллера является универсальным средством на базе микроконтроллера STM32F107VCT6, предназначенным для встраивания в различные системы в качестве узла управления.

Характеристики отладочной платы:

  • микроконтроллер STM32F107VCT6: 72 МГц Cortex-M3, 256 Кбайт флэш-памяти программ, 64Кбайта ОЗУ, два 12-разрядных АЦП (16 внешних каналов), двухканальный 12-разрядный ЦАП, Ethernet MAC 10/100, USB OTG, 2xCAN, 5х USART, 3х SPI, I2C, SDIO, корпус LQFP100;
  • порт USB OTG с разъемом mini USB;
  • 2 CAN интерфейса;
  • Мост USB — USART на FT232RL;
  • 2 RS-232-интерфейса или 2 RS-422/485-интерфейса с гальванической изоляцией;
  • 10/100МБод RMII PHY с разъемом Ethernet RJ-45;
  • слоты карт памяти SD/MMC и microSD;
  • 16 линий порта PE микроконтроллера выведено на разъем;
  • 3 разъема интерфейса SPI для подключения внешних устройств;
  • 25 МГц кварцевый резонатор;
  • часовой кварцевый резонатор 32768 Гц;
  • кнопка сброса Reset;
  • разъем JTAG для подключения JTAG-программатора или отладчика;
  • напряжение питания +9 В или +5 В;
  • питание ядра контроллера от батарейки 3 В;
  • габаритные размеры: 160х125 мм; посадочные размеры: 150х115 мм.

Структурная схема модуля контроллера показана на рисунке 1.

3D-модель платы модуля контроллера показана на рисунке 2.

1.3 CAN интерфейс

Установленные на плате микросхемы SN65HVD230 отвечают за преобразование уровней встроенного в микроконтроллер приемопередатчика шины CAN. Структурная схема подключения CAN интерфейса отображена на рисунке ниже. Для подключения согласующего резистора R устанавливается перемычка S.

На рисунке ниже показано направление нумерации выводов разъема XT3 и XT4. Для подключения согласующих резисторов устанавливаются перемычки на штыри X15, X16.

Установкой перемычек на штыри X13 и X14 определяет режим работы микросхемы CAN – трансивера.

Если перемычка установлена так, как показано на рисунке:

используется высокоскоростной режим работы.

Если установлена:

микросхема работает в режиме хранения.

Настройка Arduino IDE для STM32F103C8T6 Blue Pill

Я уверен, что у вас уже установлена ​​Arduino IDE на вашем ПК (или ноутбуке). Если нет, то сначала установите его. После этого откройте вашу среду разработки Arduino и выберите «Файл» -> «Настройки». Вы найдете вкладку «URL-адреса менеджера дополнительных плат». Скопируйте следующую ссылку и вставьте ее туда.

https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json

Если у вас уже есть несколько URL-адресов в этом разделе, вы можете добавить больше, разделив их запятой. Если вы работали с платами ESP8266, то вы, возможно, уже знакомы с этим процессом. После добавления URL нажмите ОК.

Теперь перейдите в меню Инструменты -> Плата -> Менеджер плат … и найдите «stm32». Вы получите такой результат, как «STM32 Cores by STMicroelectronics». Установите последнюю версию. На момент подготовки этого руководства последняя версия была 1.8.0.

Это займет некоторое время, так как загрузит и установит некоторые необходимые файлы и инструменты. (Я сказал кое-что, потому что вам нужно скачать другой инструмент от STMicroelectronics, чтобы это работало).

Теперь вы можете выбрать плату из Инструменты -> Плата -> Generic STM32F1 series. После того, как вы выберете эту плату, ниже появится куча опций для настройки типа вашей платы. Первый важный параметр — «Номер платы». Убедитесь, что выбран «BluePill F103C8».

Другими важными опциями являются «Поддержка U (S) ART», установите  как «Включено (generic «Serial»)» и «Метод загрузки», сделайте его как «STM32CubeProgrammer (Serial)». Вы можете оставить остальные опции в качестве значений по умолчанию.

Установка PlatformIO для работы с Arduino Uno

Как уже указывалось, ядро PlatformIO написано на Python 2.7, поэтому PlatformIO не поддерживает Python 3. В связи с этим рекомендуется установить Python версии 2 и затем переходить к установке PlatformIO IDE. PlatformIO представляет собой интегрированную среду разработки (IDE) и содержит в себе еще дополнительные инструменты (плагины, расширения) для работы с другими популярными IDE.

Можно произвести установку PlatformIO с такими текстовыми редакторами как Atom и Visual Studio Code. Нужно выбрать один из них. Если вы хотите больше кастомизации, всяких крутых плагинов и экспериментов – выбирайте Atom, если же вам нужно просто красивую, удобную IDE с отличным автодополнением кода из коробки, выбирайте Visual Studio Code. В этой статье мы выбрали Visual Studio Code.

Перейдем к установке PlatformIO для последующей разработки в ней кода для Arduino Uno.

Вначале установите Visual Studio Code с ее официального сайта. Ее установка ничем не отличается от установки обычных программ для Windows, поэтому здесь процесс ее установки мы рассматривать не будем.

Когда Visual Studio Code будет установлена она будет выглядеть примерно следующим образом:

Следующим шагом мы будем устанавливать PlatformIO используя VS Code Extensions (расширения кода для Visual Studio). Для этого в левом сайдбаре выберите квадратную иконку (пятую по счету если считать сверху) как показано на следующем рисунке. После клика на этой иконке в основном окне появится окно поиска (search box), в котором вы можете найти расширения для большинства известных языков программирования: C/C++, C#, Python, PHP, Go, JavaScript, TypeScript, Node.js и т.д.

Запустите в этом окне поиск “PlatformIO”, в результате этого вы увидите иконку PlatformIO с именем и описанием. Просто кликните на ней и установите PlatformIO. При этом может потребоваться некоторое время для установки наборов инструментов и других дополнений.

Когда процесс установки будет завершен, вы увидите интерфейс, показанный на следующем рисунке. Интерфейс включает все необходимые компоненты: New Project (новый проект), Import Arduino Project (импортировать Arduino проект), Open Project (открыть проект), Project Examples (примеры проектов) и т.д. После установки PlatformIO рекомендуется перезапустить Visual Studio Code Editor.

После этого PlatformIO будет готова к использованию. В ней мы запустим простую программу мигания светодиодом и загрузим ее в плату Arduino Uno.

Programming the STM32F103C8T6 board

NUCLEO ST-LINK/V2-1 and drag & drop

You can use the NUCLEO virtual disk to program the STM32F103C8T6 board (drag and drop programming). To do that, an additional NUCLEO board is needed (any type equipped with ST-LINK/V2-1 will do).

Remove the two jumpers from the CN2 connector as illustrated in Figure 8:

Connect the NUCLEO board CN4 connector to the STM32F103C8T6 board using flying wires as follows:

NUCLEO board CN4 connector STM32F103C8T6 debug connector STM32F103C8T6 board
SWCLK <=> DCLK
GND <=> GND
SWDIO <=> DIO
NRST <=> RESET

Warning

Please notice that is not connected. That works with the ST-Link programmer but could potentially damage the target micro controller in case it’s running at a lower voltage (e.g. 2V5) than the programmer (e.g. 3V3). That’s why it’s recommended to connect also the line when an external programmer such as a Segger J-Link is hooked up to program the board.

  • Provide power for the STM32F103C8T6 board through a 3.3V pin, 5V pin or over a USB cable. (The VDD_TARGET pin on the NUCLEO board CON4 does not work as source of power).
  • Connect the NUCLEO board to your PC over a USB cable.

Программа Blink для платы Blue Pill STM32F103C8T6

Убедитесь, что вы внесли необходимые изменения в IDE Arduino, как указано в предыдущем разделе (выбор правильной платы и т. д.). Как только это будет сделано, установите соединение между программатором FTDI (т. е. с USB Serial Converter) и платой STM32, как указано выше.

Теперь, прежде чем подключать FTDI к ПК, убедитесь, что плата гBlue Pill STM32 находится в «режиме программирования», т.е. переключите контакт BOOT0 в HIGH. После этого подключите FTDI к ПК или ноутбуку. COM-порт будет назначен программатору и выберет тот же COM-порт в Arduino IDE.

Напишите программу Blink следующим образом. Это похоже на скетч Arduino Blink, но вместо этого LED_BUILTIN я использовал PC13, так как светодиод подключен к этому выводу микроконтроллера.

void setup() {
    pinMode(PC13, OUTPUT);
}
void loop() {
  digitalWrite(PC13, HIGH);
  delay(1000);
  digitalWrite(PC13, LOW);
  delay(1000);           
}

После этого вы можете нажать «Загрузить», и среда IDE начнет компилировать код. Это займет некоторое время для компиляции.

Как только компиляция будет завершена, она автоматически вызовет инструмент STM32CubeProgrammer. Если все пойдет хорошо, IDE успешно запрограммирует плату STM32.

Он автоматически сбросит настройки микроконтроллера, и вы увидите, что светодиод мигает. Не забудьте переставить контакты BOOT0 обратно в положение LOW, чтобы при следующем включении питания на платформе запускалась ранее загруженная программа.

Вывод

Это было длинное руководство по началу работы с STM32 Blue Pill Board, т.е. STM32F103C8T6. Я обсудил некоторые важные функции платы, основные сведения о микроконтроллере, известные проблемы платы и способы их устранения, настройки Arduino IDE, загрузки необходимых инструментов, написания нашей первой программы для STM32 для Arduino Ide и, наконец, загрузки программы.

Блок питания 0…30 В / 3A
Набор для сборки регулируемого блока питания…

Подробнее

Datasheets

STM32F103x8STM32F103xBMedium-density performance line ARM-based 32-bit MCU with 64or 128 KB Flash, USB, CAN, 7 timers, 2 ADCs, 9 com. interfacesDatasheet -production data Features• ARM 32-bit Cortex-M3 CPU Core– 72 MHz maximum frequency,1.25 DMIPS/MHz (Dhrystone 2.1)performance at 0 wait state memoryaccess– Single-cycle multiplication and hardwaredivision• Memories– 64 or 128 Kbytes of Flash memory– 20 Kbytes of SRAM• Clock, reset and supply management– 2.0 to 3.6 V application supply and I/Os– POR, PDR, and programmable voltagedetector (PVD)– 4-to-16 MHz crystal oscillator– Internal 8 MHz factory-trimmed RC– Internal 40 kHz RC– PLL for CPU clock …

Прошивка STM32 с помощью ST-Link программатора под Windows

При использовании программатора ST-Link выводы BOOT0 и BOOT1 не используются и должны стоять в стандартном положении для нормальной работы контроллера.

Качаем с сайта st.com Утилиту STM32 ST-LINK Utility. Устанавливаем ее.  С ней должен быть установлен и драйвер для ST-Link. Если нет, качаем и устанавливаем драйвера ST-Link: http://www.st.com/content/st_com/en/products/embedded-software/development-tool-software/stsw-link009.html Подключаем ST-Link в USB- разъем компьютера, а соответствующие выводы программатора подключаем к выводам тестовой платы согласно маркировки.

Запускаем программу STM32 ST-LINK Utility

Выполняем пункт меню Target -> Connect

Выполняем пункт меню Target -> Erase Chip

Выполняем пункт меню File -> Open file…
Выбираем файл для загрузки в микроконтроллер.

Выполняем пункт меню Target -> Programm & Verify…

После завершения прошивки и проверки, загруженная программа автоматически запустится.

Подробное описание

The STM32F103xx medium-density performance line family incorporates the high-performance ARM Cortex -M3 32-bit RISC core operating at a 72 MHz frequency, high-speed embedded memories (Flash memory up to 128 Kbytes and SRAM up to 20 Kbytes), and an extensive range of enhanced I/Os and peripherals connected to two APB buses.

All devices offer two 12-bit ADCs, three general purpose 16-bit timers plus one PWM timer, as well as standard and advanced communication interfaces: up to two I2Cs and SPIs, three USARTs, an USB and a CAN.

The devices operate from a 2.0 to 3.6 V power supply. They are available in both the –40 to +85 °C temperature range and the –40 to +105 °C extended temperature range. A comprehensive set of power-saving mode allows the design of low-power applications. The STM32F103xx medium-density performance line family includes devices in six different package types: from 36 pins to 100 pins. Depending on the device chosen, different sets of peripherals are included, the description below gives an overview of the complete range of peripherals proposed in this family. These features make the STM32F103xx medium-density performance line microcontroller family suitable for a wide range of applications such as motor drives, application control, medical and handheld equipment, PC and gaming peripherals, GPS platforms, industrial applications, PLCs, inverters, printers, scanners, alarm systems, video intercoms, and HVACs.

Резюме:

…HK это не STM…

  1. Отсутствие нормальной документации, если разработчики подумали что фиг с ним, есть стандартный мануал от STM, там читайте, то хоть бы скопипастили даташит, не понятно даже где адреса GPIO. Текущий документ выглядит так как будто начали писать, потом устали.

  2. Микроконтроллер HK по периферии, похож на STM, лично я проверил ADC/TIM/USART/IWDG/GPIO, — работают схоже, но документации точной нет, поэтому угадайка где что вылезет.

  3. Не предсказуемое время выполнения кода и даже заявленное преимущество в 72MHz собственно полностью «закрашивается» временем выполнения операций условного перехода и загрузкой/выгрузкой регистров. «Слегка» промахнулись с «фетчем» инструкций и данных. При переезде на этот проц, если вы работали на STM’ке на 48MHz, задирайте на HK частоту до 72, так как среднее время выполнения «по поликлинике» на 48MHz для STM приблизительно будет равно для HK на 72MHz, и придется переписывать все таймеры ибо 72 != 48, а таймеры, неожиданно прям, тикают в этих кристаллах одинаково.

За сим разрешите откланяться.

1.9 Карты памяти SD и MicroSD

Плата поддерживает работу с картами памяти SD, SDHC и microSD, microSDHC. Схема подключения карты памяти по интерфейсу SPI показана на рисунке ниже.
Предусмотрена функция определения наличия карты в держателе путем опроса линии SDcard_Detect на логический 0. При корректно установленной карте памяти линия SDcard_Detect соединяется с общей шиной встроенным коммутатором держателя AXA2R73361. Линия SDcard_WP также соединяется с общей шиной в случае, если запись данных на карту памяти разрешена.

Линии SDcard_Detect и SDcard_WP подтянуты к напряжению питания +3,3 В, что позволяет избежать конфликтов в случае, если пользователь не сконфигурирует порты ввода вывода.
Карты памяти SD, SDHC устанавливается в держатель XS1 (AXA2R73361), подключенный по интерфейсу SPI3, и держатель XS2 (AXA2R73361), подключенный по интерфейсу SPI1.

Модули на базе ESP8266

Согласитесь, что сам по себе голый чип нам мало интересен, а раз мы любим ардуино, а не сам микроконтроллер atmуga, то нам интересны готовые модули на базе чипа ESP8266. Итак приступим.

На базе данного микроконтроллера разработан ряд модулей с маркировками от ESP-01 до ESP-13. В большинстве модули похожи друг на друга. Я же коснусь в своем рассказе только тех модулей, с которыми имел дело 🙂

Итак, самый младший представитель линейки – ESP-01.

Этот модуль знаком тем, кто пытался прикрутить к своему проекту на Arduino Wifi. Забавно, что зачастую проект мог бы и без ардуино обойтись 🙂

Итак, в данном модуле пользователю/разработчику доступно только 4 GPIO вывода. Не много, но для метеостанции или какого-нибудь датчика вполне сгодится.

Приобрести такой модуль можно по ссылкам ниже:

И там и там модули хорошего качества.

Ну а мы пойдем дальше. На очереди довольно интересный и необычный модуль ESP-07

Модуль представляет собой миниатюрную плату с возможностью установки на большую плату под пайку.Обратите внимание, шаг контактов 2 мм, не 2,54, а именно 2. В обычную макетку этот модуль впихнуть проблематично

На первый взгляд отличительной особенностью данного модуля является наличие керамической антенны, а также разъема для подключения внешней антенны. На плате доступны все GPIO выводы за исключением выводов, отвечающих на SPI шину.

Модуль считается не первой свежести, но в большинстве проектов не теряет своей актуальности.

Стоит признать, что некоторые считают, модуль ESP-07 несколько устаревшим, так как ему на смену пришли модули ESP-12

Плата модуля рассчитана под пайку, либо установку на гребенку с шагом контактов 2 мм, однако из существенных отличий – наличие выводов шины SPI.

Широкое распространение получили модули ESP-12E и ESP-12F, отличающиеся друг от друга объемом FLASH памяти.

В отличие от модуля ESP-07, Модули на базе ESP-12 не имеют возможности подключения внешней антенны и используют посредственную встроенную антенну, которая представляет собой дорожку на плате.

Распиновка у модулей ESP-12 одинакова.

Подробную информацию по подключению и прошивке данных модулей вы можете получить на ресурсе посвященном микроконтроллерам ESP8266.ru

Учтите, что для прошивки и заливки скетчей в модули ESP-01 … ESP-12 необходим программатор. Подробнее о программаторах вы можете почитать в статье “Программаторы для Arduino, 3Д принтеров и не только”

Все эти модули хороши, однако кроме ESP-01 в готовом виде их применять не получится, т.к. нужна обвязка. Поэтому мы плавно переходим к готовым модулям, родоначальником которых стала плата ESP-12

Что такое PlatformIO?

Почему стоит перейти с Arduino IDE на PlatformIO

В сети выделяют следующие недостатки Arduino IDE:

  • отсутствие кастомизации (темы, подсветка синтаксиса);
  • нет автодополнения кода (как в современных IDE);
  • не очень удобная организация проектов;
  • нет поддержки каких-либо плагинов;
  • неудобный менеджер библиотек;
  • не очень вразумительный builder, с которым достаточно трудно искать ошибки в программе;
  • другие мелкие баги, которые чаще всего встречаются при работе с Arduino IDE с операционной системе Windows.

Именно эти недостатки и вынуждают ряд пользователей переходить с Arduino IDE на PlatformIO или другие аналогичные платформы.

Преимущества PlatformIO

PlatformIO позволяет производить быструю разработку приложений и, подобно C/C++, поддерживает быстрое завершение кода и интеллектуальный код линтера, недоступные в Arduino IDE. В дополнение к этому PlatformIO предлагает полную поддержку тем с темными и светлыми цветами, умную навигацию по коду и форматирование кода. Ядро платформы включает мультиплатформенный builder, менеджер библиотек, монитор последовательного порта и многое другое.

Единый (унифицированный) отладчик поддерживает множество архитектур и платформ разработки. В отладчике есть такие функции как условные точки останова, выражения и точки наблюдения (Watchpoints), диспетчер памяти, “горячий” рестарт текущей сессии отладки. Ядро PlatformIO написано на Python 2.7 и работает на Windows, macOS, Linux, FreeBSD и даже на некоторых платформах с ARM-архитектурой: Raspberry Pi, BeagleBone, CubieBoard, Samsung ARTIK и т.п. Также в составе PlatformIO есть проводник файлов (File Explorer), который помогает в удобной организации хранения ваших проектов.

Using serial port (not just for debugging)

Zoom in

In your code, create a Serial object (using TX and RX pin names of the connected serial port).

Use printf function to send serial messages to the connected PC.

Sending debug messages over the ST-Link virtual com port

STM32F103C8T6 board, pin PA_2 (Serial2 TX) <=> NUCLEO board CN3 connector, pin RX
STM32F103C8T6 board, pin PA_3 (Serial2 RX) <=> NUCLEO board CN3 connector, pin TX

A smart trick proposed by Nothing Special makes even soldering needless.
The point is to redirect the UART on the NUCLEO board by software (without modifying the solder bridges on the back side of the NUCLEO board) and convert it into a «Debugger». On the NUCLEO board that you are going to use as programmer/ debugger, choose any Serial port other than Serial2 (other than the default port used for standard UART) to be initialized as standard UART. In the program below (using NUCLEO-F103RB as programmer/debugger) Serial1 (PA_9, PA_10) was selected.

Debugger

#include "mbed.h" 

// declarations needed to change the parameters of stdio UART 
extern serial_t     stdio_uart; 
extern int          stdio_uart_inited; 

int main() {
    serial_init(&stdio_uart, PA_9, PA_10); // other than Serial2
    stdio_uart_inited = 1; 
    printf("Ready for debugging\r\n");
}

Once compiled (remember to select the NUCLEO board used for programing/debugging as target for the online compiler), download the «Debugger» program to the NUCLEO board. Please make sure you have the two jumpers in place on the CN2 connector when programming the NUCLEO board. Once the «Debugger» binary has been downloaded to the NUCLEO board, remove the two jumpers again.

Источники питания

STM32W108 содержит три системы источников питания. Всегда включенный высоковольтный источник питания обеспечивает работу GPIO и функционирование критических блоков микросхемы. Остальные блоки микросхемы питаются от низковольтных стабилизаторов. Низковольтные источники питания можно отключить при переходе в спящий режим, что дополнительно уменьшает энергопотребление. Внутренние стабилизаторы обеспечивают получение напряжений питания 1,25 В и 1,8 В из нерегулируемого напряжения питания микросхемы. Выход стабилизатора напряжения 1,8 В имеет внешний фильтр и может использоваться внешними аналоговыми блоками, RAM и flash-памятью. Выход стабилизатора напряжения 1,25 В имеет внешний фильтр и используется для питания ядра микропроцессора.

Режимы пониженного энергопотребления

STM32W108 имеет сверхнизкое энергопотребление в режиме глубокого сна с возможностью выбора способа тактирования. Таймер выхода из состояния бездействия можно тактировать или от внешнего кварцевого резонатора на частоту 32,768 кГц, или от сигнала частотой 1 кГц, полученного делением частоты 10 кГц от внутреннего RC-генератора. Для режима с наименьшим энергопотреблением все тактовые генераторы можно выключить, т.к. микросхема будет пробуждаться только внешними событиями с выводов GPIO. STM32W108 обладает быстрым временем пробуждения (типичное значение — 100 мкс) из состояния глубокого сна до момента выполнения первой инструкции ARM Cortex-M3.

Средства разработки и отладки

Для создания приложений на базе STM32W108 можно использовать широкий набор сред разработки и отладки, а также операционных систем реального времени (OS и RTOS), предназначенных для работы с ARM-микроконтроллерами, и предлагаемых многими ведущими производителями программного и аппаратного обеспечения. Для создания прикладных программ для STM32W108 можно использовать интегрированную среду разработки Keil RealView Microcontroller Development Kit (MDK) совместно с семейством USB-JTAG адаптеров Keil ULINK или IAR Embedded Workbench for ARM совместно с адаптером IAR J-Trace for Cortex-M3.

Отличительной особенностью STM32W108 является наличие аппаратной поддержки модуля трассировки пакетов, который обеспечивает многоуровневую отладку на уровне пакетов. Этот блок является необходимым компонентом для интегрированной среды разработки InSight Desktop компании Ember и при использовании специального адаптера InSight компании Ember обеспечивает возможность расширенной сетевой отладки.

И тут нам поможет System Tick Timer! Настраиваем его, отключаем прерывания, не включаем Watchdog (чтоб проц не отвлекался на что-то иное кроме выполнения). Переходим в отладчик, выполняем инструкции по шагам и сравниваем сколько успел насчитать таймер во время выполнения инструкции. Берем два абсолютно одинаковых куска кода и сравниваем кол-во тактов на инструкцию:

Оригинал (STM32F030):

«Китайское» (HK32F030):

Вот блин бабушка и приехали… Инструкции LDR/STR выполняются в полтора раза дольше и те же инструкции тратят на один такт больше если используем Immediate Value… и мало того, — по сути идентичные инструкции выполняются разное кол-во тактов, и ещё опа, — времени банально не хватает на текущую реализацию… Пусть, ядро может работать на 72 MHz, пробуем.

Меняем множитель с 6 на 9. И в теории, времени теперь навалом, а по факту впритык, потому что проц пожирает массу времени на часто используемые команды, подгоняем реализацию под нужные временные интервалы антинаучным методом «подбора» и «научного тыка». И теперь оно работает.

Board pinout

Information

Only the labels printed in blue/white or green/white (i.e. PC_13, PB_9, A0, D14 …) must be used in your code. The other labels are given as information (alternate-functions, power pins, …). You can also use these additional pin names:

LED1=PC_13  SERIAL_TX=PA_2  I2C_SCL=PB_8  SPI_MOSI=PA_7  PWM_OUT=PB_3
            SERIAL_RX=PA_3  I2C_SDA=PB_9  SPI_MISO=PA_6
                                          SPI_SCK =PA_5
                                          SPI_CS  =PB_6

Please notice that in order to fit the small size board, the leading ‘P’ and the ‘_’ characters are omitted from labels indicated on the board (e.g. Instead of ‘PA_1’ you can find the label ‘A1’ on the board). Arduino (green/white) and the additional naming labels are not indicated on the board.

Also notice that the on-board LED is connected to pin PC_13 and, via a resistor, to +3.3V. So to turn the LED or you have to set the DigitalOut to or respectively.

Требования к оборудованию для проекта

Поскольку это наша вводная часть, и все, что мы будем делать, это мигать светодиодом (который уже присутствует на плате), нам не нужно много оборудования в отношении проекта и микроконтроллера.

Но для программирования микроконтроллера нам нужен модуль USB-последовательный преобразователь, такой как плата FTDI (или что-то подобное). Как упомянуто в разделе BOOT Pins, к загрузчику можно получить доступ с помощью контактов USART1 микроконтроллера для программирования флэш-памяти. И чтобы микроконтроллер мог обмениваться данными с USART1, нам необходим USB-последовательный преобразователь.

Список необходимых компонентов

  • STM32F103C8T6 на основе STM32 Blue Pill Development Board
  • Модуль преобразования USB в последовательный интерфейс (например, программатор FTDI)
  • Соединительные провода
  • ПК или ноутбук с ОС Windows и подключением к Интернету

ПРИМЕЧАНИЕ. У меня нет программатора в стиле FTDI, но есть конвертер USB в последовательный интерфейс более старого типа. Вы можете использовать любые модули USB to Serial Converter, если они имеют контакты VCC (5 В), GND, RX и TX.

Соединение

Для упрощения представления я использую FTDI, такой как USB to Serial Converter.

Соединения должны быть следующими:

STM32 Blue Pill — программатор FTDI

  • 5 В — VCC
  • GND — GND
  • A9 — RX
  • A10 — TX

Программирование STM32 с помощью PlatformIO

Для поклонников микроконтроллеров, построенных на основе платформы STM32, мы в данной статье рассмотрим их программирование с помощью PlatformIO. Процесс программирования STM32 будет практически таким же, как и рассмотренная процедура программирования Arduino UNO с помощью PlatformIO. Различие будет состоять в том, что необходимо будет выбрать соответствующую плату STM32 когда будете создавать новый проект для STM32. Достоинством PlatformIO в данном случае является то, что при работе в ней нет необходимости отдельно скачивать какие либо внешние пакеты для работы с любой платой, PlatformIO скачивает все необходимые пакеты автоматически, поэтому нам необходимо просто выбрать плату и затем можно переходить к редактору. Мы будем использовать внешний JLink/ JTAG/ STLink/ Serial Programmer чтобы загружать скетч в STM32. Также следует отметить, что STM32 можно программировать и с помощью Arduino IDE.

Чтобы произвести программирование STM32 с помощью PlatformIO выполните следующую последовательность шагов.

Дайте имя новому проекту – мы его назвали ‘Blink STM32’. Затем выберите необходимую плату STM32 – в нашем случае это ‘BluePill F103C8(Generic)’. Выберите фреймворк для Arduino. После заполнения всех полей нажмите на Finish и подождите некоторое время пока проект создастся и загрузит все необходимые пакеты для работы с STM32.

Повторное создание проекта для работы с STM32 произойдет гораздо быстрее потому что все необходимые пакеты будут уже загружены при создании первого проекта. Теперь перейдите в пункт меню Untitled(Workspace) -> src -> main.cpp как мы это уже рассматривали ранее в статье при работе с платой Arduino.

Следующим шагом идет выбор программатора – он весьма важный. Для программирования плат STM32 могут быть использованы такие программаторы как JTAG, STLink, JLink, Serial и т.п. Все они рабочие, но вам необходимо соответствующим образом сконфигурировать страницу конфигурации ‘platformio.ini’

В этом проекте мы используем программатор Serial Programmer CP210x USB to UART Bridge. Подсоедините этот последовательный программатор к плате STM32 (как показано в следующей таблице) и к вашему компьютеру.

USB to Serial Programmer STM32 Board
5V 5V
Gnd Gnd
Rx A9
Tx A10

После этого перейдите в менеджер проектов (project explorer), откройте в нем страницу ‘platformio.ini’ и внесите в нее изменения как показано на следующем рисунке. Протокол загрузки кода (upload_protocol) определяет какой программатор следует использовать ((STLink, JLink, Serial и т.д.). В качестве параметра upload_port следует указать используемый вами COM порт. Вы можете изменить/выбрать используемый COM порт в пункте меню ‘Devices’ на главной странице PlatformIO.

После этого перейдите в ‘main.cpp’ и напишите/измените программу мигания светодиодом. Далее загрузите код программы в плату. В случае успешной загрузки кода будут показаны параметры его загрузки. После загрузки кода вы сможете наблюдать мигание светодиода, подключенного к контакту PC13 платы STM32.

Как использовать выводы BOOT ?

Как упоминалось ранее, контакты BOOT0 и BOOT1 микроконтроллера  используются для выбора памяти, с которой он загружается. На следующем рисунке показаны три различных варианта загрузочных пространств на основе этих контактов:

Когда контакты BOOT0 и BOOT1 имеют НИЗКИЙ уровень, тогда внутренняя флэш-память выступает в качестве основного загрузочного пространства, а когда BOOT0 — ВЫСОКИЙ, а BOOT1 — низкий, системная память выступает в качестве основного загрузочного пространства. Эти два варианта важны для нас.

Чтобы загрузить код во флэш-память микроконтроллера, вы должны выбрать системную память в качестве основного загрузочного пространства. Причина этого заключается в том, что системная память содержит встроенный загрузчик, который программируется во время  производства.

Загрузив в системную память, т. е. в bootloader ROM, вы можете перепрограммировать флэш-память в своем приложении, используя последовательный интерфейс USART1.

Как только программа будет загружена во флэш-память, вы можете переключить BOOT0 на LOW, чтобы после следующего сброса или включения питания микроконтроллера программа загрузилась из флэш-памяти.

Если вы заметили,  в обоих случаях, т.е. при выборе флэш-памяти и выборе системной памяти в качестве загрузочных пространств, вывод BOOT1 имеет НИЗКИЙ. Только BOOT0 переключается между LOW (флэш-память) и HIGH (системная память).

Для удобства, давайте назовем эти варианты загрузки как режим программирования и рабочий режим. Для режима программирования вывод BOOT0 устанавливается ВЫСОКИМ, а для режима работы вывод BOOT0 — НИЗКИМ (по умолчанию). В обоих режимах контакт BOOT1 остается НИЗКИМ.