STM32实现LED闪烁 | 您所在的位置:网站首页 › led显示屏怎么一直闪灯 › STM32实现LED闪烁 |
接着上一篇点亮LED的文章,我们现在准备更进一步,让LED闪烁,如果你了解过我上篇点亮LED文章,并且控制了LED的亮灭状态,可以略过本文章内容,本文章内容跟上篇一样,只是程序有所改变,有兴趣的读者可以参考。 控制LED需要使用到GPIO输入和输出IO口,GPIO是STM32控制管脚,GPIO的管脚与外部设备连接,能够实现与外部进行通信,控制,采集数据等。 相关数据手册连接 提取码:ai24 GPIO框图 要想点亮LED需要了解GPIO模式配置,如下。
第一版闪烁LED程序 1、led.h头文件相关宏定义代码 #include "stm32f10x.h" /* --------------------------------------------- 文件名称:led.h 描述:硬件相关模块封装 宏定义 方便移植 -----------------------------------------------------*/ #define GPIO_LED_PROT GPIOC #define GPIO_LED_CLK RCC_APB2Periph_GPIOC #define GPIO_LED_PIN GPIO_Pin_13 void GPIO_Cofing(void);2、led.c 文件的代码 RCC_APB2PeriphClockCmd(GPIO_LED_CLK,ENABLE); 配置IO时必须要使能时钟,时钟犹如人的心脏。 #include "bsp-led.h" void GPIO_Cofing(void) { GPIO_InitTypeDef GPIO_InitStruct; //声明一个结构体 RCC_APB2PeriphClockCmd(GPIO_LED_CLK,ENABLE); //使能GPIOC时钟 GPIO_InitStruct.GPIO_Pin = GPIO_LED_PIN; //控制PC13管脚 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; //设置管脚为通用推挽输出模式 GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //设置管脚速率为50MHZ GPIO_Init(GPIO_LED_PROT,&GPIO_InitStruct); //初始化结构体 }主函数.main.c #include "stm32f10x.h" #include "bsp-led.h" void DS_delay(uint32_t Count); int main(void) { GPIO_Cofing(); while(1) { //寄存器GPIOx_BRR 相关寄存器配置请查看手册 //作用:置1 清除对应ODR为0 注意:低15位有效 GPIO_ResetBits(GPIO_LED_PROT, GPIO_LED_PIN); DS_delay(0XFFFFFF); //延迟 //寄存器GPIOx_BSRR //作用: 置1 设置对应ODR为1 GPIO_SetBits(GPIO_LED_PROT, GPIO_LED_PIN); DS_delay(0XFFFFFF); } } void DS_delay(uint32_t Count) //延迟函数 { while(Count != 0) //空转 { Count--; } }第二版闪烁LED程序 1、led.h头文件相关宏定义代码 #include "stm32f10x.h" /* --------------------------------------------- 文件名称:led.h 描述:硬件相关模块封装 宏定义 方便移植 -----------------------------------------------------*/ #define GPIO_LED_PROT GPIOC #define GPIO_LED_CLK RCC_APB2Periph_GPIOC #define GPIO_LED_PIN GPIO_Pin_13 #define METET_LED(p,i) (p->ODR ^= i) //反转LED #define REVERES_LED METET_LED(GPIO_LED_PROT,GPIO_LED_PIN) void GPIO_Cofing(void);2、led.c 文件的代码 #include "bsp-led.h" void GPIO_Cofing(void) { GPIO_InitTypeDef GPIO_InitStruct; //声明一个结构体 RCC_APB2PeriphClockCmd(GPIO_LED_CLK,ENABLE); //使能GPIOC时钟 GPIO_InitStruct.GPIO_Pin = GPIO_LED_PIN; //控制PC13管脚 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; //设置管脚为通用推挽输出模式 GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //设置管脚速率为50MHZ GPIO_Init(GPIO_LED_PROT,&GPIO_InitStruct); //初始化结构体 }主函数.main.c #include "stm32f10x.h" #include "bsp-led.h" void DS_delay(uint32_t Count); int main(void) { GPIO_Cofing(); while(1) { REVERES_LED; //反转LED DS_delay(0XFFFFFF); //延迟 } } void DS_delay(uint32_t Count) //延迟函数 { while(Count != 0) //空转 { Count--; } }烧录程序之后就可以看到闪烁LED啦! 想要精准到秒或者毫秒级别可以使用系统滴答定时器Systick 或者 定时器TIMx 后面可能会讲到,因为还在校,时间很少,还要做其他东西,所以有时间的话会更新, 完! |
CopyRight 2018-2019 实验室设备网 版权所有 |