Проводим нагрузочное тестирование скоростных usb-библиотек для stm32f103c8t6

Содержание

Краткая заметка о плате разработки STM32F103C8T6

На следующем рисунке показана лицевая и задняя стороны типичной платы Blue Pill STM32. Как видите, макет платы очень прост, и некоторые могут даже спутать ее с Arduino Nano.

Важной особенностью этих плат является то, что они очень дешевы, дешевле, чем клонированная версия Arduino UNO. Я получил эту плату примерно за 2,5 доллара в местном магазине электроники. Таким образом, это, очевидно, клонированная версия (возможно, поддельный микроконтроллер STM32). На рынке доступно много клонированных версий этой платы

Особенности платы

  • Она содержит основной микроконтроллер — STM32F103C8T6.
  • Кнопка сброса — для сброса микроконтроллера.
  • Порт microUSB — для последовательной связи и питания.
  • Перемычки выбора BOOT — перемычки BOOT0 и BOOT1 для выбора загрузочной памяти.
  • Два светодиода — пользовательский светодиод и индикатор питания.
  • Кварц на 8 МГц.
  • Кварц 32,768 кГц — часы RTC.
  • SWD Interface — для программирования и отладки с использованием ST-Link.
  • Стабилизатор питания 3,3 В — преобразует 5 В в 3,3 В для питания микроконтроллера.

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

Как видно из приведенного выше изображения, каждый вывод микроконтроллера STM32F103C8T6 может иметь несколько функций (но необходимо выбрать только одну). Также обратите внимание, что некоторые контактыввода / вывода допускают 5 В, что означает, что вы можете подключить 5 В совместимый ввод / вывод на эти контакты без каких-либо проблем

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. То есть, если на каком-то этапе разработки стало ясно, что выбранного микроконтроллера не хватает для реализации всех возможностей, то можно безболезненно выбрать более навороченный камень без необходимости переписывать весь существующий софт, при этом, если новый камень будет в том же корпусе, то отпадает необходимость заново разводить печатную плату.

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

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

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

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

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

Сравнение STM32 с Arduino

Сравнение STM32 с Arduino

По техническим характеристикам Ардуино проигрывает STM32. Тактовая частота микроконтроллеров Ардуино ниже – 16 МГц против 72 МГц STM32. Количество выводов GRIO у STM32 больше. Объем памяти у STM32 также выше. Нельзя не отметить pin-to-pin совместимость STM32 – для замены одного изделия на другое не нужно менять плату. Но полностью заменить ардуино конкуренты не могут. В первую очередь это связано с высоким порогом вхождения – для работы с STM32 нужно иметь базис. Платы Ардуино более распространены, и, если у пользователя возникает проблема, найти решение можно на форумах. Также для Ардуино созданы различные шилды и модули, расширяющие функционал. Несмотря на преимущества, по соотношению цена/качество выигрывает STM32.

Семейство микроконтроллеров STM32 отличается от своих конкурентов отличным поведением при температурах от -40С до +80 С. Высокая производительность не уменьшается, в отличие от Ардуино. Также можно найти изделия, работающие при температурах до 105С.

Прошивка 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…

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

Проблемы с STM32 Blue Pill Board

Если вы планируете купить более дешевую версию (вероятно, большинство из нас так и поступают), то есть некоторые известные проблемы с платами, о которых вы должны знать. Я собрал эти вопросы на разных форумах и сам столкнулся с некоторыми проблемами (связанными с USB).

  • Первым основным вопросом является стабилизатор напряжения 3,3 В. Хотя на некоторых платах использовались оригинальные регуляторы напряжения 3,3 В на LM1117 от TI, на большинстве дешевых плат разработки установлены не имеющие аналогов стабилизаторы напряжения. Эти стабилизаторы не имеют никакой тепловой защиты и легко выходят из строя. Решением является использование внешнего регулируемого источника питания, если у вас есть такая возможность.
  • Следующие две проблемы связаны с USB. Во-первых, качество пайки порта microUSB очень низкое, и если вы часто отсоединяете и вставляете кабель в этот порт, то существует высокая вероятность того, что разъем microUSB отсоединится от платы. Вы можете использовать горячий клей для усиления разъема.
  • Другой проблемой, связанной с USB, является использование неправильного подтягивающего резистора. Согласно справочному руководству MCU, USB D + (называемый USBDP) должен быть поднят до 3,3 В с использованием резистора 1,5 кОм. Но согласно схемам нескольких плат Blue Pill, все они используют резистор 10 кОм. Если вы планируете работать с передачей данных через USB, вы можете не получить точных результатов. Если вы хотите испровить это, тогда вы можете припаять резистор 1,8 кОм параллельно существующему резистору 10 кОм. Для этого подключите резистор 1,8 кОм между контактами A12 и 3,3 В.
  • Другие известные проблемы: очень трудно нажимать на кнопку сброса, аналоговое питание подключено к цифровому питанию, нет защиты диода Шоттки для USB и т. д.

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 или для создания программных таймеров.

Открываем техническую документацию…

Судя по описанию: «HK32F030x4 / HK32F030x6 / HK32F030x8. HK32F030 Перечисленные микросхемы разработаны компанией Shenzhen Haohan Tianji Processor Co., Ltd., дочерней компанией Shenzhen Hangshun Chip Technology Research Co., Ltd.».

И тут честно говоря я был в восторге! Во первых чипы могут работать в диапазоне питающего напряжения от 2,0 В до 5,5 В. Во вторых: максимальная тактовая частота ядра аж до 72 МГц!!! Прям сказка да и только!!! Убедитесь сами!!!:

…читаем дальше!!!

Тут я добираюсь до функциональной схемы модуля генерации частот… и слегка недоумеваю…

…что такое RCC_CFGR4, у STM’ки его нет! Открываем библиотечный файл «stm32f0xx.h»:

Но сравнив данный модуль с оригинальным, я понимаю что на CFGR4 мне пофиг, куска которым управляет данный регистр у оригинального чипа нет:

…просмотрев весь документ я понимаю что информации о чипе в документе явно не достаточно, можно было бы предположить что в нем точно повторен STM32F030, однако тут я вспомнил про регистр CFGR4…

В итоге прорыв просторы интернета я таки нашел ссылку на неведомую библиотеку HK32F0_LibraryV1.0.3… и оказывается вон оно как:

…интересно китайцы специально отступили (uint32_t RESERVED; /*!< Reserved) чтоб в лоб не получилось найти доп регистры или это фишка реализации?

Посмотрев библиотеку, увидел что по регистрам периферии прям одно и то же с оригиналом! Ну дык и давайте шить прошивку!!! (…достаю из закромов родины забавную программную реализацию USB для STM32F0xx…) Зашиваю, и получаю:

Не понял, беру STM32F030, зашиваю:

Но я ж не просто так, меня попросили помочь переехать с STM на HK и чтоб программное USB работало… и тут мне слегка не по себе стало… кто реализовывал программный USB на ARM, тому наверное сразу вспомнится цитата из документашки: » performs no operation and is not guaranteed to be time consuming. The processor might remove it from the pipeline before it reaches the execution stage. » Иными словами NOP пользуется для выравнивания команд и с конвейера его проц может «выплевывать» не задерживаясь на выполнение пустой операции… но я не совсем про это говорю, как ровнять тайминги если неизвестно сколько тактов тратит каждая инструкция?

Этож целая экспедиция переписать тактозависимые функции приема и передачи для ядра ARM!!!

Тут абсолютно понятно что HK явно не является «клоном» по количеству тактов на инструкции. Однако где найти документацию по ассемблерным командам и самое главное по тактам затрачиваемым на выполнение.

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

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

Но для программирования микроконтроллера нам нужен модуль 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

Reference manual

Поехали далее. Reference manual (справочное руководство) содержит подробное описание всей периферии, регистров, смещений, и так далее. Это основной документ, который используется при создании прошивки под микроконтроллер. Reference manual составлен для большой группы микроконтроллеров, в нашем случае для всех STM32F10xxx, а именно STM32F101xx, STM32F102xx, STM32F103xx и STM32F105xx/STM32F107xx. Но STM32F100xx не входят в этот RM, для них есть свой.

Главное в Reference manual-е

Как было сказано выше, в reference manual-е есть разделение на следующие «виды» микроконтроллеров: low-, medium-, high-density и connectivity line. В 2.3 Glossary разъяснено, кто есть кто:

  • Low-density devices это STM32F101xx, STM32F102xx и STM32F103xx микроконтроллеры, у которых размер Flash-памяти находится между 16 и 32 Kbytes.
  • Medium-density devices это STM32F101xx, STM32F102xx and STM32F103xx, размер флеш-памяти между 64 и 128 Kbytes.
  • High-density devices это STM32F101xx и STM32F103xx, размер флеш-памяти между 256 и 512 Kbytes.
  • XL-density devices это STM32F101xx и STM32F103xx, размер флеш-памяти между 768 Kbytes и 1 Mbyte.
  • Connectivity line devices это микроконтроллеры STM32F105xx и STM32F107xx.

Наш STM32F103C8T6 является Medium-density device-ом. Это будет полезно знать при изучении периферии, например, есть отдельные разделы про RCC для Low-, medium-, high- and XL-density устройств, и Connectivity line devices.

Далее обратимся к Tabe 1. В ней отмечено, какой раздел применим к конкретному типу микроконтроллеров. У нас это Medium-density STM32F103xx:

Далее все просто: идет куча разделов, в каждом из которых содержится описание на конкретную периферию и ее регистры &#128578;

Программное обеспечение для работы с контроллером

Keil Uvision 4

Для ARM архитектуры разработано множество сред разработки. К самым известным и дорогостоящим относятся инструменты фирм Keil и IAR System. Программы этих компаний предлагают самые продвинутые инструментарии для оптимизации кода. Также дополнительно существуют различные системы – USB стеки, TCP/IP-стеки и прочие. Применяя системы Keil, пользователь получает хороший уровень технической поддержки.

Также для STM32 используется среда разработки Eclipse и построенные на ней системы Atollic TrueStudio (платная) и CooCox IDE (CoIDE) (бесплатная). Обычно используется последняя. Ее преимущества перед другими средами разработки:

  • Свободно распространяемое программное обеспечение;
  • Удобство использования;
  • Имеется много примеров, которые можно загрузить.

Единственный недостаток среды разработки CooCox IDE – сборка есть только под Windows.

Прошивка STM32 с помощью USB-Uart переходника под Windows

STM32BootloaderSTM32USARTFT232RLFT232RLftdichip.comVCP

Подключаем RX и TX выходы к соответствующим выводам USART1 микроконтроллера. RX переходника подключаем к TX микроконтроллера (A9). TX переходника подключаем к RX микроконтроллера (A10). Поскольку USART-USB имеет выходы питания 3.3В подадим питания на плату от него.

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

После нажатия кнопки Reset или отключения и подключения питания, микроконтроллер должен перейти в режим программирования.

Цены

24 предложений от 18 поставщиков
Многофункциональная отладочная плата на базе 32-битного ARM микроконтроллера STM32F103C8T6.Характеристики платы STM32F103C8T6:Flash память: 64КRAM: 20K37 портов ввода/выводаSPI, I2C, UARTТактовая частота: 72 МГц…

ЗУМ-СМДРоссия STM32F103C8T6STMicroelectronics 83 ₽ Купить
Стандарт СИЗРоссия STM32F103C8T6TR, Микроконтроллер 32-Бит, Cortex-M3, 72МГц, 64КБ Flash STMicroelectronics 84 ₽ Купить
Электродеталь- ПоставкаРоссия STM32F103C8T6STMicroelectronics 147 ₽ Купить
Умные МодулиРоссия Плата STM32F103C8T6 STM32 STM 759 ₽ Купить

Загрузка STM32CubeProgrammer

На предыдущем шаге мы выбрали «STM32CubeProgrammer (Serial)» в качестве метода загрузки, но проблема в том, что этот инструмент не загружается и не устанавливается менеджером плат.

Нажмите на опцию 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. Давайте приступим к написанию небольшой программы для мигания светодиода и загрузки ее в нашу плату STM32 Blue Pill.

Что еще?

Здесь мы не рассмотрели еще некоторые блоки системы тактирования, о которых хочется упомянуть.

Clock security system (CSS) — переводится примерно как «система безопасности тактирования». Если, при использовании генератора HSE в качестве источника тактового сигнала для SYSCLK или PLL, произойдет срыв генерации HSE, то CSS автоматически переключит всю систему на работу от встроенного RC-генератора HSI. Таким образом, если что-то случится с кварцем, система не зависнет намертво в неопределенном состоянии, а сможет выполнить какие-то действия, например, перевести объект управления в безопасное состояние (закрыть все вентили, отключить силовые установки, и т.д.)

Модуль часов реального времени RTC может тактироваться от встроенного LSI генератора на 40 КГц, от HSE через делитель на 128, либо от LSE с внешним кварцем на 32768 Гц. Источник тактовых импульсов выбирается с помощью RTCSEL.

Модуль USB получает тактовый сигнал от PLL, причем при частоте на выходе PLL равной 72 МГц есть возможность активировать USB Prescaler с коэффициентом деления 1.5 для получения необходимой частоты 48 МГц.

Microcontroller clock output (MCO) — вывод микроконтроллера, на который можно вывести частоту от одного из источников сигнала: SYSCLK, HSE, HSI либо сигнал с выхода PLL, поделенный пополам. Нужный источник выбирается с помощью битов MCO.

Основные моменты STM32F103C8T6

Теперь, когда мы немного узнали о плате Blue Pill, давайте теперь разберемся с некоторыми важными особенностями самой платы, то есть микроконтроллера STM32F103C8T6. Как упоминалось ранее, этот микроконтроллер содержит 32-битное ядро ​​ARM Cortex-M3 с максимальной частотой 72 МГц.

Давайте теперь посмотрим, какие технические характеристики этого микроконтроллера реализованы на плате Blue pill.

Характеристики STM32F103C8T6

  • Память: содержит 64 Кбайт Flash и 20 Кбайт SRAM
  • GPIO Pins — 32 с возможностью внешнего прерывания
  • Таймеры — 3 16-битных таймера, 1 16-битный ШИМ-таймер
  • PWM Pins — 15
  • Аналоговый — 10 каналов 12-битного АЦП
  • I2C — 2 периферийных устройства I2C
  • USART — 3 периферийных устройства USART с аппаратным управлением
  • SPI — 2 SPI периферийных устройства
  • Другие периферийные устройства — USB 2.0 Full Speed, CAN 2.0B

Это некоторые из основных моментов, и если вы хотите узнать больше информации о периферийных устройствах, вам следует обратиться к datasheet (настоятельно рекомендуется).

В качестве дополнительной темы позвольте мне рассказать вам о маркировке, используемое в микроконтроллерах STM32 на примере STM32F103C8T6. Каждая буква в названии микроконтроллера обозначает особую характеристику:

Что такое STM32

STM32 – это платформа, в основе которой лежат микроконтроллеры STMicroelectronics на базе ARM процессора, различные модули и периферия, а также программные решения (IDE) для работы с железом. Решения на базе stm активно используются благодаря производительности микроконтроллера, его удачной архитектуре, малом энергопотреблении, небольшой цене. В настоящее время STM32 состоит уже из нескольких линеек для самых разных предназначений.

История появления

Серия STM32 была выпущена в 2010 году. До этого компанией STMicroelectronics уже выпускались 4 семейства микроконтроллеров на базе ARM, но они были хуже по своим характеристикам. Контроллеры STM32 получились оптимальными по свойствам и цене. Изначально они выпускались в 14 вариантах, которые были разделены на 2 группы – с тактовой частотой до 2 МГц и с частотой до 36 МГц. Программное обеспечение у обеих групп одинаковое, как и расположение контактов. Первые изделия выпускались со встроенной флеш-памятью 128 кбайт и ОЗУ 20 кбайт. Сейчас линейка существенно расширилась, появились новые представители с повышенными значениями ОЗУ и Flash памяти.

Достоинства и недостатки STM32

Основные преимущества:

  • Низкая стоимость;
  • Удобство использования;
  • Большой выбор сред разработки;
  • Чипы взаимозаменяемы – если не хватает ресурсов одного микроконтроллера, его можно заменить на более мощной, не меняя самой схемы и платы;
  • Высокая производительность;
  • Удобная отладка микроконтроллера.

Недостатки:

  • Высокий порог вхождения;
  • На данный момент не так много литературы по STM32;
  • Большинство созданных библиотек уже устарели, проще создавать свои собственные.

Минусы STM32 не дают пока микроконтроллеру стать заменой Ардуино.

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

  1. HSI — сигнал с внутреннего высокочастотного генератора, его выдаёт 8 МГц кварцевый резонатор, который я впаивал перед работой с этой платой;
  2. PLLCLK — сигнал с множителя частоты PLLMUL;
  3. 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

  1. режим порта — выход. В соответствии с документацией необходимо записать 01 в соответствующую область (MODER4) соответствующего регистра (GPIOA_MODER), т.е. биты 9 и 8: в 9-ом бите должен оказаться ноль, в 8-ом единица:

  2. тип выхода. Честно говоря, я до сих пор до конца не разобрался в схемотехнике этого дела (буду разбираться, ещё раз перечитывать форумы и проч.), но изучение других ресурсов по теме конфигурации выхода МК, а также логика и интуиция подсказывают, что здесь должен быть push-pull и далее должен быть pull-up. Во всяком случае код написан, всё работает и ничего не сгорело. Есть реальный риск сжечь, если выбрать тип open-drain и закоротить этот вывод с другим устройством, т.к. это открытый выход и он ничем не защищён. К тому же у нас имеется токоограничительный резистор перед диодом — тут уж точно не сгорит.
    Следуя документации, необходимо записать ноль в 4-ый бит; также в документации указано, что после сброса здесь будет ноль.

  3. скорость вывода. В нашем случае не играет значения, но для верности запишу сюда ноль.

  4. подтяжка. Т.к. вывод будет питать светодиод, необходимо подтянуть к питанию, т.е. pull-up.
    Нужно подтянуть 4-ый вывод порта A; документация говорит, что для этого необходимо записать в 9 и 8 биты ноль и единицу соответственно.

3.3.3 Включение-выключение светодиода и задержка

IDRODRвходнымивыходнымиODRABCDFPA4

если включена оптимизация компиляторакомпилятор вырежетCompileCompile Control String-O0-O0-O1 -O2 -O3

t

stm32f0xx.h

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. То есть, если на каком-то этапе разработки стало ясно, что выбранного микроконтроллера не хватает для реализации всех возможностей, то можно безболезненно выбрать более навороченный камень без необходимости переписывать весь существующий софт, при этом, если новый камень будет в том же корпусе, то отпадает необходимость заново разводить печатную плату.