stm32stm32入门


备注

本节概述了stm32是什么,以及开发人员可能想要使用它的原因。

它还应该提到stm32中的任何大型主题,并链接到相关主题。由于stm32的文档是新的,您可能需要创建这些相关主题的初始版本。

什么是STM32?


STM32是由ST Microelectronics开发的32位闪存微控制器系列。它基于ARM®Cortex®-M处理器,提供32位产品系列,结合了高性能,实时功能,数字信号处理和低功耗,低电压操作。

有关每个系列,开发工具和部件号解码的详细说明,请访问维基百科

产品系列

Cortex-M0 / -M0 + Cortex-M3的的Cortex-M4 的Cortex-M7
高性能: STM32F2 STM32F4 STM32F7STM32H7
主流: STM32F0 STM32F1 STM32F3
超低功耗: STM32L0 STM32L1 STM32L4

开发板

STM32 Nucleo (已启用mbed 发现工具包 评估板
典型用例: 灵活的原型设计,社区原型设计,创意演示全功能评估
扩展可能性: +++ ++ ++
连接: Arduino™,ST,Morpho ST ST

版本

发布日期
1.0.0 2016年11月1日

使用SW4STM32和HAL库首次设置闪烁LED示例

注意:有许多IDE,工具链和库可以随时使用STM32。以下设置只需要很少的努力就可以使它工作,但它只是其中之一。随意探索其他人,它不是此示例的目的是强制任何人使用此处将使用的工具。)


IDE安装

适用于STM32的System Workbench:适用于Windows,Linux和OS X的免费IDE。它由AC6构建,可从OpenSTM32社区网站注册后下载。

IDE本身基于Eclipse,但为STM32开发提供了一些附加功能,如:

  • Ac6 STM32 MCU GCC工具链
  • OpenOCD和GDB(arm-none-eabi-gdb),具有自动生成的调试配置,具体取决于目标板
  • 内置选项可编程或擦除芯片

在创建自己的电路板之前先从STM32开始,建议尝试使用DiscoveryNucleoEval板 ,它们带有一个板载SWD(串行线调试)编程器/调试器,称为ST-Link。

创建一个项目

此示例将使用STM32F4 Discovery套件 ,该套件具有STM32F407VG微控制器。 (也可以使用任何其他板。)

  1. 打开SW4STM32并创建一个新的C项目: 文件→新建→C项目

  2. 给它命名为“STM32F4_Discovery-Blinky” ,从项目类型列表中选择Executable / Ac6 STM32 MCU项目 。默认情况下,唯一可用的工具链是Ac6 STM32 MCU GCC 。点击下一步。

    在此处输入图像描述

  3. 下一步是调试/发布设置 ,现在可以通过单击下一步跳过。

  4. 董事会选择 。可以选择现有的板,如本例所示,可以添加STM32F4 Discovery或新的定制板。

    在此处输入图像描述

  5. 下一步是Project Firmware配置 。选择无固件标准外设库 (SPL)或硬件抽象层 (HAL)。有人质疑哪一个更适合开发,但这个问题超出了本例的范围。此示例将使用HAL库,因为它是ST Microelectronics目前支持的。用于HAL的其他可用软件工具是STM32CubeMX ,它是初始化代码生成器。此外, STM32CubeFx或STM32CubeLx软件包还提供了几个示例应用程序。如果目标固件丢失,请下载目标固件,建议选择“在项目中添加低级驱动程序”“作为应用程序中的源”选项。最后,单击Finish。

    在此处输入图像描述

闪烁LED应用

由于此项目是使用STM32F4 Discovery创建的,因此在/ STM32F4_Discovery-Blinky / Utilities / STM32F4-Discovery / project文件夹下已有几个即用型功能,可用于连接Discovery工具包的外围设备(加速度计,音频) ,LED,按钮)。在此示例中,将使用stm32f4_discovery.c文件中的void BSP_LED_Init(Led_TypeDef Led)void BSP_LED_Toggle(Led_TypeDef Led) 函数来闪烁绿色LED,即LED4 。决定哪个LED使用Discovery工具包的原理图。

在此处输入图像描述

实际的引脚和端口名称已被某些#defineenum 隐藏,请使用Ctrl + Click来跟踪它们。

  1. main ,调用HAL_Init() 函数重置所有外设,初始化Flash接口和Systick。 (Systick将用于生成闪烁的延迟。)
  2. 必须配置系统时钟。可以使用STM32CubeMX时钟配置功能或参考手册来完成。在此示例中,系统时钟由内部PLL(锁相环)提供,内部PLL由外部8 MHz晶体振荡器(HSE)提供。预分频器已设置为实现最大可用频率,在F4发现的情况下为168 MHz。
  3. 初始化外设,在本例中为GPIO引脚。
  4. 在无限循环内,调用LED切换和HAL_Delay() 函数。 HAL_Delay() 使用Systick 并以毫秒为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 ...选项,下载应用程序。

另一种下载方式是使用debug 。为此,请单击错误图标旁边的箭头在此处输入图像描述在工具栏中打开Debug Configuration ...菜单。创建一个新的Ac6 STM32调试配置,如果C / C ++ Application字段为空,请填写以下内容:

调试\ STM32F4_Discovery,Blinky.elf

其他调试参数(如OpenOCD配置文件和使用的Telnet和GDB端口)由框架自动生成和填充。最后,单击“调试”按钮。