文章目录
前言
本文章将通过流水灯实验主要讲述如何建立并添加外设库以及通过一种循环延时1S,并通过示波器观察输出引脚波形,观察输出波形是否正确以及延时的实际周期并分析。
一、创建工程文件—标准外设库
1.创建一个工程并保存
2.添加标准外设库
3.添加用户文件和路径
(1)添加用户文件
点击AddFiles添加自己的文件
(2)添加路径
点击魔法棒进行设置
选择C/C++,并添加Include Paths,在其中添加需要添加的路径
# 二、程序编写与运行
1.延时函数的编写
(1)
通过循环对系统进行延时,我们首先需要了解时钟周期,机器周期,指令周期的含义,在for循环当中,循环一次大概需要8个机器周期,96个时钟周期,本例程所用的是72Mhz的单片机,具体的分析方法见stm32延时
void delay_s(void)
{
volatile int i=0,j=0,k=0;
for(i=1000;i>0;i--)
{
for(j=1000;j>0;j--)
{
for(k=5;k>0;k--);
}
}
}
2.编写流水灯代码
初始化代码:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//开启GPIOA时钟
GPIO_InitTypeDef GPIO_InitStructure; //定义一个GPIO_InitTypeDef类型的结构体
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置引脚模式为通用推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; //选择要控制的GPIO引脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置引脚速率为50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //调用库函数,初始化GPIO
循环代码
while (1)
{
GPIO_Write(GPIOA, ~0x0001); //0000 0000 0000 0001
delay_s();
GPIO_Write(GPIOA, ~0x0002); //0000 0000 0000 0010
delay_s();
GPIO_Write(GPIOA, ~0x0004); //0000 0000 0000 0100
delay_s();
}
3.在仿真中查看延时波形
(1)在keil上进行仿真配置
进入仿真,在仿真波形界面点击setup
进入setup界面,进行配置如下图
仿真界面查看波形图
**
**
如上图所示,该仿真波形表明,进行一次延时的时间大概在1.05s
4.在示波器上观测波形
如图所示,波形为周期为3.5s的方波,因为应用了3个LED灯,所以每3S循环
总结
本节主要学习了库函数的引入和对STM32 工作的时间进行了解,通过循环函数占用CPU对系统进行延时,总的来说用循环的方法进行延时还是不太准确,如果需要更准确的延时还是需要用到定时器,在后续将会发出关于定时器延时的配置。