STM32框架式管理代码第一篇LED代码的管理
【摘要】 @TOC 前言这篇文章将正式开始带大家学习框架式编程。 一、什么是框架式编程大多数人都是只在main.c里面编写代码这样会导致代码看起来非常的繁杂,不容易管理。框架式编写代码就是将各种外设写成.c和.h文件这样既方便管理又方便移植。 二、cubeMX配置这里我会用到两个LED灯一个作为闪烁灯,一个作为呼吸灯。不太懂LED怎么配置的同学可以看看我之前的文章:配置LED灯闪烁 三、代码展示led...
@TOC
前言
这篇文章将正式开始带大家学习框架式编程。
一、什么是框架式编程
大多数人都是只在main.c里面编写代码这样会导致代码看起来非常的繁杂,不容易管理。框架式编写代码就是将各种外设写成.c和.h文件这样既方便管理又方便移植。
二、cubeMX配置
这里我会用到两个LED灯一个作为闪烁灯,一个作为呼吸灯。
不太懂LED怎么配置的同学可以看看我之前的文章:配置LED灯闪烁
三、代码展示
led.c文件
#include "led.h"
LED_DATA ledData;
static void LED_Bre_Ser(void); //启动一个处理bre的服务
static void LED_Blk_Ser(void); //启动一个处理blk的服务
void LED_Bre_Ser(void)
{
static u16 count=0;
static u8 step=0;
static u8 t1=0;
static u8 t=0;
if(ledData.bre.sw==0)
{
count=0;
t1=0;
t=0;
step=0;
return;
}
//模拟产生PWM
if(t<t1)
{
LED2_RESET(); //亮
}
else
{
LED2_SET(); //灭
}
t++;
t=t%64;
//渐变占空比
count++;
if(count>=(ledData.bre.pre/128*5))
{
count=0;
switch(step)
{
case 0:
{
t1++;
if(t1>=64)
{
step=1;
}
}
break;
case 1:
{
t1--;
if(t1==0)
{
step=0;
}
}
break;
}
}
}
void LED_Blk_Ser(void)
{
static u32 count=0;
static u8 step=0;
if(ledData.blk.sw==0)
{
step=0;
count=0;
return;
}
switch(step)
{
case 0:
{
count++;
if(count>=(ledData.blk.pre/2*5))
{
count=0;
LED1_SET(); //灭
step=1;
}
}
break;
case 1:
{
count++;
if(count>=(ledData.blk.pre/2*5))
{
count=0;
LED1_RESET(); //亮
step=0;
}
}
break;
}
}
void LED_Init(void)
{
LED2_SET(); //LED2灭
LED1_SET(); //LED1灭
//设定初始值
ledData.bre.sw=1;
ledData.bre.pre=2000; //2000ms
ledData.blk.sw=1;
ledData.blk.pre=1000; //1000ms
}
void LED_Task(void)
{
}
void LED_TIM_Handle(void)
{
LED_Bre_Ser();
LED_Blk_Ser();
}
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高电平
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; //灯属性封装
void LED_Init(void); //初始化调用
void LED_Task(void); //后台轮询调用
void LED_TIM_Handle(void); //定时调用
#endif
总结
本文我们先展示一下代码的具体内容,下篇文章我们接着讲解代码的具体实现原理。整个工程放在代码
供大家下载学习。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)