文章目录
在STM32F103的流水灯点亮版本(寄存器地址操作)的基础上,改用标准外设库方式使用某个端口GPIOx端口管脚控制几个LED灯,轮流闪烁,间隔时长1秒。
一、下载STM32标准外设软件库
在官网中选择下载
官方下载地址:https://www.st.com/zh/embedded-software/stm32-standard-peripheral-libraries.html
STM32标准外设软件库包含的文件:
二、创建工程
1.新建工程
- 打开keil,选择newproject
- 在创建LED.2文件夹,并在其中创建工程
- 选择STM32F103C8系列单片机
- 创建完成
2.添加STM32标准外设库文件(.c,.h)
- 将STM32标准外设软件库包含的Library、Start、User文件夹复制到LED.2文件夹中
- 在keil中添加文件组
- 分别命名为User,Library,Start
- 将LED.2文件夹中相应的文件全部添加进去
- 选择所有文件(All files)添加
- 添加完成
- 点击魔术棒,打开C/C++,在Include Paths处添加文件路径
3.创建成功
- 配置芯片初始化程序
通过编译 工程文件创建成功
三、实验运行
用标准外设库方式使用某个端口GPIOx端口管脚控制几个LED灯,轮流闪烁,间隔时长1秒。
1.实验代码
#include "stm32f10x.h" // Device header
#include "Delay.h"
int main(void)
{
//时钟配置
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//开启PA5口的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
//输入输出模式设置,输出速度设置
GPIO_InitTypeDef GPIO_InitStructure, GPIO_InitStructureB, GPIO_InitStructureC;
// A5
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;// 点灯用推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;// 选择0号引脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//选择输出速度
//配置B9
GPIO_InitStructureB.GPIO_Mode = GPIO_Mode_Out_PP;// 点灯用推挽输出
GPIO_InitStructureB.GPIO_Pin = GPIO_Pin_9;// 选择9号引脚
GPIO_InitStructureB.GPIO_Speed = GPIO_Speed_50MHz;//选择输出速度
//配置C14
GPIO_InitStructureC.GPIO_Mode = GPIO_Mode_Out_PP;// 点灯用推挽输出
GPIO_InitStructureC.GPIO_Pin = GPIO_Pin_14;// 选择14号引脚
GPIO_InitStructureC.GPIO_Speed = GPIO_Speed_50MHz;//选择输出速度
GPIO_Init(GPIOA, &GPIO_InitStructure);// GPIOA外设的5号引脚配置为推挽输出、50MHz速度
GPIO_Init(GPIOB, &GPIO_InitStructureB);
GPIO_Init(GPIOC, &GPIO_InitStructureC);
//GPIO_SetBits(GPIOA, GPIO_Pin_5);
//GPIO_ResetBits(GPIOA, GPIO_Pin_5);//将端口设置为低电平
while(1)
{
//A亮
GPIO_WriteBit(GPIOC, GPIO_Pin_14, Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_5, Bit_RESET);//Bit_RESET电平0,Bit_SET电平1
Delay_ms(1000);
//B亮
GPIO_WriteBit(GPIOA, GPIO_Pin_5, Bit_SET);
GPIO_WriteBit(GPIOB, GPIO_Pin_9, Bit_RESET);
Delay_ms(1000);
//将上一个点亮的熄灭,C亮
GPIO_WriteBit(GPIOB, GPIO_Pin_9, Bit_SET);
GPIO_WriteBit(GPIOC, GPIO_Pin_14, Bit_RESET);
Delay_ms(1000);
}
}
- 添加Delay相关文件
- 添加Delay文件的路径·
2.成功运行
3.硬件实现
四、Keil的软件仿真
1.配置(魔术棒)
- Target页设置
Xral(MHz)设置为8.0
Target界面中,选择跟正确的晶振大小,使用8MHz的外部晶振。这个选项在软件仿真中起到很重要的作用,如果选择错误,那么波形一定是错误的,因为时间不准确。
- Debug页的设置
2.利用逻辑分析仪
- 点击debug,进入调试页面
- 选择逻辑分析仪
- 选择要观察的引脚
- 点击右上角,添加A5(直接输入PORTA.5,按回车即可),B9,C14引脚,注意每个引脚的Display Type选择为Bit
3.GPIO波形
-
运行程序
-
观察波形
观察上述仿真波形,可以得到三个引脚电平输出都是一低两高,相对应的只有一个LED灯亮,从而实现流水功能。故引脚输出时序状态正确,通过仿真波形具体计算得到,延时周期大约在0.99s左右。
五、总结
本次LED流水灯实验主要是基于STM32F103标准外设库的一个实验,通过这个实验,我们可以了解如何使用STM32F103的标准外设库来控制LED灯的亮灭和模式。STM32F103标准外设库提供了对芯片上各种外设的控制能力,做其他实验时也可采用本方法,更加方便快捷。
通过这个基于STM32F103标准外设库的LED流水灯实验,我学习了如何使用STM32F103的标准外设库来实现LED流水灯功能,学习了如何初始化和配置GPIO和定时器,学习了如何使用keil仿真逻辑分析仪功能观察管脚的时序波形,用此功能观察GPIO端口的输出波形。这个实验不仅让我理解了STM32F103标准外设库的使用方法,也增强了我的编程和调试能力。