你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32框架式代码管理LED代码的讲解

[复制链接]
STMCU小助手 发布时间:2022-5-21 19:00
前言
本文接着上一篇文章的内容带大家学习如何编写一个完整的LED代码。

一、头文件以及宏定义的编写

led.c

  1. #include "led.h"
复制代码

在led.c中我们只需要包含.h文件即可
led.h

  1. #ifndef _LED_H_
  2. #define _LED_H_

  3. #include "main.h"

  4. #define u8 unsigned char
  5. #define u16 unsigned short
  6. #define u32 unsigned int

  7. //灯LED2的IO定义
  8. #define LED2_RESET() HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET) //设置LED2低电平
  9. #define LED2_SET() HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_SET) //设置LED2高电平

  10. //灯LED1的IO定义
  11. #define LED1_RESET() HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET) //设置LED1低电平
  12. #define LED1_SET() HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET) //设置LED1高电平
复制代码

led.h中的定义比较多一些,需要对LED的端口进行定义方便使用,移植时只需要改写后面的代码即可使用。
还需要对常用的数据类型进行宏定义,方便书写代码。

二、框架式管理代码的精华:结构体

led.h

  1. typedef struct
  2. {
  3.         u8 sw; //开关
  4.         u32 pre; //周期
  5.         
  6. } BRE_t;

  7. typedef struct
  8. {
  9.         u8 sw; //开关
  10.         u32 pre; //周期
  11.         
  12. } BLK_t;

  13. typedef struct
  14. {
  15.     BRE_t bre; //呼吸灯
  16.     BLK_t blk; //闪烁灯

  17. } LED_DATA;

  18. extern LED_DATA ledData; //灯属性封装
复制代码

在led.h文件中我们定义了三个结构体,一个是管理呼吸灯属性的结构体,一个是管理闪烁灯属性的结构体。这两个结构体里面分别定义了开关变量和周期变量,通过修改开关变量可以改变LED灯的亮灭,改变周期变量可以让LED灯的呼吸频率和闪烁频率改变。
最后一个结构体作为统筹管理的结构体,他里面定义了呼吸灯结构体变量和闪烁灯结构体变量,方便调试运行。

三、函数的编写

  1. void LED_Init(void); //初始化调用
  2. void LED_Task(void); //后台轮询调用
  3. void LED_TIM_Handle(void); //定时调用
复制代码

通常我们编写这三个函数
Init做一些LED灯的初始化比如开关的状态和周期的大小。
Task函数一般放在while(1)里面轮询调用
Handle函数则放在定时器里面中断调用



收藏 评论0 发布时间:2022-5-21 19:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版