基于标准外设库的LED流水灯
一.创建一个keil工程
下载stm32标准库
下载地址:
链接: https://www.st.com/en/embedded-software/stm32-standard-peripheral-libraries.html
打开keil 创建一个工程
选择stm32的具体型号
这一步直接点取消,我们要自己添加库文件
将下载好的标准库文件分类并添加到头文件
start
Library
User
点击魔方设置界面
添加刚刚三个组文件
随后点击“Target1”的options在c++选项设置如下
在include paths下将三个文件路径加上
二.程序编写
源代码
#include "stm32f10x.h" // Device header
void Delay_ms( volatile unsigned int t)
{
unsigned int i;
while(t--)
for (i=0;i<800;i++);
}
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//开启时钟
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;//打开所有引脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;设置
GPIO_Init(GPIOA, &GPIO_InitStructure);
while (1)
{
GPIO_Write(GPIOA, ~0x0001); //0000 0000 0000 0001
Delay_ms(1000);
GPIO_Write(GPIOA, ~0x0002); //0000 0000 0000 0010
Delay_ms(1000);
GPIO_Write(GPIOA, ~0x0004); //0000 0000 0000 0100
Delay_ms(1000);
GPIO_Write(GPIOA, ~0x0008); //0000 0000 0000 1000
Delay_ms(1000);
GPIO_Write(GPIOA, ~0x0010); //0000 0000 0001 0000
Delay_ms(1000);
GPIO_Write(GPIOA, ~0x0020); //0000 0000 0010 0000
Delay_ms(1000);
GPIO_Write(GPIOA, ~0x0040); //0000 0000 0100 0000
Delay_ms(1000);
GPIO_Write(GPIOA, ~0x0080); //0000 0000 1000 0000
Delay_ms(1000);
}
}
三.烧录展示
运行程序生成.hex文件
用转接口连接stm32
运行.hex文件进行烧录
结果展示
b
Keil5仿真流程
点击“Target1”的options
修改晶振频率为8MHZ
再点击debug如下图修改
点击放大镜
再点击
点击setup
选择一条引脚查看
总结
LED流水灯实验是入门stm32的敲门砖,主要通过两种方式(寄存器和标准库),通过这两次实验的对比,我懂得了点亮LED寄存器和库函数两种方式点亮LED的主要区别在于使用的方法和代码复杂度。使用寄存器的方式需要直接访问硬件寄存器,通过设置或清除寄存器中的位来控制LED的亮灭。这种方式需要对硬件和寄存器的了解,代码相对较短,执行效率高,但可读性较差,不方便维护和修改。使用库函数的方式则是调用已经封装好的函数库,函数库中已经实现了控制LED的功能。这种方式代码相对较长,执行效率相对较低,但可读性好,易于维护和修改。最后也学习了如何用keil仿真观察输出波形。