Stm32. скачать примеры
Содержание:
- Hardware state
- Первая программа
- 1.6 USB — USART преобразователь на FT232RL.
- Что такое STM32
- API
- Подробное описание
- Datasheets
- Requirement
- API
- Программное обеспечение для работы с контроллером
- Поддержать
- Обзор продуктовых линеек
- Микросхема 74HC595 — это сдвиговый регистр
- Цены
- Сравнение STM32 с Arduino
- Вывод байта
- Вывод символов на индикатор (динамическая индикация)
Hardware state
-
Idle mode: low wake-up latency (µs range) (e.g. ARM WFI). Memories and
voltage supplies are retained. Minimal power saving mainly on the core itself. -
sleep mode: low wake-up latency (µs range) (e.g. ARM WFI), Memories and
voltage supplies are retained. Minimal power saving mainly on the core itself but
higher than idle mode. -
deep sleep mode: medium latency (ms range), clocks are gated to reduced. Memories
and voltage supplies are retained. If supported, Peripherals wake-up is possible (UART, I2C …). -
shutdown mode: high wake-up latency (possible hundereds of ms or second
timeframe), voltage supplies are cut except always-on domain, memory content
are lost and system basically reboots.
Первая программа
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, выключить переходник. Теперь можно снова включить микроконтроллер в обычном режиме. Когда программа будет загружена, светодиод начнет мигать.
Работа в других программах проходит подобным образом. Также выбираются нужные библиотеки, и прописывается код. У платных утилит функционал больше, и можно создавать более сложные проекты.
1.6 USB — USART преобразователь на FT232RL.
Характеристики и особенности микросхемы FT232RL:
- одночиповый переходник из USB в асинхронный последовательный интерфейс передачи данных — (UART);
- протокол USB полностью реализован в микросхеме;
- интерфейс UART поддерживает режимы передачи 7 и 8 бит данных, 1 и 2 стоповых бита, различные режимы контроля четности;
- скорости передачи от 300 бод до 3 мегабод для RS422 /RS485 / TTL и от 300 бод до 1 мегабод для RS-232;
- новые настраиваемые выводы CBUS;
- возможность вывода состояния приема/передачи на внешние светодиоды;
- возможность подачи тактового сигнала на внешние микросхемы, контроллеры, ПЛИС, частоты 6, 12, 24 и 48 МГц;
- высокая нагрузочная способность выходов;
- встроенная энергонезависимая память EEPROM объемом 1024 байт;
Приемопередатчики USART2 и USART3 микроконтроллера STM32F107 подключаются к каналам интерфейсов RS232 и RS422 c помощью перемычек на плате. USB — USART преобразователь на FT232RL подключается к каналу USART3.
Что такое STM32
STM32 – это платформа, в основе которой лежат микроконтроллеры STMicroelectronics на базе ARM процессора, различные модули и периферия, а также программные решения (IDE) для работы с железом. Решения на базе stm активно используются благодаря производительности микроконтроллера, его удачной архитектуре, малом энергопотреблении, небольшой цене. В настоящее время STM32 состоит уже из нескольких линеек для самых разных предназначений.
История появления
Серия STM32 была выпущена в 2010 году. До этого компанией STMicroelectronics уже выпускались 4 семейства микроконтроллеров на базе ARM, но они были хуже по своим характеристикам. Контроллеры STM32 получились оптимальными по свойствам и цене. Изначально они выпускались в 14 вариантах, которые были разделены на 2 группы – с тактовой частотой до 2 МГц и с частотой до 36 МГц. Программное обеспечение у обеих групп одинаковое, как и расположение контактов. Первые изделия выпускались со встроенной флеш-памятью 128 кбайт и ОЗУ 20 кбайт. Сейчас линейка существенно расширилась, появились новые представители с повышенными значениями ОЗУ и Flash памяти.
Достоинства и недостатки STM32
Основные преимущества:
- Низкая стоимость;
- Удобство использования;
- Большой выбор сред разработки;
- Чипы взаимозаменяемы – если не хватает ресурсов одного микроконтроллера, его можно заменить на более мощной, не меняя самой схемы и платы;
- Высокая производительность;
- Удобная отладка микроконтроллера.
Недостатки:
- Высокий порог вхождения;
- На данный момент не так много литературы по STM32;
- Большинство созданных библиотек уже устарели, проще создавать свои собственные.
Минусы STM32 не дают пока микроконтроллеру стать заменой Ардуино.
API
-
: configure the Low Power
-
: enter in idle mode
param ms (optional): number of milliseconds before to exit the mode. The RTC is used in alarm mode to wakeup the chip in ms milliseconds. -
: enter in sleep mode
param ms (optional): number of milliseconds before to exit the mode. he RTC is used in alarm mode to wakeup the chip in ms milliseconds. -
: enter in deepSleep mode
param ms (optional): number of milliseconds before to exit the mode. The RTC is used in alarm mode to wakeup the chip in ms milliseconds. -
: enter in shutdown mode
param ms (optional): number of milliseconds before to exit the mode. The RTC is used in alarm mode to wakeup the board in ms milliseconds.
Note: With STM32RTC version lower than 1.1.0, the minimum number of milliseconds is 1000 ms.
-
: Enable GPIO pin in interrupt mode. If the pin is a wakeup pin, it is configured as wakeup source (see board documentation).param pin: pin numberparam callback: pointer to callbackparam mode: interrupt mode (HIGH, LOW, RISING, FALLING or CHANGE)
-
: enable a UART peripheral in low power mode. See board documentation for low power mode compatibility.param serial: pointer to a UARTparam callback: pointer to a callback to call when the board is waked up.
-
attach a callback to the RTC peripheral.param rtc: pointer to RTC. Could be NULL as RTC is a Singleton.param callback: pointer to a callback to call when the board is waked up.param callback: data: optional pointer to callback data parameters (default NULL).
-
:
enable an I2C peripheral in low power mode. See board documentation for low power mode compatibility. Currently not available.param wire: pointer to I2Cparam callback: pointer to a callback to call when the board is waked up.
function must be called at least once before , , or functions.
or functions should be called before , , or functions.
HardwareSerial used as Wakeup source will configure it to use HSI clock source even if another peripheral clock is configured.
RTC used as Wakeup source will configure it to use LSE clock source even if another RTC clock source is selected.
The board will restart when exit the deepSleep or shutdown mode.
Подробное описание
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.
Datasheets
STM32F103x8STM32F103xBMedium-density performance line ARM-based 32-bit MCU with 64or 128 KB Flash, USB, CAN, 7 timers, 2 ADCs, 9 com. interfacesDatasheet -production data Features• ARM 32-bit Cortex-M3 CPU Core– 72 MHz maximum frequency,1.25 DMIPS/MHz (Dhrystone 2.1)performance at 0 wait state memoryaccess– Single-cycle multiplication and hardwaredivision• 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 voltagedetector (PVD)– 4-to-16 MHz crystal oscillator– Internal 8 MHz factory-trimmed RC– Internal 40 kHz RC– PLL for CPU clock …
Requirement
API
This library is based on the Arduino RTCZero library.
The library allows to take control of the internal RTC of the STM32 boards.
Singleton design pattern is used to ensure that only one STM32RTC instance is instantiated:
/* Get the rtc object */ STM32RTC& rtc = STM32RTC::getInstance();
The following functions are not supported:
- : use the STM32 Low Power library instead.
- : month not supported by STM32 RTC architecture.
- : year not supported by STM32 RTC architecture.
- : month not supported by STM32 RTC architecture.
- : year not supported by STM32 RTC architecture.
- : month and year not supported by STM32 RTC architecture.
The following functions have been added to support specific STM32 RTC features:
RTC hours mode (12 or 24)
void begin(Hour_Format format)
RTC clock source
- : get current clock source.
- : this function must be called before .
RTC Asynchronous and Synchronous prescaler
- : get (a)synchronous prescaler values if set else computed ones for the current clock source.
- : set (a)synchronous prescaler values. This function must be called before . Use -1 to reset value and use computed ones. Those values have to match the following conditions: 1Hz = RTC CLK source / ((predivA + 1) * (predivS + 1))
SubSeconds management
Hour format (AM or PM)
Week day configuration
Time and date configuration (added for convenience)
Since STM32RTC version higher than 1.0.3
SubSeconds alarm management
Important note:
- STM32F1 and STM32L1xx (Ultra Low Power Medium (ULPM) density) series do not support subsecond.
- Subsecond “resolution” depends on synchronous prescaler value. Bigger than this value is, better resolution will get for subsecond.
-
Updated API:
Library version management
This will ease some dependencies:
can de used to handle some API change:
#if defined(STM32_RTC_VERSION) && (STM32_RTC_VERSION >= 0x01010000) rtc.setAlarmTime(alarmHours, alarmMinutes, alarmSeconds, 123); #else rtc.setAlarmTime(alarmHours, alarmMinutes, alarmSeconds); #endif
Since STM32 Core version > 1.5.0
Reset time management
By default, if a time is set it will not be reset after a reboot.
Using or will reset the RTC registers.
To know if a time has already been set use:
bool isTimeSet(void)
if (!rtc.isTimeSet()) { // Set the time rtc.setHours(hours); rtc.setMinutes(minutes); rtc.setSeconds(seconds); }
Программное обеспечение для работы с контроллером
Keil Uvision 4
Для ARM архитектуры разработано множество сред разработки. К самым известным и дорогостоящим относятся инструменты фирм Keil и IAR System. Программы этих компаний предлагают самые продвинутые инструментарии для оптимизации кода. Также дополнительно существуют различные системы – USB стеки, TCP/IP-стеки и прочие. Применяя системы Keil, пользователь получает хороший уровень технической поддержки.
Также для STM32 используется среда разработки Eclipse и построенные на ней системы Atollic TrueStudio (платная) и CooCox IDE (CoIDE) (бесплатная). Обычно используется последняя. Ее преимущества перед другими средами разработки:
- Свободно распространяемое программное обеспечение;
- Удобство использования;
- Имеется много примеров, которые можно загрузить.
Единственный недостаток среды разработки CooCox IDE – сборка есть только под Windows.
Поддержать
Знания должны быть свободными. По этой причине все материалы находится в открытом доступе. Однако, была проделана не малая работа и потрачено очень много времени, чтобы изложить все в сжатой, но информативной форме. Маржа с набора не такая большая (меньше стоимости среднестатистического сертификата на coursera), а область весьма специфична и не популярна. Я буду рад любой поддержки данного сайта: вы можете купить набор, приобретя текст курса в виде книги (появится чуть позже), докупив книжку «Си для встраиваемых систем» или пожертвовать средства напряму. Все эти средства пойдут на еду, мотивацию создавать больше интересного материала и поддержания сайта (хостинг и домен стоят денег).
Обзор продуктовых линеек
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.
Микросхема 74HC595 — это сдвиговый регистр
- последовательный 8-бит вход, параллельный 8-бит выход
- напряжение питания 2-6 В
- выходной ток до 25 мА (на ножку)
Эта микра дает возможность подключить и управлять восемью нагрузками используя только три ножки МК, её используют обычно для светодиодных индикаторов и реже для ЖК-дисплея. То бишь даже применяя восьмивыводный контроллер благодаря сдвиговому регистру можно добавить в устройство светодиодный индикатор.
Чутка теории из тех. документации:
Восьмиразрядный сдвиговый регистр принимает данные с вывода DS (14, MOSI) при переднем фронте (переход от лог.0 к лог.1) на выводе SHCP (11, SCK). Данные с входного сдвигового регистра переносятся в выходной регистр при импульсе на выводе STCP (12, PA6).
Также нужно не забыть на вывод OE (13) подать лог.0, чтобы вообще разрешить вывод данных и подтянуть вывод MR (10), чтобы не сбрасывались значения в сдвиговом регистре. Захват данных регистрами происходит при переднем фронте, а вывод при заднем фронте.
Цены
46 предложений от 26 поставщиков
Многофункциональная отладочная плата на базе 32-битного ARM микроконтроллера STM32F103C8T6.Характеристики платы STM32F103C8T6:Flash память: 64КRAM: 20K37 портов ввода/выводаSPI, I2C, UARTТактовая частота: 72 МГц…
ТриемаРоссия | STM32F103C8T6STMicroelectronics | 4 ₽ | Купить |
AliExpressВесь мир | STM32F103C8T6 ARM STM32 минимальная системная макетная плата модуль для Arduino RS232 к TTL женский Серийный Флэш-плата MAX3232 | 22 ₽ | Купить |
КонтестРоссия | STM32F103C8T6STMicroelectronics | 181 ₽ | Купить |
КимРоссия | STM32F103C8T6STMicroelectronics | 271 ₽ | Купить |
Сравнение STM32 с Arduino
Сравнение STM32 с Arduino
По техническим характеристикам Ардуино проигрывает STM32. Тактовая частота микроконтроллеров Ардуино ниже – 16 МГц против 72 МГц STM32. Количество выводов GRIO у STM32 больше. Объем памяти у STM32 также выше. Нельзя не отметить pin-to-pin совместимость STM32 – для замены одного изделия на другое не нужно менять плату. Но полностью заменить ардуино конкуренты не могут. В первую очередь это связано с высоким порогом вхождения – для работы с STM32 нужно иметь базис. Платы Ардуино более распространены, и, если у пользователя возникает проблема, найти решение можно на форумах. Также для Ардуино созданы различные шилды и модули, расширяющие функционал. Несмотря на преимущества, по соотношению цена/качество выигрывает STM32.
Семейство микроконтроллеров STM32 отличается от своих конкурентов отличным поведением при температурах от -40С до +80 С. Высокая производительность не уменьшается, в отличие от Ардуино. Также можно найти изделия, работающие при температурах до 105С.
Вывод байта
Для передачи чего-либо через SPI средствами HAL нужно иметь массив, здесь он состоит из одного элемента:
Присваиваем значение нулевому элементу, которое и будет передано:
Почему именно 170? Потому что в двоичной системе исчисления это выглядит так:
Где «1» СД будет светится, где «0» — нет. То есть светодиоды будут светится через один.
Числа в двоичном коде Keil не понимает (такой стандарт C51), поэтому написано в десятичной, можно также в шестнадцатеричной 0xAA.
Чтобы микросхема всё приняла сначала нужно установить низкий логический уровень на выводе STCP (11), благодаря подтяжке он уже установлен, передать 1 байт, подать импульс на вывод защёлки STCP (11) и тогда данные запишутся по переднему фронту и выведутся по заднему.
В итоге (показано на примере индикатора):
Вывод символов на индикатор (динамическая индикация)
Чтобы осуществить динамическую индикацию нужно дополнительно задействовать выводы для включения/выключения целых разрядов, то есть управлять подачей питания на общий провод (общий К/A).
В моем случае в середине каждого сегмента индикатора целых два СД (красный и зеленый), поэтому настроено на выход аж 4 вывода (2 для красн., 2 для зелен.).
В общем настраиваем выводы как двухтактный выход с подтяжкой к минусу.
SPI в режиме передачи от ведущего к ведомому (SPI1 -> Transmit Only Master).
Отладка через SWD (SYS -> Debug Serial Wire).
Тактирование одного из таймеров (TIM17 -> Activated).
Настраиваем таймер на частоту f > 40 Гц и включаем прерывание от него.
Связь между передаваемыми данными и выводимыми символами:
Для удобства создается массив с числами, при выводе которых будет отображение символов 0-9. Индикатор с общий анодом, то бишь придется инвертировать все значения, либо вызывать число из массива с инвертированием (знак ~ перед числом).
main.c
stm43f0xx_it.c
Непосредственно обновление происходит в обработчике прерывания от таймера:
Ну и в главном цикле:
В итоге:
Проект Keil и STM32CubeMX (бегущие огни): 74hc595_stm32_spi1.zip
Проект Keil и STM32CubeMX (динамическая индикация): 74hc595_stm32_led_indicator.zip