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

一、创建工程

1.打开keil,新建工程,选择STM32F103C8芯片
在这里插入图片描述
2.点击图片标注处
在这里插入图片描述
3.在Groups中双击空白的地方,分别创建CORE,FWLIB,SYSTEM,USER四个分组
在这里插入图片描述
4.选中CORE,点击Add Files,将图中所示的两个c文件选择,点击Add
在这里插入图片描述
5.选中CORE,点击Add Files,选中startup_stm32f10x_md.s,点击Add
在这里插入图片描述
6.选中SYSTEM,点击Add Files,将src文件中的全部c文件都选中,点击Add
在这里插入图片描述
7.选中USER,点击Add Files,将图中所选中的文件选中,点击Add
在这里插入图片描述
上诉操作完成后点击OK

8.打开魔术棒,点击C/C++,点击图中所标注处
在这里插入图片描述
9.双击空白处,添加固件库的文件路径
在这里插入图片描述
10.在Define中输入图中所示,中间间隔是英文逗号,勾选上C99 Mode
在这里插入图片描述
11.点击Output,勾上Create HEX File
在这里插入图片描述
12.点击Target,修改图中所示
在这里插入图片描述
13.点击Debug,修改图中标注出
在这里插入图片描述
点击OK退出

二、代码

main.c

#include "stm32f10x.h"  
#include "bsp_led.h"

void Delay(uint32_t count)
{
	for(;count != 0;count--);
}

int main(void)
{
	// 来到这里的时候,系统的时钟已经被配置成72M。
	LED_GPIO_Config();	//GPIO初始化
	
	while(1)
	{//LED流水灯,保险起见,点亮其中一个灯时,将其余两个灯都关闭
		GPIO_SetBits(LED_G_GPIO_PORT,LED_R_GPIO_PIN);		//关灯
		GPIO_SetBits(LED_G_GPIO_PORT,LED_B_GPIO_PIN);		//关灯
		GPIO_ResetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);		//开灯
		Delay(0xFFFFFF);
		GPIO_SetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);		//关灯
		GPIO_SetBits(LED_G_GPIO_PORT,LED_R_GPIO_PIN);		//关灯
		GPIO_ResetBits(LED_G_GPIO_PORT,LED_B_GPIO_PIN);		//开灯
		Delay(0xFFFFFF);
		GPIO_SetBits(LED_G_GPIO_PORT,LED_G_GPIO_PIN);		//关灯
		GPIO_SetBits(LED_G_GPIO_PORT,LED_B_GPIO_PIN);		//关灯
		GPIO_ResetBits(LED_G_GPIO_PORT,LED_R_GPIO_PIN);		//开灯
		Delay(0xFFFFFF);
}

bsp_led.h

#ifndef _BSP_LED_H
#define _BSP_LED_H

#include "stm32f10x.h"		//要包含固件库的.h文件

#define LED_G_GPIO_PIN						GPIO_Pin_0			//定义绿灯管脚号
#define LED_B_GPIO_PIN						GPIO_Pin_1			//定义蓝灯管脚号
#define LED_R_GPIO_PIN						GPIO_Pin_5			//定义红灯管脚号
#define LED_G_GPIO_PORT						GPIOB				//定义用到的GPIO
#define LED_G_GPIO_CLK						RCC_APB2Periph_GPIOB//定义RCC时钟寄存器

void LED_GPIO_Config(void);		//.c文件中的函数声明

#endif	/*_BSP_LED_H*/

bsp_led.c

#include "bsp_led.h"

void LED_GPIO_Config(void)
{
	GPIO_InitTypeDef GPIO_InitStruct;		//定义变量,方便赋值
	
	RCC_APB2PeriphClockCmd(LED_G_GPIO_CLK,ENABLE);	//打开APB2时钟,GPIO挂载在APB2
	//GPIO_PIN的部分用或将用到的管脚初始化为一个十六进制数据,原本是三个十六进制
	GPIO_InitStruct.GPIO_Pin = (LED_G_GPIO_PIN|LED_B_GPIO_PIN|LED_R_GPIO_PIN);	//设置需要用到的管脚,LED_G_GPIO_PIN看.h文件
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;			//设置输出模式为推挽输出
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;			//设置输出速率为50MHz,LED_G_GPIO_CLK看.h文件
	
	GPIO_Init(LED_G_GPIO_PORT, &GPIO_InitStruct);			//加上&,方便取值	//初始化GPIO
}

编译
在这里插入图片描述
结果展示

固件库stm32led

三、Keil的软件仿真观察管脚的时序波形

1.点击Debug,选择start
在这里插入图片描述
2.选择示波器
在这里插入图片描述3.点击setup
在这里插入图片描述
4.选择图中标注出
在这里插入图片描述
5.依次输入 PORTB.0 ; PORTB.1 ; PORTB.5 。选择Bit,然后点击Close
在这里插入图片描述
6.运行
在这里插入图片描述
7.结果展示
在这里插入图片描述
在这里插入图片描述
可以看出实际LED闪烁周期为2.336s。

参考

https://blog.csdn.net/qq_38794513/article/details/127707996

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值