前言
本文接着上一篇文章的内容带大家学习如何编写一个完整的LED代码。
一、头文件以及宏定义的编写
led.c
#include "led.h"
在led.c中我们只需要包含.h文件即可
led.h
#ifndef _LED_H_ #define _LED_H_ #include "main.h" #define u8 unsigned char #define u16 unsigned short #define u32 unsigned int //灯LED2的IO定义 #define LED2_RESET() HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET) //设置LED2低电平 #define LED2_SET() HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_SET) //设置LED2高电平 //灯LED1的IO定义 #define LED1_RESET() HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET) //设置LED1低电平 #define LED1_SET() HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET) //设置LED1高电平
led.h中的定义比较多一些,需要对LED的端口进行定义方便使用,移植时只需要改写后面的代码即可使用。
还需要对常用的数据类型进行宏定义,方便书写代码。
二、框架式管理代码的精华:结构体
led.h
typedef struct { u8 sw; //开关 u32 pre; //周期 } BRE_t; typedef struct { u8 sw; //开关 u32 pre; //周期 } BLK_t; typedef struct { BRE_t bre; //呼吸灯 BLK_t blk; //闪烁灯 } LED_DATA; extern LED_DATA ledData; //灯属性封装
在led.h文件中我们定义了三个结构体,一个是管理呼吸灯属性的结构体,一个是管理闪烁灯属性的结构体。这两个结构体里面分别定义了开关变量和周期变量,通过修改开关变量可以改变LED灯的亮灭,改变周期变量可以让LED灯的呼吸频率和闪烁频率改变。
最后一个结构体作为统筹管理的结构体,他里面定义了呼吸灯结构体变量和闪烁灯结构体变量,方便调试运行。
三、函数的编写
void LED_Init(void); //初始化调用 void LED_Task(void); //后台轮询调用 void LED_TIM_Handle(void); //定时调用
通常我们编写这三个函数
Init做一些LED灯的初始化比如开关的状态和周期的大小。
Task函数一般放在while(1)里面轮询调用
Handle函数则放在定时器里面中断调用
总结
信息大家看完这篇文章后应该会更加了解框架式编写代码的流程了。具体的代码放在LED代码