STM32实现LED闪烁 您所在的位置:网站首页 led显示屏怎么一直闪灯 STM32实现LED闪烁

STM32实现LED闪烁

2024-06-02 05:44| 来源: 网络整理| 查看: 265

接着上一篇点亮LED的文章,我们现在准备更进一步,让LED闪烁,如果你了解过我上篇点亮LED文章,并且控制了LED的亮灭状态,可以略过本文章内容,本文章内容跟上篇一样,只是程序有所改变,有兴趣的读者可以参考。

控制LED需要使用到GPIO输入和输出IO口,GPIO是STM32控制管脚,GPIO的管脚与外部设备连接,能够实现与外部进行通信,控制,采集数据等。

相关数据手册连接 提取码:ai24

GPIO框图 在这里插入图片描述 1.1硬件设置 在这里插入图片描述 LED的阴极连接到了STM32的GPIO管脚,只要我们控制GPIO电平的输出状态,赋予高或低电平,就能够控制LED的亮灭状态。如果你的开发板的LED灯连接方式不一样,修改工程相关管脚即可。

要想点亮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 实验室设备网 版权所有