基于标准外设库的LED流水灯


在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标准外设库的使用方法,也增强了我的编程和调试能力。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值