IoT проверка на практике

Распространенные микроконтроллеры и их применение.

STM32

Для начала обучения программированию на stm32 использую отладочные платы на базе микроконтроллеров с ядрами Cortex M3 и Cortex M4.

  1. Минимальная отладочная плата "Blue Pill" STM32F103C8T6. 72MГц 64Кб flash и 20Кб SRAM
  2. Отладочная плата Nucleo-64 STM32F303RE, содержащая отладчик ST-Link v2.1, который можно использовать как встроенный и как отдельный, и микроконтроллер STM32F303RET6. 72МГц 512Кб flash, 80Кб SRAM. Данная плата содержит коннекторы ST morpho а также Arduino Uno. (можно подключить модуль с дисплеем, например)

На сайте ST.com доступно большое количество документации по этим микроконтроллерам (ссылки справа). Точнее так: на сайте производителя есть вся необходимая документация. Для написания программ кроме знаний языка С и архитектуры микроконтроллеров нужно научиться использовать стандартные библиотеки, облегчающие работу с регистрами, периферией устройства. Библиотека общая для всех Cortex M - CMSIS. По сути работа с CMSIS это работа непосредственно с регистрами микроконтроллера, только вместо цифр адресов регистров и битовых масок можно применять их более менее понятные сокращенные наименования. Раньше для stm32 использовалась SPL, сейчас эту библиотеку заменяет LL, относительно лаконичная библиотека, использование которой почти не сказывается на размере готового файла прошивки, в отличие от HAL. HAL - библиотека вводящая новый уровень абстракции для отделения программирования контроллера от аппаратной реализации конкретного контроллера из семейства STM32. Эти две библиотеки могут использоваться отдельно или одновременно, независимо друг от друга. После изучения этих библиотек буду осваивать прикладные библиотеки RTOS, FS, и т.д. за исключением надстроек для "простого и быстрого программирования".

STM32 F103 C8T6

"Blue Pill" STM32 F103 C8T6

Плата "за 100 рублей", купленная на Aliexpress позволяет в наше время быстро приобщиться к программированию на 32х разрядных контролерах. Да, для начала крайне желательно подробно изучить то, что мы собрались программировать. По ядру Cortex M3 написана подробная книга, есть русский перевод, также есть обзор, распространенный в сети (поиск по запросу "Инсайдерское руководство по STM32") как на английском так и в переводе. Несмотря на краткость, для читателя, который только что пришел в эту тему (как я) он даст массу полезной информации. В отличие от книги в обзоре описана архитектура конкретной группы контроллеров STM32F1xx. Т.е. не только ядро Cortex M, но и вся периферия микроконтроллера, который, например, стоит на плате "Blue Pill" (на фото). НО полное ясное описание все же следует икать в Reference Manual RM0008 на сайте st.com.(на английском) Для лучшего понимания практических вопросов можно и нужно читать блоги, статьи о программировании на stm32. Очень неплох для начального изучения курс "Штурмуем STM32", только не отдельно, а в дополнение к остальным источникам. Интересна эпическая серия из более чем 150 уроков на сайте narodstream.ru (ссылки справа)

Характеристики (с st.com):

  • ARM®32-bit Cortex®-M3 CPU Core
    • 72 MHz maximum frequency,1.25 DMIPS/MHz (Dhrystone 2.1) performance at 0 wait state memory access
    • Single-cycle multiplication and hardware division
  • Memories
    • 64 or 128 Kbytes of Flash memory
    • 20 Kbytes of SRAM
  • Clock, reset and supply management
    • 2.0 to 3.6 V application supply and I/Os
    • POR, PDR, and programmable voltage detector (PVD)
    • 4-to-16 MHz crystal oscillator
    • Internal 8 MHz factory-trimmed RC
    • Internal 40 kHz RC
    • PLL for CPU clock
    • 32 kHz oscillator for RTC with calibration
  • Low-power
    • Sleep, Stop and Standby modes
    • VBAT supply for RTC and backup registers
  • 2 x 12-bit, 1 μs A/D converters (up to 16 channels)
    • Conversion range: 0 to 3.6 V
    • Dual-sample and hold capability
    • Temperature sensor
  • DMA
    • 7-channel DMA controller
    • Peripherals supported: timers, ADC, SPIs, I2Cs and USARTs
  • Up to 80 fast I/O ports
    • 26/37/51/80 I/Os, all mappable on 16 external interrupt vectors and almost all 5 V-tolerant
  • Debug mode
    • Serial wire debug (SWD) & JTAG interfaces
  • 7 timers
    • Three 16-bit timers, each with up to 4 IC/OC/PWM or pulse counter and quadrature (incremental) encoder input
    • 16-bit, motor control PWM timer with dead-time generation and emergency stop
    • 2 watchdog timers (Independent and Window)
    • SysTick timer 24-bit downcounter
  • Up to 9 communication interfaces
    • Up to 2 x I2C interfaces (SMBus/PMBus)
    • Up to 3 USARTs (ISO 7816 interface, LIN, IrDA capability, modem control)
    • Up to 2 SPIs (18 Mbit/s)
    • CAN interface (2.0B Active)
    • USB 2.0 full-speed interface
  • CRC calculation unit, 96-bit unique ID
  • Packages are ECOPACK®

STM32 F303 RET6

Nucleo-64 STM32F303RE

Здесь используется ядро Cortex M4. Имеется DSP, работа с числами с плавающей точкой, более развитая периферия, больше flash и sram. Следующая ступенька в изучении этого семейства микроконтроллеров, на нем можно будет сделать много интересных устройств. А пока использую программатор-отладчик этой платы для работы с STM32F103.

Характеристики (с st.com):

  • Core: ARM®Cortex®-M4 32-bit CPU with 72 MHz FPU, single-cycle multiplication and HW division, 90 DMIPS (from CCM), DSP instruction and MPU (memory protection unit)
  • Operating conditions:
    • VDD, VDDAvoltage range: 2.0 V to 3.6 V
  • Memories
    • Up to 512 Kbytes of Flash memory
    • 64 Kbytes of SRAM, with HW parity check implemented on the first 32 Kbytes.
    • Routine booster: 16 Kbytes of SRAM on instruction and data bus, with HW parity check (CCM)
    • Flexible memory controller (FSMC) for static memories, with four Chip Select
  • CRC calculation unit
  • Reset and supply management
    • Power-on/Power-down reset (POR/PDR)
    • Programmable voltage detector (PVD)
    • Low-power modes: Sleep, Stop and Standby
    • VBATsupply for RTC and backup registers
  • Clock management
    • 4 to 32 MHz crystal oscillator
    • 32 kHz oscillator for RTC with calibration
    • Internal 8 MHz RC with x 16 PLL option
    • Internal 40 kHz oscillator
  • Up to 115 fast I/Os
    • All mappable on external interrupt vectors
    • Several 5 V-tolerant
  • Interconnect matrix
  • 12-channel DMA controller
  • Four ADCs 0.20 μs (up to 40 channels) with selectable resolution of 12/10/8/6 bits, 0 to 3.6 V conversion range, separate analog supply from 2.0 to 3.6 V
  • Two 12-bit DAC channels with analog supply from 2.4 to 3.6 V
  • Seven ultra-fast rail-to-rail analog comparators with analog supply from 2.0 to 3.6 V
  • Four operational amplifiers that can be used in PGA mode, all terminals accessible with analog supply from 2.4 to 3.6 V
  • Up to 24 capacitive sensing channels supporting touchkey, linear and rotary touch sensors
  • Up to 14 timers:
    • One 32-bit timer and two 16-bit timers with up to four IC/OC/PWM or pulse counter and quadrature (incremental) encoder input
    • Three 16-bit 6-channel advanced-control timers, with up to six PWM channels, deadtime generation and emergency stop
    • One 16-bit timer with two IC/OCs, one OCN/PWM, deadtime generation and emergency stop
    • Two 16-bit timers with IC/OC/OCN/PWM, deadtime generation and emergency stop
    • Two watchdog timers (independent, window)
    • One SysTick timer: 24-bit downcounter
    • Two 16-bit basic timers to drive the DAC
  • Calendar RTC with Alarm, periodic wakeup from Stop/Standby
  • Communication interfaces
    • CAN interface (2.0B Active)
    • Three I2C Fast mode plus (1 Mbit/s) with 20 mA current sink, SMBus/PMBus, wakeup from STOP
    • Up to five USART/UARTs (ISO 7816 interface, LIN, IrDA, modem control)
    • Up to four SPIs, 4 to 16 programmable bit frames, two with multiplexed half/full duplex I2S interface
    • USB 2.0 full-speed interface with LPM support
    • Infrared transmitter
  • SWD, Cortex®-M4 with FPU ETM, JTAG
  • 96-bit unique ID