Stm32. программирование stm32f103. тестовая плата. прошивка через последовательный порт и через st-link программатор
Содержание
- 1 Маркировка STM32
- 2 Порядок работы со стороны хоста
- 3 1.5 RS422/485 интерфейс
- 4 Bootloader
- 5 Прошивка STM32 с помощью STM32 Flash Loader Demonstrator
- 6 Объемная трехмерная модель платы
- 7 Для чего нужен Secure Boot
- 8 Bootloader в режиме USB Mass Storage
- 9 2.2 Настройка утилиты
- 10 Что такое STM32
- 11 Обработка ошибок на уровне пакетов и таймаутов
- 12 Как снять защиту от записи / чтения?
- 13 Прошивка STM32 с помощью USB-Uart переходника под Linux (Ubuntu)
- 14 Первая программа
- 15 4Подключение осциллографа DSO138 к компьютеру
- 16 Обзор продуктовых линеек
- 17 3.3 Работа с документацией
- 18 Bootloader folder
- 19 Сравнение STM32 с Arduino
- 20 Порядок работы со стороны устройства
Маркировка STM32
Device family | Product type | Device subfamily | Pin count | Flash memory size | Package | Temperature range |
---|---|---|---|---|---|---|
STM32 = ARM-based 32-bit microcontroller |
F = General-purpose L = Ultra-low-power TS = TouchScreen W = wireless system-on-chip |
60 = multitouch resistive 103 = performance line |
F = 20 pins G = 28 pins K = 32 pins T = 36 pins H = 40 pins C = 48/49 pins R = 64 pins O = 90 pins V = 100 pins Z = 144 pins I = 176 pins B = 208 pins N = 216 pins |
4 = 16 Kbytes of Flash memory 6 = 32 Kbytes of Flash memory 8 = 64 Kbytes of Flash memory B = 128 Kbytes of Flash memory Z = 192 Kbytes of Flash memory C = 256 Kbytes of Flash memory D = 384 Kbytes of Flash memory E = 512 Kbytes of Flash memory F = 768 Kbytes of Flash memory G = 1024 Kbytes of Flash memory I = 2048 Kbytes of Flash memory |
H = UFBGA N = TFBGA P = TSSOP T = LQFP U = V/UFQFPN Y = WLCSP |
6 = Industrial temperature range, –40…+85 °C. 7 = Industrial temperature range, -40…+ 105 °C. |
STM32 | F | 103 | C | 8 | T | 6 |
Порядок работы со стороны хоста
- Получаем информацию с устройства: размер флеша, ChipID, размер буфера приёма, адрес старта, версия загрузчика и чипа.
- Даём команду стирания либо всей прошивки, либо части указав размер стираемой области.
- По завершению стирания начинаем непрерывно отправлять команды записи блоками друг за другом, проверяя что текущая записанная позиция в устройстве увеличивается.
- Если позиция перестала увеличиваться (приняли два ответа на команду «запись» с одинаковым адресом), то скорректировать адрес на Хосте, сбросить буферы отправки и начать передавать с нового скорректированного адреса.
- По завершению записи подать команду «Старт» передав CRC32 всей прошивки, в ответ Устройство сообщит фактическое CRC32.
- Если фактическое CRC32 равно расчётному, то загрузка успешно закончена и прошивка запущена.
1.5 RS422/485 интерфейс
Установленные на плате микросхемы приемопередатчики ADM2682E отвечают за преобразование уровней встроенного в микроконтроллер приемопередатчика USART в уровни сигналов интерфейса RS422/485.
Изделия ADM2682E/ADM2687E фирмы Analog Devices представляют собой полностью интегральные приёмопередатчики данных с эффективным 5 кВ сигналом и изолированным питанием, имеющие ±15 кВ ESD защиту и пригодные для сверхскоростной связи на многопунктовых линиях передачи.
Каждое из изделий ADM2682E/ADM2687E содержит интегральный изолированный DC-DC преобразователь. В приборах интегрирована технология iCoupler фирмы Analog Devices, Inc., сочетающая в одном корпусе 3-канальный вентиль, трёхступенчатый дифференциальный драйвер линии, дифференциальный входной приёмник и разработанный фирмой Analog Devices преобразователь постоянного напряжения isoPower. Микросхема питаются от одиночного источника питания 5 В или 3.3 В, производящего полностью интегральный сигнал, представляя собой RS-422/485 решение с развязкой по цепям питания.
Характерные особенности и преимущества
- Изолированный RS-485/RS-422 приёмопередатчик с эффективным 5 кВ сигналом, с конфигурацией в виде полудуплексной или дуплексной связи;
- Интегральный изолированный преобразователь постоянного напряжения isoPower ;
- ±15 кВ ESD защита на выводах RS-485 вход/выход;
- Соответствует требованиям стандартов ANSI/TIA/EIA-485-A-98 и ISO 8482:1987(E);
- Питание от 5 В или 3.3 В;
- Соединяет до 256 узлов на одной шине;
- Входы приёмника предохранены от размыкания и КЗ и отказов;
- Высокая стойкость к переходным процессам в синфазном режиме: >25 кВ/мксек;
- Скорость передачи данных: 500 кБит/сек для ADM2682E до 16 Mбит/сек для ADM2687E.
Назначение контактов разъема ХP8 (XP9)
1 RS422/485_TX1+
2 RS422/485_TX1-
3 RS422/485_GND
4 RS422/485_RX1-
5 RS422/485_RX1+
6 RS422/485_GND
7 RS422/485GND
8 RS422/485+5V
9 RS422/485_GND
Структурная схема подключения 4-проводного RS422 – интерфейса.
Установкой перемычек подключаются согласующие резисторы. Для подключения к цепям RX+ и RX- каналов XP11 и XP12 согласующего резистора установить перемычки на X34 и X32 в соответствии с рисунком ниже.
Для реализации 2-проводного RS485 интерфейса необходимо соединить линии RX- и TX- и линии RX+ и TX+ так, как показано на рисунке ниже. Для этого соединить в кабельном разъеме контакты 1,5 и 2, 4.
Bootloader
It is possible to configure bootloader size, application address, boot device hardware I2C ID,
and even different kind of format.
The folloing is the configuration file ‘bootconfig.h’
-
Bootloader Size and Application Address
Depend on different optimization option, the bootloader size is different. The boundary can be only on the
multiply of flash size(2048 bytes). The default size for bootloader is 12K, so that the application address is from 0x8003000(page 6).
If C/C++ compiler optimize option is -O3, is possible to change to bootloader size to 8K, with the following changes in ‘bootconfig.h’ -
I2C EEPROM (or other boot device)
The EEPROM I2C ID is defined
You can change to different one if circuit is different. The bootloader use the following function to read data for updated application,
defined in ‘i2c_ee.c’It is possible to use different kind of method(UART, SPI) just to rewrite the ‘StreamRead’ function.
-
Intel Hex Format (or different format)
The updated program is the hex file generated by the Keil compiler.
When you load hex file to EEPROM, make sure to use binary format
(instead of INTEL Hex format). Only binary format will retain the hex file data. -
Dummy main program
Before the application loaded, bootloader will run a dummy main program before new application loaded.
It is very convenient for debugging.
This is defined at bootconfig.h.If Uses_DUMMY_MAIN is not defined, the linker optimization will delete the dummy main vector table(at the application area)
so that we can concatenate bootloader(without the end of file record) and application program to form a complete program.
Прошивка STM32 с помощью STM32 Flash Loader Demonstrator
Ко мне периодически обращаются с вопросом – как прошить STM32?
В STM32 есть встроенный Bootloader, затереть его в отличие от Arduino нельзя, никаких фьюз-битов тоже настраивать не нужно. То есть в любом новом проце с завода есть все, чтобы его прошить через обычный COM порт или USB-UART переходник. Почему такая простая операция вызывает проблемы, я не знаю, но решил, что проще один раз показать
Я взял для примера плату из этого поста, но принцип абсолютно одинаковый для любых плат:
- пин BOOT0 подтянуть к питанию (3.3V)
- подключить USART1 микроконтрллера черех переходник USB-UART к ПК.
- запустить Flash Loader Demonstrator и залить прошивку
- отключить переходник USB-UART (не обязательно)
- подтянуть BOOT0 к земле (нормальное положение)
- если питание не отключали, то нажать Reset на плате, если отключали – пора подключить питание
Вот и все операции. Показываю наглядно:
Надеюсь, теперь у всех все получится
Объемная трехмерная модель платы
Некоторые любительские устройства делают полностью модульными, то есть на плату вставляются/припаиваются готовые китайские модули. В некоторых случаях это удобно и намного проще, поэтому ловите упрощенную, но красивую модельку платы, ну а посадочное место есть выше.
Выбор режима загрузки
Внутрисхемное программирование
ISP — In-System Programing
Способ 1: Когда питание включено, нажмите кнопки BOOT0 и NRST, затем отпустите NRST и через 0.5 с отпустите BOOT0.
Способ 2: Когда питание выключено, зажмите BOOT0, подключите питание и через 0.5 с отпустите BOOT0.
Обновление прошивки
DFU — Device Firmware Update
Режим DFU: подключите через USB-кабель плату к ПК.
Режим последовательного порта:
MiniF4 | USB-COM | |
PA9 (TX) | <-> | RX |
PA10 (RX) | <-> | TX |
ПО:
STM32CubeProg
*схемы и инструкция с гитхаба: https://github.com/WeActTC/MiniF4-STM32F4x1
Для чего нужен Secure Boot
В общем случае разработчику, который хочет защитить свое устройство, предстоит решить две ключевые задачи.
- В первую очередь следует реализовать механизм подтверждения подлинности прошивки (аутентификации). Для этого используются различные криптографические алгоритмы (например, SHA-256 и NIST P256). Они позволяют убедиться, что на устройстве будет исполняться только доверенный код.
- Кроме того, необходимо защитить память от внешних атак и лишить злоумышленника доступа к критичным регионам, который он может в теории получить с помощью уязвимостей ПО либо при использовании отладочных интерфейсов (например, JTAG) или логического анализатора.
Итак, это два разных механизма защиты и преследуют они разные цели, но только их совместное применение позволяет эффективно бороться с угрозами. Иными словами, даже самые совершенные криптографические алгоритмы окажутся бесполезными, если хакер может получить расшифрованный дамп прошивки. И наоборот, защищенная от считывания память никак не предотвратит загрузку программы с вредоносным кодом.
Bootloader в режиме USB Mass Storage
Bootloader в режиме USB Mass Storagehttp://blog.myelectronics.com.ua/stm32-usb-mass-storage-bootloader/
Поясню. У нас всего 64 Кб, пусть 10Кб займет Bootloader, остается 54Кб. Половину отдадим под Mass Storage, это будет 27Кб. Из этого объема FAT12 откусит 20Кб, останутся 7Кб под файл прошивки. То есть на Mass Storage не влезет файл больше 7Кб. Если оптимизировать распределение памяти и отдать под Mass Storage 38Кб, тогда под программы останется 16 Кб. Это для нас тоже не приемлемо. Поэтому такое решение для нашего микроконтроллера, с небольшим объемом Flash-а, не подходит. Но поблагодарим автора! Именно фрагменты этого проекта я использовал для создания примера Bootloader-а описанного в этой статье.
Дальнейшие поиски привели меня к Bootloader-у описанного в статье http://easyelectronics.ru/proshivka-arm-cortex-m3-na-primere-stm32-i-lpc1300.html Шикарный замысел, но реализация полностью не приемлема. Контроллер действительно видно как MASS STORAGE диск, на него вроде бы можно залить новую прошивку, но корректно это происходит только когда файл копировать программой FAR. И только FAR! Удивительно, но простое копирование файла происходит по-разному если это делать разными файл-менеджерами. Операционная система Ubuntu вообще не смогла смонтировать устройство. Поправить что-то в этом Bootloader-е нельзя, поэтому эта реализация тоже была отвергнута. Пришлось писать свой Bootloader.
Почему именно USB Mass Storage? Скажем, я делаю не коммерческий проект и хочу чтобы для обновления прошивки конечным пользователям не нужно было искать специфический софт и драйверы. Для работы с Mass Storage устройствами операционные системы используют стандартные драйверы, поэтому с драйверами проблем вообще нет. Обновление прошивки может происходить на разных операционных системах поэтому желательно чтобы программы для обновления прошивки вообще не надо было, или использовались стандартные решения. В этом случае простое копирование файла — наиболее красивое решение.
Забегая вперед скажу, что не все так просто. Мне пока не удалось реализовать этот замысел в идеальном виде. Поэтому, желательно чтобы процедура заливки прошивки была более или менее стандартной и, как я сказал, можно было обойтись стандартными командами или стандартным программным обеспечением.
Продолжаем разбираться …
2.2 Настройка утилиты
интерфейс (у меня это COM-3);
скорость, с которой будет общаться компьютер и микроконтроллер (имхо, 9600 нормальное значение);
количество бит данных (у меня это окно почему-то недоступно, но пока это не важно);
чётность (у меня без чётности, т.е. None);
echo (у меня ВЫКЛ);
время ожидания (у меня 10 секунд).
Во-первых, нужно проверить не замкнута ли перемычка BOOT на плате.
Во-вторых, в любом случае, отключить питание микроконтроллера и желательно линии TX и RX, идущие от переходника на плату (землю можно не отключать).
В-третьих, в программе прожать Back до конца, т.е. до первой странички, или же вообще закрыть её и запустить заново (вообще говоря, она иногда подвисает)
Важно перед каждым подключением к плате через эту программу всегда начинать с первой страницы.
В-четвёртых, подцепить обратно провода от переходника к плате и снова попытаться подключиться в программе (обязательно с первой странички!).
NRSTDatasheetOrdering information
- стереть память (всю или выбрать конкретную область);
- записать прошивку на устройство;
- считать прошивку с устройства;
- включить/отключить защиту от записи или чтения.
Что такое STM32
STM32 – это платформа, в основе которой лежат микроконтроллеры STMicroelectronics на базе ARM процессора, различные модули и периферия, а также программные решения (IDE) для работы с железом. Решения на базе stm активно используются благодаря производительности микроконтроллера, его удачной архитектуре, малом энергопотреблении, небольшой цене. В настоящее время STM32 состоит уже из нескольких линеек для самых разных предназначений.
История появления
Серия STM32 была выпущена в 2010 году. До этого компанией STMicroelectronics уже выпускались 4 семейства микроконтроллеров на базе ARM, но они были хуже по своим характеристикам. Контроллеры STM32 получились оптимальными по свойствам и цене. Изначально они выпускались в 14 вариантах, которые были разделены на 2 группы – с тактовой частотой до 2 МГц и с частотой до 36 МГц. Программное обеспечение у обеих групп одинаковое, как и расположение контактов. Первые изделия выпускались со встроенной флеш-памятью 128 кбайт и ОЗУ 20 кбайт. Сейчас линейка существенно расширилась, появились новые представители с повышенными значениями ОЗУ и Flash памяти.
Достоинства и недостатки STM32
Основные преимущества:
- Низкая стоимость;
- Удобство использования;
- Большой выбор сред разработки;
- Чипы взаимозаменяемы – если не хватает ресурсов одного микроконтроллера, его можно заменить на более мощной, не меняя самой схемы и платы;
- Высокая производительность;
- Удобная отладка микроконтроллера.
Недостатки:
- Высокий порог вхождения;
- На данный момент не так много литературы по STM32;
- Большинство созданных библиотек уже устарели, проще создавать свои собственные.
Минусы STM32 не дают пока микроконтроллеру стать заменой Ардуино.
Обработка ошибок на уровне пакетов и таймаутов
- Если код команды не соответствует проверочному инверсному коду, то начало пакета не засчитывается, и поиск новой команды начинается со следующих байт.
- Если принят пакет с размером дополнительной информации больше чем внутренний буфер, то пакет игнорируется, и поиск новой команды начинается со следующих после размера байт.
- Если принятая в теле пакета CRC32 не равна фактически расчётной, то содержимое пакета игнорируется и поиск новой команды начинается с следующих после CRC32 байт.
- Если приходят байты, но сигнатура начала пакета не задетектирована. То эти байты считать отладочными текстовыми сообщениями и накапливать до кода 13 (перевод строки), а после этого кода выводить в отладочную консоль.
- Если с момента приёма последнего пакета прошло более 500мс, то загрузчик сбрасывается в изначальное состояние. Пакет, который не успел приняться до конца, игнорируется и так-же сбрасывается. О таймауте Устройство сообщает пакетом с специальным кодом команды «таймаут».
- При запуске загрузчика генерируется другой пакет со специальным кодом «перезагрузка».
Как снять защиту от записи / чтения?
Я это буду делать из под Ubuntu с помощью утилиты stm32flash.
1. Проверяем видно ли микроконтроллер:
Должны получить что-то такое:
stm32flash 0.4 http://stm32flash.googlecode.com/ Interface serial_posix: 57600 8E1 Version : 0x22 Option 1 : 0x00 Option 2 : 0x00 Device ID : 0x0410 (Medium-density) - RAM : 20KiB (512b reserved by bootloader) - Flash : 128KiB (sector size: 4x1024) - Option RAM : 16b - System RAM : 2KiB
2. Снимаем защиту от чтения а затем от записи:
stm32flash 0.4 http://stm32flash.googlecode.com/ Interface serial_posix: 57600 8E1 Version : 0x22 Option 1 : 0x00 Option 2 : 0x00 Device ID : 0x0410 (Medium-density) - RAM : 20KiB (512b reserved by bootloader) - Flash : 128KiB (sector size: 4x1024) - Option RAM : 16b - System RAM : 2KiB Read-UnProtecting flash Done.
stm32flash 0.4 http://stm32flash.googlecode.com/ Interface serial_posix: 57600 8E1 Version : 0x22 Option 1 : 0x00 Option 2 : 0x00 Device ID : 0x0410 (Medium-density) - RAM : 20KiB (512b reserved by bootloader) - Flash : 128KiB (sector size: 4x1024) - Option RAM : 16b - System RAM : 2KiB Write-unprotecting flash Done.
Теперь можно нормально работать с микроконтроллером.
Желаю успехов!
Смотри также:
- 1. STM32. Программирование STM32F103. Тестовая плата. Прошивка через последовательный порт и через ST-Link программатор
- 2. STM32. Программирование. IDE для STM32
- 3. STM32. Программирование STM32F103. GPIO
- 4. STM32. Программирование STM32F103. Тактирование
- 5. STM32. Программирование STM32F103. USART
- 6. STM32. Программирование STM32F103. NVIC
- 7. STM32. Программирование STM32F103. ADC
- 8. STM32. Программирование STM32F103. DMA
- 9. STM32. Программирование STM32F103. TIMER
- 10. STM32. Программирование STM32F103. TIMER. Захват сигнала
- 11. STM32. Программирование STM32F103. TIMER. Encoder
- 12. STM32. Программирование STM32F103. TIMER. PWM
- 13. STM32. Программирование STM32F103. EXTI
- 14. STM32. Программирование STM32F103. RTC
- 15. STM32. Программирование STM32F103. BKP
- 16. STM32. Программирование STM32F103. Flash
- 17. STM32. Программирование STM32F103. Watchdog
- 18. STM32. Программирование STM32F103. Remap
- 19. STM32. Программирование STM32F103. I2C Master
- 20. STM32. Программирование STM32F103. I2C Slave
- 21. STM32. Программирование STM32F103. USB
- 22. STM32. Программирование STM32F103. PWR
- 23. STM32. Программирование STM32F103. Option bytes
- 24. STM32. Программирование STM32F103. Bootloader
- STM32. Скачать примеры
- System Workbench for STM32 Установка на Ubuntu
- Keil uVision5 – IDE для STM32
- IAR Workbench – IDE для STM32
- Управление бесколлекторным двигателем постоянного тока (BLDC) с помощью STM32
- Управление PMSM с помощью STM32
Прошивка STM32 с помощью USB-Uart переходника под Linux (Ubuntu)
Устанавливаем stm32flash
http://launchpadlibrarian.net/188294676/stm32flash_0.4-2_i386.debstm32flashhttps://launchpad.net/ubuntu/wily/i386/stm32flash/0.4-2
Если используем USB-UART переходник, имя порта буде примерно такое /dev/ttyUSB0
Получить информацию о чипе
Результат:
stm32flash 0.4 http://stm32flash.googlecode.com/ Interface serial_posix: 57600 8E1 Version : 0x22 Option 1 : 0x00 Option 2 : 0x00 Device ID : 0x0410 (Medium-density) - RAM : 20KiB (512b reserved by bootloader) - Flash : 128KiB (sector size: 4x1024) - Option RAM : 16b - System RAM : 2KiB
Пишем в чип
Результат:
stm32flash 0.4 http://stm32flash.googlecode.com/ Using Parser : Raw BINARY Interface serial_posix: 57600 8E1 Version : 0x22 Option 1 : 0x00 Option 2 : 0x00 Device ID : 0x0410 (Medium-density) - RAM : 20KiB (512b reserved by bootloader) - Flash : 128KiB (sector size: 4x1024) - Option RAM : 16b - System RAM : 2KiB Write to memory Erasing memory Wrote and verified address 0x08012900 (100.00%) Done. Starting execution at address 0x08000000... done.
Первая программа
CooCox CoIDE
Обучение следует начинать с простейшего – с Hello World. Для начала нужно установить CooCox IDE на компьютер. Установка стандартная:
- Скачивается программа с официального сайта;
- Там нужно ввести адрес своей электронной почты и начать загрузку файла с расширением .exe;
- Нужно открыть CooCox IDE вкладку Project, Select Toolchain Path;
- Указать путь к файлу;
- Снова открыть среду разработки и нажать View -> Configuration на вкладку Debugger;
- Теперь можно записывать программу.
Когда программа установлена, ее нужно открыть. Следует перейти во вкладку Browse in Repository и выбрать ST – свой микроконтроллер.
Далее на экране появится список библиотек, которые можно подключить. Для первой программы потребуются системные CMSIS core и CMSIS Boot, библиотека для работы с системой тактирования RCC, GPIO для работами с пинами.
Сама программа пишется как и для Ардуино, нужно знать основы языка Си.
В окошке Project следует открыть main.c. В коде в самом начале следует подключить библиотеки кроме CMSIS (они уже автоматически подключены). Добавляются они следующим образом:
#include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h". //Для мигания светодиодом нужно задать задержку: void Delay(int i) { for (; i != 0; i--); }
Затем добавляется тактирование порта в главной функции main. Какой контакт за что ответственен, можно просмотреть в даташите к микроконтроллеру.
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);
Для настройки параметров выводов следует прописать ее название и поставить точку. Во всплывающем меню будут указаны все характеристики. Их можно исправлять.
После этого нужно сделать зацикливание в while, чтобы светодиод мигал, пока не отключится питание.
Когда программа написана, ее можно загружать в контроллер. Если есть отладочная плата, ее нужно подключить через USB кабель и нажать Download Code To Flash. Если плата отсутствует, потребуется переходник, который нужно подключить к порту компьютера. Контакт BOOT 0 подключается к плюсу питания контроллера, а затем включается само питание МК. После этого начнется прошивка.
Чтобы загрузить программу в микроконтроллер, нужно следовать указаниям от приложения. Сначала прописывается код порта, к которому подключен микроконтроллер. Также указывается скорость. Советуется брать небольшое значение, чтобы не было сбоев. Программа найдет микроконтроллер, и нужно будет нажать кнопку «далее». Во вкладке Download to device нужно в поле Download from file выбрать написанную программу и нажать «далее».
После этого нужно отключить питание контроллера STM32, закрыть Flash Loader Demonstrator, выключить переходник. Теперь можно снова включить микроконтроллер в обычном режиме. Когда программа будет загружена, светодиод начнет мигать.
Работа в других программах проходит подобным образом. Также выбираются нужные библиотеки, и прописывается код. У платных утилит функционал больше, и можно создавать более сложные проекты.
4Подключение осциллографа DSO138 к компьютеру
Для загрузки прошивки в память осциллографа используется порт J5 (UART) с логическим уровнем 3,3 В. Чтобы подключить его к компьютеру нам понадобится преобразователь USB в UART, например вот такой. На многих преобразователях имеется перемычка для переключения напряжения между 5 и 3,3 вольтами.
Подключаем «свисток» к осциллографу согласно схеме.
Схема подключения осциллографа DSO138 к компьютеру через преобразователь USB-UART
Обратите внимание, что порт TX преобразователя (выход) должен быть подключён к порту RX (вход) осциллографа, и наоборот. А GND – общий провод
Теперь можно подключать конвертер к USB порту компьютера.
Будет это выглядеть примерно так:
Осциллограф DSO138 подключён к ПУ через преобразователь USB-UART
Обзор продуктовых линеек
STM32L
Семейство STM32 имеет широкий ассортимент изделий, различающихся по объему памяти, производительности, потреблению энергии и другим характеристикам.
Серии STM32F-1, STM32F-2 и STM32L полностью совместимы. Каждая из серий имеет десятки микросхем, которые можно без труда поменять на другие изделия. STM32F-1 была первой линейкой, ее производительность была ограничена. Из-за этого по характеристикам контроллеры быстро догнали изделия семейства Stellaris и LPC17. Позднее была выпущена STM32F-2 с улучшенными характеристиками – тактовая частота достигала 120 МГц. Отличается высокой процессорной мощностью, которая достигнута благодаря новой технологии производства 90 нм. Линейка STM32L представлена моделями, которые изготовлены по специальному технологическому процессу. Утечки транзисторов минимальны, благодаря чему приборы показывают лучшие значения.
Важно отметить, что контроллеры линейки STM32W не имеют pin-to-pin совместимости с STM32F-1, STM32F-2 и STM32L. Причина заключается в том, что линейку разрабатывала компания, которая предоставила радиочастотную часть
Это наложило ограничения на разработку для компании ST.
STM32F100R4
Микросхема STM32F100R4 имеет минимальный набор функций. Объем флэш памяти составляет 16 Кбайт, ОЗУ – 4 Кбайт, тактовая частота составляет 12 МГц. Если требуется более быстрое устройство с увеличенным объемом флэш-памяти до 128 Кбайт, подойдет STM32F101RB. USB интерфейс имеется у изделия STM32F103RE. Существует аналогичное устройство, но с более низким потреблением – это STM32L151RB.
3.3 Работа с документацией
stm32f0xx.hcmsis_boot
3.3.1 Выбор источника тактирования
datasheetPower managementClocks and startupпо умолчанию после сброса МК в качестве основного источника тактирования выбирается внутренняя 8-ми МГц RC-цепочкаD1D2D == diodeR7D1J2PA4PA4APA4Block diagramDescriptionPA <=> GPIO port A <=> AHB decoder <=> Bus matrix <=> Cortex-M0АAHBABCDFAHBAHBHCLKHPRESYSCLKSWSWSYSCLK
- HSI — сигнал с внутреннего высокочастотного генератора, его выдаёт 8 МГц кварцевый резонатор, который я впаивал перед работой с этой платой;
- PLLCLK — сигнал с множителя частоты PLLMUL;
- HSE — сигнал с внешнего высокочастотного генератора.
HSIReference manual7 Reset and clock control (RCC)7.2.6 System clock selectionHSIHSI7.4 RCC registersClock control register (RCC_CR)HSION1RCC_CRstm32f0xx.hRCC#define RCCRCC_BASE0x40021000defineReference manual2.2.2 Memory map and register boundary adresses5 Memory mappingAHBCRRCCHSI
3.3.2 Настройка ножек
GPIOGPIOAHB7.4 RCC registers7.4.6 AHB peripheral clock enable registerRCC_AHBENRAHBPA4A
#definestm32f0xx.h
APA4выход8 General-purpose I/Os (GPIO)GPIOx_MODERGPIOx_OTYPERGPIOx_OSPEEDRGPIOx_PUPDRGPIOx_IDRGPIOx_ODRу каждого GPIO порта есть 4 настроечных регистра и 2 регистра данныхAPA418.4 GPIO registers
-
режим порта — выход. В соответствии с документацией необходимо записать 01 в соответствующую область (MODER4) соответствующего регистра (GPIOA_MODER), т.е. биты 9 и 8: в 9-ом бите должен оказаться ноль, в 8-ом единица:
-
тип выхода. Честно говоря, я до сих пор до конца не разобрался в схемотехнике этого дела (буду разбираться, ещё раз перечитывать форумы и проч.), но изучение других ресурсов по теме конфигурации выхода МК, а также логика и интуиция подсказывают, что здесь должен быть push-pull и далее должен быть pull-up. Во всяком случае код написан, всё работает и ничего не сгорело. Есть реальный риск сжечь, если выбрать тип open-drain и закоротить этот вывод с другим устройством, т.к. это открытый выход и он ничем не защищён. К тому же у нас имеется токоограничительный резистор перед диодом — тут уж точно не сгорит.
Следуя документации, необходимо записать ноль в 4-ый бит; также в документации указано, что после сброса здесь будет ноль. -
скорость вывода. В нашем случае не играет значения, но для верности запишу сюда ноль.
-
подтяжка. Т.к. вывод будет питать светодиод, необходимо подтянуть к питанию, т.е. pull-up.
Нужно подтянуть 4-ый вывод порта A; документация говорит, что для этого необходимо записать в 9 и 8 биты ноль и единицу соответственно.
3.3.3 Включение-выключение светодиода и задержка
IDRODRвходнымивыходнымиODRABCDFPA4
если включена оптимизация компиляторакомпилятор вырежетCompileCompile Control String-O0-O0-O1 -O2 -O3
t
stm32f0xx.h
true oldschool
Bootloader folder
folder contains the source code for creating the hid_bootloader.bin file that is burned into the STM32F103 flash memory. Currently, only STM32F103 MCU is supported. Making the hid_bootloader.bin
Examples:
STM32F10x
Clears the previous generated files
Creates the hid_bootloader.bin file, assigning the LED to pin PC13. Edit the make_all.bat file to see all supported pin options.
If you want to use a High Density Device such as *STM32F103RCT6, then you have to add an extra argument to the command.
Example: Creates the hid_bootloader.bin file, assigning the LED to pin PD2. Edit the make_all_hd.bat file to see all supported pin options.
STM32F4xx
Clears the previous generated files
Creates the hid_bootloader.bin file
After compiling, the binary file can be found in:
Сравнение STM32 с Arduino
Сравнение STM32 с Arduino
По техническим характеристикам Ардуино проигрывает STM32. Тактовая частота микроконтроллеров Ардуино ниже – 16 МГц против 72 МГц STM32. Количество выводов GRIO у STM32 больше. Объем памяти у STM32 также выше. Нельзя не отметить pin-to-pin совместимость STM32 – для замены одного изделия на другое не нужно менять плату. Но полностью заменить ардуино конкуренты не могут. В первую очередь это связано с высоким порогом вхождения – для работы с STM32 нужно иметь базис. Платы Ардуино более распространены, и, если у пользователя возникает проблема, найти решение можно на форумах. Также для Ардуино созданы различные шилды и модули, расширяющие функционал. Несмотря на преимущества, по соотношению цена/качество выигрывает STM32.
Семейство микроконтроллеров STM32 отличается от своих конкурентов отличным поведением при температурах от -40С до +80 С. Высокая производительность не уменьшается, в отличие от Ардуино. Также можно найти изделия, работающие при температурах до 105С.
Порядок работы со стороны устройства
- Отвечаем на команду информации, а при сбросе или таймауте оповещаем хост об этом.
- Прошивка записывается последовательно с начала свободного диапазона до конца прошивки или свободного места.
- В устройстве содержится адрес текущего блока, который должен быть записан.
- По умолчанию адрес текущего блока установлен в 0, что означает, что стирание не было выполнено и запись недопустима.
- Команда стирания: стираем сколько запрошено округлив по размеру страницы и отчитываясь о каждой стёртой странице.
- По окончанию стирания адрес текущего блока устанавливается на начало свободного диапазона — можно начать запись.
- Команда записи: если адрес принятого блока равен адресу текущего блока, то записываем его и обновляем текущий адрес.
- Команда записи: если адрес принятого блока НЕ равен адресу текущего блока, то игнорируем запись.
- В обоих случаях 6 и 7 сообщаем в хост адрес текущего для записи блока.
- По окончании записи Хост должен выдать команду «Старт» с CRC32 всей прошивки, и если она верна, то прошивка запускается.
- Если в течении 5 секунд команд не поступало, то запустить основную прошивку если она есть.
- При таймауте 500мс или аппаратном сбросе адрес текущего для записи блока сбрасывается в 0.