STM32Cube官方例程学习指南
STM32CubeMX是ST官方提供的一个代码生成工具。使用该工具,通过图形化的配置方法,就能快速生成STM32的各种片上外设的初始化代码。CubeMX生成的软件工程使用HAL库,HAL库是ST 以后主推的外设驱动库。另外CubeMX还提供了FATFS、FreeRTOS、LWIP、USB库等中间件的支持,配置之后生成软件工程,工程文件就包含了相应代码。
本文档以STM32F4系列为例,简要地分析官方提供的Cube例程。希望能够帮助CubeMX初学者快速掌握STM32的常用外设使用方法。文档不求全面,只讲常用的外设,对不常用的只进行概况性地描述。同时,文档只对例程进行直接分析,不对其他文件进行详述。
第一部分准备工作
首先是下载STM32CubeF4支持包,可以到与非网ST社区搜索STM32CubeF4,然后下载
当前版本已经更新到V1.13.0。点击附件中的STM32CubeF4,转到下载链接地址。附件大小300M左右。本人当前使用的是V1.9.0版本的,例程相差不大,后面就用V1.9.0版本的例程进行分析。
下载后解压,得到如下图的文件,其中例程放在Projects文件夹中:
打开Projects文件夹,可以看到前12个文件夹分别官方提供的12款评估板,后面我们仅以STM324xG_EVAL评估板的例程为讲解内容。
STM324xG_EVAL文件夹中,Examples文件夹存放的就是片上外设的使用例程。
(Applications文件夹是STM324xG_EVAL相关的一些高级应用例程,如FreeRTOS、FatFs、LwIP、USB等,有一定基础之后可以学习这里面的内容。本文不作分析。)
Examples文件夹提供了27个外设对应文件夹,每个文件夹包含若干个例程,后面将对常用的外设例程(不是全部)进行简要分析。
第二部分例程分析
下面将挑选常用外设的例程进行分析,顺序是从简单的到复杂的。
第一章:GPIO
GPIO共有两个例程:外部中断和IO翻转。
1.GPIO_IOToggle
打开…\GPIO_IOToggle\MDK-ARM文件夹下的MDK工程,打开main.c文件。
如main.c文件开头的描述,本例程描述如何配置GPIO和通过HAL API函数使用GPIO。
看main函数:
分析:从注释可以看出,GPIO的控制只需要3个步骤,使能GPIO时钟、配置GPIO模式、控制GPIO状态。前两个步骤的代码不需要用户手动输入,完全有STM32CubeMX生成,用户只需要在CubeMX 中用图形化界面进行配置。(详细操作步骤可参考本人编写的STM32Cube学习笔记,或者其他STM32Cube入门教程。)步骤3的重点在HAL_GPIO_TogglePin()函数,在控制GPIO反转的。其他控制GPIO输出状态的函数还有HAL_GPIO_WritePin()。
2.GPIO_EXTI
该例程演示如何使用GPIO的外部中断功能。
打开…\GPIO_EXTI\MDK-ARM文件夹下的MDK工程,打开main.c文件。先看main函数:
main函数只有个语句,分3个部分。第一部分是系统时钟配置。第二部分是板级支持配置,本例中是初始化两个LED控制口。第三部分是配置外部中断。这三个部分的代码功能都可以通过CubeMX 配置生成,不需要用户输入。
最后,要在回调函数中实现中断响应的功能代码。
函数prototypeHAL_GPIO_EXTI_Callback()函数是HAL库的外部中断回调函数,所有的外部中断都是使用该函数。然后在处理时,判断是哪个引脚号对应的中断。
第二章:UART
UART共有三个例程。
1.UART_Printf
打开…\UART_Printf\MDK-ARM文件夹下的MDK工程,打开main.c文件。
如main.c文件开头描述,本例演示了如何将printf()函数的输出功能映射到串口上。
看main函数:
main函数分为3部分。第一部分是系统初时钟配置。第二部分是初始化UART。第三部分是使用printf()函数输出一个语句。在126~133行,就是实现过程。