基于STM32标准库函数的LED流水灯实验
文章目录
一、STM32标准库函数简要介绍及与寄存器编程的区别
STM32标准库是一套由STMicroelectronics提供的软件库,用于简化在STM32微控制器上开发应用程序的过程。它包含了许多常用的函数和驱动程序,可用于配置和操作STM32微控制器的各种硬件资源。
STM32标准库函数可以分为几个主要类别:
系统初始化函数:用于初始化系统时钟、中断向量表和其他系统设置。
GPIO函数:用于配置和操作通用输入/输出端口,包括设置引脚方向、读取和写入引脚状态等。
外设驱动函数:用于配置和操作各种外设,如串口、SPI、I2C等。这些函数包括初始化外设、发送和接收数据等。
中断处理函数:用于配置和处理中断。它们允许您定义中断服务函数,并将其与特定的中断源关联起来。
与寄存器编程相比,STM32标准库函数的主要优势在于简化了开发过程。使用标准库函数,您可以通过调用封装好的函数来配置和操作硬件资源,而无需直接访问寄存器。这样可以减少编写大量底层代码的工作量,并提高开发效率。
二、STM32标准库函数工程模板的建立
2.1 新建工程
我们首先打开keil MDK,点击“NEW PROJECT"
命名好工程名字,文件路径。(建议工程名字使用英语)。完成后,选择STM32F103C8T6。
随后弹出来的这个界面不用管,直接取消掉。这个是用它自带的library添加所需库函数。但是我试了很多次发现文件总是缺少一些,所以就自己手动添加了。
2.2 新建组与库函数文件的添加
进入工程界面,点击魔术棒右边的三个箱子的图案。这是用来管理分组的。
进入管理界面,在中间添加四个组,名字命名为Start,Library,User,System。
同时,我们在工程对应文件夹中也新建同名的这些文件。
所有配置函数需要在ST官网进行下载:https://www.st.com/zh/embedded-software/stm32-standard-peripheral-libraries.html
在Start本地文件夹中,我们存放STM32编程所需的启动库函数,所需列表如下。(Startup函数只需选用.md那一项即可,但全部添加也没有什么问题,只是我们只用那个文件而已)
在Library本地文件夹中,我们存放STM32编程所需的应用库函数,包括GPIO,中断,定时,看门狗等等源函数。我们如果想要使用这些功能,直接找到里面对应的函数,根据函数的定义进行规范调用即可。
在User本地文件夹中,我们存放STM32内核函数以及我们的主函数。
在System本地文件夹中中,我们存放我们自己想定义和配置的函数。这也是满足模块化编程的需要。如果所有函数都挤在main函数中,就会显得很乱没有逻辑性。所以我们把一些函数单独分组放在一起,写上头文件,在使用时在主函数中单独调用即可。在这里我们需要配置一个延时函数Delay。
我们还需要修改一下头文件路径,这样编译器才能找到我们所添加的函数
点击魔术棒,选择C/C++,在“Define”栏中写上如下字符
随后点开“Include Paths”右边的三个点,在窗口中将我们的Start,Library,System,User文件都添加进去。
如果没有添加,编译器会报错找不到文件,所以这一步非常重要!!
然后我们在keil中点击每个组,将本地文件夹里对应的文件添加到组里面,添加结果如下所示
我们最后在主函数中写上头文件,写上主函数和while循环。进行编译。如果没有错,说明工程建立成功了。
**常见问题(猜测):**有很多的报错有可能是编译器版本不对。我们这里使用的是V5编译器,在魔术棒中,选择"Target",进行设置
三、LED流水灯实验
3.1 配置GPIO口点灯基本步骤
跟寄存器方式配置GPIO口类似,标准库函数配置GPIO口也分为以下三个步骤:
1. 设置GPIO口时钟,处于使能状态
首先我们需要开启GPIO的时钟,这样GPIO才能被打开并被正常使用。在寄存器方式编程中,我们需要找得到APB2使能寄存器的地址,查找手册才能知道端口的地址,十分的繁琐很麻烦。而在标准库函数中,我们只需要调用开启时钟的函数即可。在STM32中,调用APB2使能配置的函数为
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
我们可以右键查找函数的定义
根据注释可知,第一个参数 uint32_t RCC_APB2Periph,是指定的端口,我们这里使用GPIOA,故在主函数中写 RCC_APB2Periph_GPIOA。第二个参数是指定端口使能还是失能,我们选择使能,填上 ENABLE。完整调用如下