В этом проекте мы кратко рассмотрим плату разработки STM32F103C8T6, которая основана на микроконтроллере ARM Cortex-M3 от STMicroelectronics.
Мы покажем вам некоторые важные функции этой платы, как настроить существующую среду Arduino для работы с этой платой, а также напишем первую программу — Blink. Итак, начнем.
Вступление
В последнее десятилетие платформа Arduino все чаще используется в качестве платы разработки для быстрого создания прототипов, хобби-проектов. Но мы все знаем об ограничениях платы Arduino. На пример, Arduino UNO — у нее достаточно медленный процессор, работающий на частоте 16 МГц.
Плата Arduino UNO имеет очень ограниченное внутреннее оборудование, малую вычислительную мощность, ОЗУ и Flash для запуска приложения на основе FreeRTOS (теоретически вы можете запустить FreeRTOS на Arduino, но это не практично).
Альтернативой Arduino является плата разработки на основе микроконтроллера STM32F103C8T6, которую часто называют Blue Pill. Этот микроконтроллер основан на архитектуре ARM Cortex-M3 производства STMicroelectronics.
STM32F103C8T6 является очень мощным микроконтроллером с 32-разрядным процессором, который легко может превзойти по производительности Arduino UNO. В качестве дополнительного бонуса вы можете легко запрограммировать эту плату, используя интегрированную среду разработки Arduino IDE (хотя и с некоторыми хитростями и дополнительным программатором, например конвертером USB/UART).
Краткая заметка о плате разработки STM32F103C8T6
На следующем рисунке показана лицевая и задняя стороны типичной платы Blue Pill STM32. Как видите, макет платы очень прост, и некоторые могут даже спутать ее с Arduino Nano.
Важной особенностью этих плат является то, что они очень дешевы, дешевле, чем клонированная версия Arduino UNO. Приобрести данную плату можно примерно за 2,5 доллара на Aliexpress. Очевидно это клонированная версия. На рынке доступно много клонированных версий этой платы.
Особенности платы
- Она содержит основной микроконтроллер — STM32F103C8T6.
- Кнопка сброса — для сброса микроконтроллера.
- Порт microUSB — для последовательной связи и питания.
- Перемычки выбора BOOT — перемычки BOOT0 и BOOT1 для выбора загрузочной памяти.
- Два светодиода — пользовательский светодиод и индикатор питания.
- Кварц на 8 МГц.
- Кварц на 32,768 кГц — часы RTC.
- SWD Interface — интерфейс для программирования и отладки с использованием ST-Link.
- Стабилизатор питания 3,3 В — преобразует 5 В в 3,3 В для питания микроконтроллера.
На каждой длинной стороне платы есть контакты для подключения различных аналоговых и цифровых устройств ввода-вывода и питания. На следующем рисунке показана конфигурация контактов платы, а также различные функции, поддерживаемые каждым контактом.
Как видно из приведенного выше рисунка, каждый вывод микроконтроллера STM32F103C8T6 может иметь несколько функций (но необходимо выбрать только одну). Также обратите внимание, что некоторые контакты ввода / вывода допускают 5 В, это означает, что вы можете подключить к этим контактам 5 В совместимый ввод / вывод.
Проблемы с STM32 Blue Pill Board
Если вы планируете купить более дешевую версию (вероятно, большинство из нас так и поступают), то существуют некоторые известные проблемы с платами, о которых вы должны знать. Мы собрали эти вопросы с различных форумов и сами столкнулись с некоторыми проблемами (связанными с USB).
- Первым основным вопросом является стабилизатор напряжения 3,3 В. Хотя на некоторых платах использовались оригинальные регуляторы напряжения 3,3 В на LM1117 от TI, на большинстве же дешевых плат разработки установлены не имеющие аналогов стабилизаторы напряжения. Эти стабилизаторы не имеют никакой тепловой защиты и легко выходят из строя. Решением является использование внешнего регулируемого источника питания, если у вас есть такая возможность.
- Следующие две проблемы связаны с USB. Качество пайки порта microUSB очень низкое, и если вы часто отсоединяете и вставляете кабель в этот порт, то существует высокая вероятность того, что разъем microUSB отсоединится от платы. Вы можете использовать горячий клей для усиления разъема.
- Другой проблемой, связанной с USB, является использование неправильного подтягивающего резистора. Согласно datasheet MCU, USB D + (называемый USBDP) должен быть подтянут до 3,3 В с использованием резистора 1,5 кОм. Но согласно схемам нескольких плат Blue Pill, все они используют резистор 10 кОм. Если вы планируете работать с передачей данных через USB, вы можете не получить точных результатов. Чтобы исправить это вы можете припаять резистор 1,8 кОм параллельно существующему резистору 10 кОм. Для этого подключите резистор 1,8 кОм между контактами A12 и 3,3 В.
- Другие известные проблемы: очень трудно нажимать на кнопку сброса, аналоговое питание подключено к цифровому питанию, нет защиты диода Шоттки для USB и т. д.
Основные моменты STM32F103C8T6
Теперь, когда мы немного узнали о плате Blue Pill, пришло время разобраться с некоторыми важными особенностями самой платы, то есть с микроконтроллером STM32F103C8T6. Как упоминалось ранее, этот микроконтроллер содержит 32-битное ядро ARM Cortex-M3 с максимальной частотой 72 МГц. Посмотрим, какие технические характеристики этого микроконтроллера реализованы на плате Blue pill.
Характеристики STM32F103C8T6
- Память: содержит 64 Кбайт Flash и 20 Кбайт SRAM
- Количество GPIO выводов — 32 с возможностью внешнего прерывания
- Таймеры — три 16-битных таймера, один 16-битный ШИМ-таймер
- Количество PWM выводов — 15
- Количество аналоговых выводов — 10 каналов 12-битного АЦП
- I2C — два периферийных устройства I2C
- USART — три периферийных устройства USART с аппаратным управлением
- SPI — два SPI периферийных устройства
- Другие периферийные устройства — USB 2.0 Full Speed, CAN 2.0B
Это некоторые из основных моментов, и если вы хотите узнать больше информации о периферийных устройствах, вам следует обратиться к datasheet (настоятельно рекомендуем).
В качестве дополнения расскажем о маркировке, используемой в микроконтроллерах STM32 на примере STM32F103C8T6. Каждая буква и цифра в названии микроконтроллера обозначает особую характеристику:
Как использовать выводы BOOT STM32F103C8T6?
Как упоминалось ранее, контакты BOOT0 и BOOT1 микроконтроллера используются для выбора памяти, с которой он загружается. На следующем рисунке показаны три различных варианта загрузочных пространств на основе этих контактов:
Когда контакты BOOT0 и BOOT1 имеют НИЗКИЙ уровень, тогда внутренняя флэш-память выступает в качестве основного загрузочного пространства, а когда BOOT0 — ВЫСОКИЙ, а BOOT1 — низкий, системная память выступает в качестве основного загрузочного пространства. Эти два варианта важны для нас.
Чтобы загрузить код во флэш-память микроконтроллера, вы должны выбрать системную память в качестве основного загрузочного пространства. Причина этого заключается в том, что системная память содержит встроенный загрузчик, который программируется во время производства.
Загрузив в системную память, т. е. в bootloader ROM, вы можете перепрограммировать флэш-память в своем приложении, используя последовательный интерфейс USART1.
Как только программа будет загружена во флэш-память, вы можете переключить BOOT0 на LOW, чтобы после следующего сброса или включения питания микроконтроллера программа загрузилась из флэш-памяти.
Как вы уже заметили, в обоих случаях, т.е. при выборе флэш-памяти и выборе системной памяти в качестве загрузочных пространств, вывод BOOT1 имеет НИЗКИЙ. Только BOOT0 переключается между LOW (флэш-память) и HIGH (системная память).
Для удобства, давайте назовем эти варианты загрузки как режим программирования и рабочий режим. Для режима программирования вывод BOOT0 устанавливается ВЫСОКИМ, а для режима работы вывод BOOT0 — НИЗКИМ (по умолчанию). В обоих режимах контакт BOOT1 остается НИЗКИМ.
Требования к оборудованию для проекта
Для программирования микроконтроллера нам понадобиться модуль USB-последовательный преобразователь, такой как плата FTDI (или что-то подобное). Как упомянуто выше о BOOT выводах, к загрузчику можно получить доступ с помощью контактов 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
Настройка 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.
Теперь вы можете выбрать плату из Инструменты -> Плата -> Generic STM32F1 series. После того, как вы выберете эту плату, ниже появится ряд опций для настройки типа вашей платы. Первый важный параметр — «Тип платы». Убедитесь, что выбран «BluePill F103C8».
Другими важными опциями являются «Поддержка UART», установите как «Включено (generic «Serial»)» и «Метод загрузки», сделайте его как «STM32CubeProgrammer (Serial)». Вы можете оставить остальные опции в качестве значений по умолчанию.
Загрузка STM32CubeProgrammer
На предыдущем шаге мы выбрали «STM32CubeProgrammer (Serial)» в качестве метода загрузки, но проблема в том, что этот инструмент не загружается и не устанавливается менеджером плат.
Итак, мы должны установить его вручную. Для этого перейдите на официальную страницу загрузки STM32CubeProgrammer, предоставленную STMicroelectronics, по следующей ссылке: STM32CubeProgrammer
Нажмите на опцию Get Software, и вы попадете на страницу входа / регистрации. Я предлагаю вам зарегистрироваться в STMicroelectronics с действительным адресом электронной почты. После регистрации вы можете войти и загрузить программное обеспечение.
Будет загружен большой zip-файл (приблизительно 164 МБ для версии 2.3.0). Распакуйте zip-файл, и вы получите исполняемый файл Windows с именем «SetupSTM32CubeProgrammer-2.3.0». Дважды щелкните и продолжите установку.
Убедитесь, что каталог установки установлен по умолчанию, и ничего не меняйте. Может потребоваться разрешение на установку некоторых драйверов для ST-Link. Вы можете предоставить необходимые разрешения.
После завершения установки убедитесь, что в папке “C:\Program Files\STMicroelectronics\STM32Cube\STM32CubeProgrammer\bin” имеется исполняемый файл «STM32_Programmer_CLI». Если он присутствует, то вы можете продолжить.
ПРИМЕЧАНИЕ. Это может быть либо Program Files, либо Program Files (x86) по указанному выше пути.
На этом завершается настройка программного обеспечения для Arduino IDE для программирования STM32 Blue Pill. Давайте напишем небольшую программу «Blink — мигание светодиодом» и загрузим ее в нашу плату STM32 Blue Pill.
Программа Blink для платы Blue Pill STM32F103C8T6
Убедитесь, что вы внесли необходимые изменения в IDE Arduino, как указано в предыдущем разделе (выбор правильной платы и т. д.). Как только это будет сделано, установите соединение между программатором FTDI (т. е. с USB Serial Converter) и платой STM32, как указано выше.
Теперь, прежде чем подключать FTDI к ПК, убедитесь, что плата находится в «режиме программирования», т.е. переключите контакт 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 половину обьяснил а дальше догодайся мол сама а ты эту вторую половину завершил спасибо теперь буду эксперментировать
Использовал ST-LINK V2. Программа загрузилась после выбора Upload method: «STM32Cube Programmer (SWD)».
Но появилась проблема: после digitalWrite(PC13, LOW); светодиод включается, а после digitalWrite(PC13, HIGH); гаснет. Может я чего-то не понимаю?
Все правильно, он включается низким уровнем, т.к. светодиод другим концом подключен через резистор к 3,3 v