stm32 учебник
Начало работы с stm32
Поиск…
замечания
В этом разделе представлен обзор того, что такое stm32, и почему разработчик может захотеть его использовать.
Следует также упомянуть любые крупные темы в stm32 и ссылки на связанные темы. Поскольку документация для stm32 является новой, вам может потребоваться создать начальные версии этих связанных тем.
Что такое STM32?
STM32 - это 32-битное семейство микроконтроллеров Flash, разработанное ST Microelectronics. Он основан на процессоре ARM® Cortex®-M и предлагает 32-битный ассортимент продукции, который сочетает в себе очень высокую производительность, возможности в реальном времени, обработку цифрового сигнала и маломощную работу с низким напряжением.
Подробное описание каждой серии, средств разработки и декодирования номеров деталей можно найти в Википедии .
Серия продуктов
| Cortex-M0 / -M0 + | Cortex-M3 | Cortex-M4 | Cortex-M7 | |
|---|---|---|---|---|
| Высокая производительность: | STM32F2 | STM32F4 | STM32F7 , STM32H7 | |
| Основное направление: | STM32F0 | STM32F1 | STM32F3 | |
| Ультра-низкое энергопотребление: | STM32L0 | STM32L1 | STM32L4 |
Платы развития
| STM32 Nucleo (с поддержкой mbed ) | Наборы для обнаружения | Оценочные платы | |
|---|---|---|---|
| Типичный вариант использования: | Гибкое прототипирование, сообщество | Прототипирование, творческие демонстрации | Полная оценка возможностей |
| Возможности расширения: | +++ | ++ | ++ |
| Возможности подключения: | Arduino ™, ST, Morpho | ST | ST |
Версии
| Версия | Дата выхода |
|---|---|
| 1.0.0 | 2016-11-01 |
Пример установки первого времени с использованием светодиодного индикатора blink с использованием библиотек SW4STM32 и HAL
( Примечание. Существует много IDE, toolchain и библиотеки, которые готовы к использованию с STM32. Следующая настройка требует минимальных усилий, чтобы заставить ее работать, но она только одна из многих. Не стесняйтесь исследовать других, это не цель этого примера - заставить кого-либо использовать инструменты, которые будут использоваться здесь.)
Установка IDE
System Workbench для STM32 : бесплатная среда IDE для Windows, Linux и OS X. Она была создана AC6 и доступна для скачивания после регистрации с сайта сообщества OpenSTM32 .
Сама IDE основана на Eclipse, но поставляется с некоторыми дополнительными возможностями для разработки STM32, например:
- Acch STM32 MCU GCC toolchain
- OpenOCD и GDB (arm-none-eabi-gdb) с автоматически созданной конфигурацией отладки в зависимости от целевой платы
- Встроенные опции для программирования или стирания чипа
Чтобы начать с STM32 перед созданием собственной платы, рекомендуется поэкспериментировать с панелью Discovery , Nucleo или Eval , которая поставляется с встроенным программным модулем / отладчиком SWD (Serial Wire Debug) под названием ST-Link.
Создание проекта
В этом примере будет использоваться комплект обнаружения STM32F4 , в котором имеется микроконтроллер STM32F407VG. (Также можно использовать любую другую плату).
Откройте SW4STM32 и создайте новый проект C: Файл → Новый → Проект C
Дайте ему имя типа «STM32F4_Discovery-Blinky», а в списке « Тип проекта» выберите проект « Исполняемый / Ac6 STM32 MCU» . По умолчанию единственной доступной toolchain является Ac6 STM32 MCU GCC . Нажмите кнопку "Далее.
Следующий шаг - параметры Debug / Release , которые можно пропустить, нажав кнопку «Далее».
Выбор платы . Существующие платы можно выбрать, так как в этом примере можно добавить STM32F4 Discovery или новые пользовательские платы.
Следующий шаг - настройка прошивки проекта . Выберите между прошивкой , стандартной периферийной библиотекой (SPL) или аппаратным абстракционным слоем (HAL). Допрашивается, какой из них более подходит для развития, но этот вопрос выходит за рамки данного примера. В этом примере будет использоваться библиотека HAL, поскольку она в настоящее время поддерживается ST Microelectronics. Дополнительным доступным программным инструментом для HAL является STM32CubeMX , который является генератором кода инициализации. Также некоторые программные приложения доступны в пакетах STM32CubeFx или STM32CubeLx. Загрузите целевую микропрограмму, если она отсутствует, и рекомендуется выбрать «Добавить драйверы низкого уровня в проекте» и «Как источники в приложении» . Наконец, нажмите «Готово».
Применение светодиодного индикатора blink
Поскольку этот проект был создан с помощью STM32F4 Discovery, уже есть несколько готовых к использованию функций в папке / STM32F4_Discovery-Blinky / Utilities / STM32F4-Discovery / project, которая может использоваться для интерфейса периферийных устройств набора Discovery (акселерометр, аудио , Светодиоды, кнопка). В этом примере void BSP_LED_Init(Led_TypeDef Led) и функции void BSP_LED_Toggle(Led_TypeDef Led) будут использоваться из файла stm32f4_discovery.c для мигания зеленого светодиода, который является LED4 . Чтобы определить, какой светодиод используется схемой набора Discovery .
Фактические имена контактов и портов уже скрыты некоторыми #define и enum , используйте Ctrl + Click, чтобы отслеживать их.
- Внутри
mainвызоваHAL_Init()функциюHAL_Init()которая сбрасывает все периферийные устройства, инициализирует интерфейс Flash и Systick. (Systick будет использоваться для генерации задержки для мигания.) - Системные часы должны быть настроены. Это можно сделать, используя функцию конфигурации часов STM32CubeMX или справочное руководство. В этом примере системные часы подаются внутренним PLL (Phase Locked Loop), который подается внешним кварцевым генератором 8 МГц (HSE). Предделители были настроены на достижение максимальной доступной частоты, которая составляет 168 МГц в случае обнаружения F4.
- Инициализация периферийных устройств, в данном случае штырь GPIO.
- В бесконечном цикле вызовите переключатель LED и
HAL_Delay().HAL_Delay()используетSystickи генерирует задержку в миллисекундах.
Весь код следующий:
#include "stm32f4xx.h"
#include "stm32f4_discovery.h"
void SystemClock_Config(void);
int main(void)
{
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize one of the LED GPIO pin */
BSP_LED_Init(LED4);
while(1)
{
BSP_LED_Toggle(LED4);
HAL_Delay(1000); // in miliseconds
}
}
/**
* @brief System Clock Configuration
* The system Clock is configured as follow :
* System Clock source = PLL (HSE)
* SYSCLK(Hz) = 168000000
* HCLK(Hz) = 168000000
* AHB Prescaler = 1
* APB1 Prescaler = 4
* APB2 Prescaler = 2
* HSE Frequency(Hz) = HSE_VALUE
* PLL_M = (HSE_VALUE/1000000u)
* PLL_N = 336
* PLL_P = 2
* PLL_Q = 7
* VDD(V) = 3.3
* Main regulator output voltage = Scale1 mode
* Flash Latency(WS) = 5
* @param None
* @retval None
*/
void SystemClock_Config(void)
{
RCC_ClkInitTypeDef RCC_ClkInitStruct;
RCC_OscInitTypeDef RCC_OscInitStruct;
// Enable Power Control clock
__PWR_CLK_ENABLE();
// The voltage scaling allows optimizing the power consumption when the
// device is clocked below the maximum system frequency, to update the
// voltage scaling value regarding system frequency refer to product
// datasheet.
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
// Enable HSE Oscillator and activate PLL with HSE as source
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
// This assumes the HSE_VALUE is a multiple of 1MHz. If this is not
// your case, you have to recompute these PLL constants.
RCC_OscInitStruct.PLL.PLLM = (HSE_VALUE/1000000u);
RCC_OscInitStruct.PLL.PLLN = 336;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 7;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
// Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2
// clocks dividers
RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK
| RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);
}
Построить с помощью молотка
, и загрузите приложение, щелкнув правой кнопкой мыши по папке проекта и выбрав опцию Target → Program chip ....
Другой способ загрузки - использование отладки . Чтобы сделать это, нажмите на стрелку рядом с значком ошибки.
в панели инструментов и откройте меню « Конфигурация отладки ...» . Создайте новую конфигурацию отладки Ac6 STM32 и, если поле приложения C / C ++ пусто, заполните следующую команду:
Debug \ STM32F4_Discovery-Blinky.elf
Другие параметры отладки, такие как файл конфигурации OpenOCD и используемые порты Telnet и GDB, автоматически генерируются и заполняются каркасом. Наконец, нажмите кнопку «Отладка».



