Datasheet stmicroelectronics stm32f103c8t6

Содержание

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

Основные моменты 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. Каждая буква в названии микроконтроллера обозначает особую характеристику:

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

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 обеспечивает возможность расширенной сетевой отладки.

Настройка 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)». Вы можете оставить остальные опции в качестве значений по умолчанию.

Настройка порта GPIO

Итак, с регистрами разобрались, настало время практики. Все примеры в этой статье для микроконтроллера STM32F103C8. В моем распоряжении есть вот такая отладочная плата:

На ней установлен кварцевый резонатор на 8 МГц и светодиод на порту PB12. Вот с помощью этого светодиода мы и устроим Hello, World!

Задача ясна: настраиваем PB12 на выход в режиме push-pull и с помощью регистра ODR дергаем 12-й пин порта GPIOB туда-сюда! Но мы забыли об одной маленько детали: RCC. Дело в том, что по-умолчанию после сброса микроконтроллера все периферийные модули отключены от источника тактового сигнала, в том числе и GPIO. А подать тактирование можно с помощью регистров RCC. В 3-ей части я про это говорил. Для начала нужно определить, к какой шине у нас подключен GPIOB. Открываем даташит на микроконтроллер, ищем вот эту таблицу:

Рис. 8. Таблица шин и периферийных устройств

GPIOB у нас подключен к шине APB2. Идем в Reference manual, открываем раздел про RCC, переходим к пункту 7.3.7 APB2 peripheral clock enable register (RCC_APB2ENR). С помощью этого регистра можно подать тактовый сигнал на устройства шины APB2:

Рис. 9. Регистр RCC_APB2ENR

В регистре RCC_APB2ENR много флагов для разной периферии, в том числе и для нашего GPIOB, флаг называется IOPBEN. Перед началом инициализации PB12 нам надо установить этот бит в единицу.

Поехали программировать! За основу возьмем проект из 2-й части: https://github.com/DiMoonElec/stm32f103c8_empty_project. Создадим функцию инициализации порта:

void PortInit(void)
{
}

GPIOB

RCC->APB2ENR |= RCC_APB2ENR_IOPBEN; //Включаем тактирование порта GPIOB

PB12CRH:

GPIOB->CRH &= ~(GPIO_CRH_MODE12 | GPIO_CRH_CNF12); //для начала все сбрасываем в ноль
  
//MODE: выход с максимальной частотой 2 МГц
//CNF: режим push-pull
GPIOB->CRH |= (0x02 << GPIO_CRH_MODE12_Pos) | (0x00 << GPIO_CRH_CNF12_Pos);
void PortInit(void)
{
  RCC->APB2ENR |= RCC_APB2ENR_IOPBEN; //Включаем тактирование порта GPIOB
  
  GPIOB->CRH &= ~(GPIO_CRH_MODE12 | GPIO_CRH_CNF12); //для начала все сбрасываем в ноль
  
  //MODE: выход с максимальной частотой 2 МГц
  //CNF: режим push-pull
  GPIOB->CRH |= (0x02 << GPIO_CRH_MODE12_Pos) | (0x00 << GPIO_CRH_CNF12_Pos);
}

ODRPB12

void PortSetHi(void)
{
  GPIOB->ODR |= (1<<12);
}
void PortSetLow(void)
{
  GPIOB->ODR &= ~(1<<12);
}

GPIOB->ODR |= (1<<12)STM32

void PortSetHi(void)
{
  GPIOB->BSRR = (1<<12);
}

void PortSetLow(void)
{
  GPIOB->BRR = (1<<12);
}

 (1<<12)0x1000BSRRBRRрис. 5, 6

Ни и простой main() для проверки:

void main()
{
  int i;
  PortInit();
  
  for(;;)
  {
    PortSetHi();
    for(i=0; i<0x40000; i++)
      ;

    PortSetLow();
    for(i=0; i<0x40000; i++)
      ;
  }
}

BP12«Hello, World!»

Давайте теперь настроим какой-нибудь вывод порта, например PB15, на вход с подтяжкой к питанию. При подключении PB15 к минусу, у нас будет зажигаться светодиод. Задача ясна, преступаем к реализации. В PortInit() добавим пару строк:

/// Настраиваем PB15 на вход с подтяжкой к питанию ///
GPIOB->CRH &= ~(GPIO_CRH_MODE15 | GPIO_CRH_CNF15);
//MODE: вход, оставляем в нуле
//CNF: вход с pull-up / pull-down
GPIOB->CRH |= (0x00 << GPIO_CRH_MODE15_Pos) | (0x02 << GPIO_CRH_CNF15_Pos);

GPIOB->ODR |= (1<<15); //Включаем подтяжку вверх

PB12MODE/CNFODRODRCNF=10Input with pull-up / pull-downODRReference manual

Рис. 10. Таблица конфигурации порта

Функция PortInit() приобретает такой вид:

void PortInit(void)
{
  RCC->APB2ENR |= RCC_APB2ENR_IOPBEN; //Включаем тактирование порта GPIOB
  
  /// Настраиваем PB12 на выход ///
  GPIOB->CRH &= ~(GPIO_CRH_MODE12 | GPIO_CRH_CNF12); //для начала все сбрасываем в ноль
  
  //MODE: выход с максимальной частотой 2 МГц
  //CNF: режим push-pull
  GPIOB->CRH |= (0x02 << GPIO_CRH_MODE12_Pos) | (0x00 << GPIO_CRH_CNF12_Pos);
  
  /// Настраиваем PB15 на вход с подтяжкой к питанию ///
  GPIOB->CRH &= ~(GPIO_CRH_MODE15 | GPIO_CRH_CNF15);
  //MODE: вход, оставляем в нуле
  //CNF: вход с pull-up / pull-down
  GPIOB->CRH |= (0x00 << GPIO_CRH_MODE15_Pos) | (0x02 << GPIO_CRH_CNF15_Pos);
  
  GPIOB->ODR |= (1<<15); //Включаем подтяжку вверх
}

PB15IDR

int ReadPort(void)
{
  if(GPIOB->IDR & (1<<15))
    return 1;
  return 0;
}

IDR

В этом случае main() будет выглядеть вот так:

void main()
{
  PortInit();
  
  for(;;)
  {
    if(ReadPort())
      PortSetHi();
    else
      PortSetLow();
  }
}

stm32f103c8PB12PB15PP12PB15PB15ReadPort()PB12

На этом все, продолжение следует! Продолжение.

Первая программа

CooCox

Выполняем пункт меню Project -> New

Указываем имя проекта:

Выбираем Чип:

В репозитории выбираем какие именно модули мы будем использовать:

Открываем main.c і набираем следующий код программы:

Компилируем (Project->Build)

При первой компиляции IDE может запросить указать местонахождение компилятора.

Надо корректно указать место, куда был установлен GCC.

После удачной компиляции заливаем программу в микроконтроллер. Эта программа будет мигать светодиодом на плате. Как залить программу в микроконтроллер мы рассматривали в предыдущей статье.

Если Вы будете заливать прошивку через UART с помощью UART-USB переходника, файл для заливки найдете в директории:
C:\CooCox\CoIDE\workspace\Example_GPIO\Example_GPIO\Debug\bin\Example_GPIO.bin

Если у Вас есть установленный ST-Link программатор, программу в микроконтроллер можно залить прямо с IDE (Flash -> Program Download).

Если при этом возникла ошибка «Error: Flash driver function execute error» Рекомендуется:

  1. Запустить STM32 ST-LINK Utility и выполнить Frimware update.
  2. Скопировать файл STLinkUSBDriver.dll из папки
    C:\Program Files\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility
    в папку
    C:\CooCox\CoIDE\bin
    после чего перезапустить CooCox IDE

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

Прошивка 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 или отключения и подключения питания, микроконтроллер должен перейти в режим программирования.

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

Вступление

В последнее десятилетие Arduino стала платформой для быстрого создания прототипов, хобби-проектов или в качестве платы отладки для начинающих радиолюбителей. Но мы все знаем об ограничениях платы Arduino. Давайте обсудим Arduino UNO, так как это самый популярный Arduino.

Эта плата медленная, работает на частоте 16 МГц, имеет очень ограниченное внутреннее оборудование и не имеет достаточной вычислительной мощности, ОЗУ и Flash для запуска приложения на основе FreeRTOS (теоретически вы можете запустить FreeRTOS на Arduino, но это не практично).

Альтернативой Arduino является плата разработки на основе микроконтроллера STM32F103C8T6, которую часто называют Blue Pill. Этот микроконтроллер основан на архитектуре ARM Cortex-M3 производства STMicroelectronics.

STM32F103C8T6 является очень мощным микроконтроллером и с 32-разрядным процессором легко может превзойти по производительности Arduino UNO. В качестве дополнительного бонуса вы можете легко запрограммировать эту плату, используя вашу Arduino IDE (хотя и с некоторыми хитростями и дополнительным программатором, например конвертером USB в U (S) ART).

Маркировка 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

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;

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

Проблемы с 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 и т. д.