“LED 闪烁控制软件模块”的版本间的差异

来自谷雨文档中心
跳转至: 导航搜索
(初版正在进行中)
第1行: 第1行:
 
LED闪烁功能,作为常用需求。将其归纳为软件模块,与其他项目或工程共享原代码。
 
LED闪烁功能,作为常用需求。将其归纳为软件模块,与其他项目或工程共享原代码。
 +
 +
=== 文件组成 ===
 +
功能模块由六个文件组成,分别承载不同作用。
 +
{| class="wikitable"
 +
|+
 +
!文件名称
 +
!作用
 +
|-
 +
|bsp_status_led.c
 +
|对应用层函数进行定义
 +
|-
 +
|bsp_status_led.h
 +
|对应用层函数进行声明
 +
|-
 +
|ledConfig.c
 +
|对硬件操作接口进行抽象
 +
|-
 +
|ledConfig.h
 +
|对硬件操作接口进行声明
 +
|-
 +
|hal_led.c
 +
|对硬件接口进行定义
 +
|-
 +
|hal_led.h
 +
|对硬件接口进行声明
 +
|}
 +
在LED闪烁功能模块中,用到硬件包括一个GPIO引脚,一个定时器。开发者需要根据自身硬件情况,自行选择相应的硬件。并将这些硬件按要求实现相应的函数。这些函数在hal_led.h与hal_led.c文件中进行声明与定义。
 +
 +
==== hal_led.h与hal_led.c ====<!-- hal_led.h中与硬件相关函数声明 -->
 +
<syntaxhighlight lang="c" line="1">
 +
/*定时器超时回调函数指针*/
 +
typedef void (*fnTimerTimeoutCb_t)(bool);
 +
 +
//******************************************************************************
 +
// function declare
 +
/*Create a timer*/
 +
void HalLed_TimerInit(fnTimerTimeoutCb_t pFnTimeoutCb);
 +
 +
/*Start timer*/
 +
void HalLed_TimerStart(uint32_t ms, void *pContext);
 +
/*Stop timer*/
 +
void HalLed_TimerStop(void);
 +
/*Pin init*/
 +
void HalLed_PinInit(void);
 +
/*Pin set */
 +
void HalLed_PinSet(bool level);
 +
</syntaxhighlight>各函数功能及形参解释说明,如下表所示。
 +
{| class="wikitable"
 +
|+
 +
!函数名
 +
!解释
 +
|-
 +
|HalLed_TimerInit(fnTimerTimeoutCb_t pFnTimeoutCb)
 +
|创建一个定时器,且定时器能达到秒级的周期。
 +
pFnTimeoutCb:是定时器超时回调函数指针
 +
|-
 +
|HalLed_Timerstart(uint32_t ms, void *pContext)
 +
|启动定时器。
 +
ms:是定时周期
 +
 +
pContext:传入的参数指针,会在超时回调函数中使用
 +
|-
 +
|HalLed_Timerstop(void)
 +
|停止定时器
 +
|-
 +
|HalLed_PinInit(void)
 +
|初始化与LED相连的GPIO引脚,并保持LED灭状态
 +
|-
 +
|HalLed_PinSet(void)
 +
|设置GPIO的高低电平,即控制LED亮灭。
 +
level:true ->LED亮
 +
 +
false -> LED灭
 +
|}<!-- hal_led.c就是对上述函数进行定义。而各个函数体是与开发者的硬件相关联 -->
 +
<syntaxhighlight lang="c" line="1">
 +
//******************************************************************************
 +
// fn : HalLed_TimerInit
 +
//
 +
// brief: Create a time object for blink led
 +
//
 +
// param : pFnTimeoutCb -> the timeout cb
 +
//
 +
// return : none
 +
void HalLed_TimerInit(fnTimerTimeoutCb_t pFnTimeoutCb)
 +
{
 +
 +
}
 +
 +
//******************************************************************************
 +
// fn : HalLed_TimerStart
 +
//
 +
// brief: Start timer
 +
//
 +
// param : ms -> the timeout ,unit = ms
 +
//
 +
// return : none
 +
void HalLed_TimerStart(uint32_t ms,void *pContext)
 +
{
 +
 
 +
}
 +
 +
//******************************************************************************
 +
// fn : HalLed_TimerStop
 +
//
 +
// brief: Stop timer
 +
//
 +
// param : ms -> the timeout ,unit = ms
 +
//
 +
// return : none
 +
void HalLed_TimerStop(void)
 +
{
 +
 +
}
 +
 +
//******************************************************************************
 +
// fn : HalLed_PinInit
 +
//
 +
// brief: Pin init
 +
//
 +
// param : none
 +
//
 +
// return : none
 +
void HalLed_PinInit(void)
 +
{
 +
 +
}
 +
 +
//******************************************************************************
 +
// fn : HalLed_PinInit
 +
//
 +
// brief: Pin set
 +
//
 +
// param : level -> true -> open,false -> off
 +
//
 +
// return : none
 +
void HalLed_PinSet(bool level)
 +
{
 +
 
 +
}
 +
</syntaxhighlight>
 +
 +
==== ledConfig.h与ledConfig.c ====
 +
ledConfig.h与ledConfig.c是对LED闪烁模块的硬件进行抽象,即hal_led.h与hal_led.c中定义的功能函数。<!-- ledConfig.h抽象接口声明 -->
 +
 +
<syntaxhighlight lang="c" line="1">
 +
/*定时器初始化函数指针*/
 +
typedef void (*fnTimerInit_t)(fnTimerTimeoutCb_t);
 +
/*定时器启动函数指针*/
 +
typedef void (*fnTimerStart_t)(uint32_t ms,void*pContext);
 +
 +
/*定时器停止函数指针*/
 +
typedef void (*fnTimerStop_t)(void);
 +
 +
/*Led 引脚初始化函数指针*/
 +
typedef void (*fnPinInit_t)(void);
 +
/*Led 引脚高低电平设置函数指针*/
 +
typedef void (*fnPinLevelSet_t)(bool level);
 +
 +
//******************************************************************************
 +
// Name : ledBlinkCfg_t
 +
//
 +
// Brief : 描述LED闪烁控制接口函数
 +
typedef struct
 +
{
 +
  fnTimerInit_t    fnTimerInit;
 +
  fnTimerStart_t  fnTimerStart;
 +
  fnTimerStop_t    fnTimerStop;
 +
  fnPinInit_t      fnPinInit;
 +
  fnPinLevelSet_t  fnPinLevelSet;
 +
 
 +
}ledModuleCfg_t;
 +
 
 +
extern ledModuleCfg_t  ledModule; 
 +
</syntaxhighlight>hal_led.h就是根据ledConfig.h声明函数接口进行定义的。
 +
 +
其中结构体ledModuleCfg_t就是对硬件层进行抽象。其中包括定时器定义,定时器启动,定时器停止,引脚gpio初始化,引脚高低电平设置。<!-- ledConfig.c是ledModuleCfg_t进行初始化 -->
 +
 +
<syntaxhighlight lang="c" line="1">
 +
/*led operate interface*/
 +
ledModuleCfg_t  ledModule = {
 +
  .fnTimerInit  = HalLed_TimerInit,
 +
  .fnTimerStart  = HalLed_TimerStart,
 +
  .fnTimerStop  = HalLed_TimerStop,
 +
  .fnPinInit    = HalLed_PinInit,
 +
  .fnPinLevelSet = HalLed_PinSet
 +
};
 +
</syntaxhighlight>
 +
 +
==== bsp_status_led.h 与bsp_status_led.c ====
 +
这两个文件是开发者可以调用函数的声明与定义。开发者可以调用相应函数对LED闪烁状态进行设置。led支持如下6种状态。<syntaxhighlight lang="c" line="1">
 +
 +
typedef enum
 +
{
 +
  LED_STATUS_OFF,          //关闭
 +
  LED_STATUS_ON,          //常亮
 +
  LED_STATUS_BLINK1,      //闪烁1,周期200ms,占空比50:亮100,灭100
 +
  LED_STATUS_BLINK2,      //闪烁2,周期1000,占空比10:亮100,灭900
 +
  LED_STATUS_BLINK3,      //闪烁3,周期1000,占空比50:亮500,灭500
 +
  LED_STATUS_BLINK4,      //闪烁4,周期2000,占空比5: 亮100,灭1900
 +
  LED_STATUS_END
 +
}eLEDStatus;
 +
</syntaxhighlight>当然开发者也可以,根据自己的需求,对led闪烁状态进行修改。包括周期,占空比。具体修改的地方在bsp_status_led.c文件头部。各个闪烁状态由宏定义定义,如下。<syntaxhighlight lang="c" line="1">
 +
#define LED_BLINK1_PERIOD  200
 +
#define LED_BLINK1_DUTY    50
 +
#define LED_BLINK1_ON_MS    100
 +
#define LED_BLINK1_OFF_MS  (LED_BLINK1_PERIOD - LED_BLINK1_ON_MS)
 +
 +
#define LED_BLINK2_PERIOD  1000
 +
#define LED_BLINK2_DUTY    10
 +
#define LED_BLINK2_ON_MS    100
 +
#define LED_BLINK2_OFF_MS  (LED_BLINK2_PERIOD - LED_BLINK2_ON_MS)
 +
 +
#define LED_BLINK3_PERIOD  1000
 +
#define LED_BLINK3_DUTY    50
 +
#define LED_BLINK3_ON_MS    500
 +
#define LED_BLINK3_OFF_MS  (LED_BLINK3_PERIOD - LED_BLINK3_ON_MS)
 +
 +
#define LED_BLINK4_PERIOD  2000
 +
#define LED_BLINK4_DUTY    5
 +
#define LED_BLINK4_ON_MS    100
 +
#define LED_BLINK4_OFF_MS  (LED_BLINK4_PERIOD - LED_BLINK4_ON_MS)
 +
</syntaxhighlight>

2019年12月9日 (一) 15:25的版本

LED闪烁功能,作为常用需求。将其归纳为软件模块,与其他项目或工程共享原代码。

1 文件组成

功能模块由六个文件组成,分别承载不同作用。

文件名称 作用
bsp_status_led.c 对应用层函数进行定义
bsp_status_led.h 对应用层函数进行声明
ledConfig.c 对硬件操作接口进行抽象
ledConfig.h 对硬件操作接口进行声明
hal_led.c 对硬件接口进行定义
hal_led.h 对硬件接口进行声明

在LED闪烁功能模块中,用到硬件包括一个GPIO引脚,一个定时器。开发者需要根据自身硬件情况,自行选择相应的硬件。并将这些硬件按要求实现相应的函数。这些函数在hal_led.h与hal_led.c文件中进行声明与定义。

1.1 hal_led.h与hal_led.c

 1 /*定时器超时回调函数指针*/
 2 typedef void (*fnTimerTimeoutCb_t)(bool);
 3 
 4 //******************************************************************************
 5 // function declare
 6 /*Create a timer*/
 7 void HalLed_TimerInit(fnTimerTimeoutCb_t pFnTimeoutCb);
 8 
 9 /*Start timer*/
10 void HalLed_TimerStart(uint32_t ms, void *pContext);
11 /*Stop timer*/
12 void HalLed_TimerStop(void);
13 /*Pin init*/
14 void HalLed_PinInit(void);
15 /*Pin set */
16 void HalLed_PinSet(bool level);

各函数功能及形参解释说明,如下表所示。

函数名 解释
HalLed_TimerInit(fnTimerTimeoutCb_t pFnTimeoutCb) 创建一个定时器,且定时器能达到秒级的周期。

pFnTimeoutCb:是定时器超时回调函数指针

HalLed_Timerstart(uint32_t ms, void *pContext) 启动定时器。

ms:是定时周期

pContext:传入的参数指针,会在超时回调函数中使用

HalLed_Timerstop(void) 停止定时器
HalLed_PinInit(void) 初始化与LED相连的GPIO引脚,并保持LED灭状态
HalLed_PinSet(void) 设置GPIO的高低电平,即控制LED亮灭。

level:true ->LED亮

false -> LED灭

 1 //******************************************************************************
 2 // fn : HalLed_TimerInit
 3 //
 4 // brief: Create a time object for blink led
 5 //
 6 // param : pFnTimeoutCb -> the timeout cb
 7 //
 8 // return : none
 9 void HalLed_TimerInit(fnTimerTimeoutCb_t pFnTimeoutCb)
10 {
11 
12 }
13 
14 //******************************************************************************
15 // fn : HalLed_TimerStart
16 //
17 // brief: Start timer
18 //
19 // param : ms -> the timeout ,unit = ms
20 //
21 // return : none
22 void HalLed_TimerStart(uint32_t ms,void *pContext)
23 {
24   
25 }
26 
27 //******************************************************************************
28 // fn : HalLed_TimerStop
29 //
30 // brief: Stop timer
31 //
32 // param : ms -> the timeout ,unit = ms
33 //
34 // return : none
35 void HalLed_TimerStop(void)
36 {
37 
38 }
39 
40 //******************************************************************************
41 // fn : HalLed_PinInit
42 //
43 // brief: Pin init
44 //
45 // param : none
46 //
47 // return : none
48 void HalLed_PinInit(void)
49 {
50 
51 }
52 
53 //******************************************************************************
54 // fn : HalLed_PinInit
55 //
56 // brief: Pin set 
57 //
58 // param : level -> true -> open,false -> off
59 //
60 // return : none
61 void HalLed_PinSet(bool level)
62 {
63   
64 }

1.2 ledConfig.h与ledConfig.c

ledConfig.h与ledConfig.c是对LED闪烁模块的硬件进行抽象,即hal_led.h与hal_led.c中定义的功能函数。

 1 /*定时器初始化函数指针*/
 2 typedef void (*fnTimerInit_t)(fnTimerTimeoutCb_t);
 3 /*定时器启动函数指针*/
 4 typedef void (*fnTimerStart_t)(uint32_t ms,void*pContext);
 5 
 6 /*定时器停止函数指针*/
 7 typedef void (*fnTimerStop_t)(void);
 8 
 9 /*Led 引脚初始化函数指针*/
10 typedef void (*fnPinInit_t)(void);
11 /*Led 引脚高低电平设置函数指针*/
12 typedef void (*fnPinLevelSet_t)(bool level);
13 
14 //******************************************************************************
15 // Name : ledBlinkCfg_t
16 //
17 // Brief : 描述LED闪烁控制接口函数
18 typedef struct
19 {
20   fnTimerInit_t    fnTimerInit;
21   fnTimerStart_t   fnTimerStart;
22   fnTimerStop_t    fnTimerStop;
23   fnPinInit_t      fnPinInit;
24   fnPinLevelSet_t  fnPinLevelSet;
25   
26 }ledModuleCfg_t;
27   
28 extern ledModuleCfg_t  ledModule;

hal_led.h就是根据ledConfig.h声明函数接口进行定义的。

其中结构体ledModuleCfg_t就是对硬件层进行抽象。其中包括定时器定义,定时器启动,定时器停止,引脚gpio初始化,引脚高低电平设置。

1 /*led operate interface*/
2 ledModuleCfg_t  ledModule = {
3   .fnTimerInit   = HalLed_TimerInit,
4   .fnTimerStart  = HalLed_TimerStart,
5   .fnTimerStop   = HalLed_TimerStop,
6   .fnPinInit     = HalLed_PinInit,
7   .fnPinLevelSet = HalLed_PinSet
8 };

1.3 bsp_status_led.h 与bsp_status_led.c

这两个文件是开发者可以调用函数的声明与定义。开发者可以调用相应函数对LED闪烁状态进行设置。led支持如下6种状态。

 1 typedef enum
 2 {
 3   LED_STATUS_OFF,          //关闭
 4   LED_STATUS_ON,           //常亮
 5   LED_STATUS_BLINK1,       //闪烁1,周期200ms,占空比50:亮100,灭100
 6   LED_STATUS_BLINK2,       //闪烁2,周期1000,占空比10:亮100,灭900
 7   LED_STATUS_BLINK3,       //闪烁3,周期1000,占空比50:亮500,灭500
 8   LED_STATUS_BLINK4,       //闪烁4,周期2000,占空比5: 亮100,灭1900
 9   LED_STATUS_END
10 }eLEDStatus;

当然开发者也可以,根据自己的需求,对led闪烁状态进行修改。包括周期,占空比。具体修改的地方在bsp_status_led.c文件头部。各个闪烁状态由宏定义定义,如下。

 1 #define LED_BLINK1_PERIOD   200
 2 #define LED_BLINK1_DUTY     50
 3 #define LED_BLINK1_ON_MS    100
 4 #define LED_BLINK1_OFF_MS   (LED_BLINK1_PERIOD - LED_BLINK1_ON_MS)
 5 
 6 #define LED_BLINK2_PERIOD   1000
 7 #define LED_BLINK2_DUTY     10
 8 #define LED_BLINK2_ON_MS    100
 9 #define LED_BLINK2_OFF_MS   (LED_BLINK2_PERIOD - LED_BLINK2_ON_MS)
10 
11 #define LED_BLINK3_PERIOD   1000
12 #define LED_BLINK3_DUTY     50
13 #define LED_BLINK3_ON_MS    500
14 #define LED_BLINK3_OFF_MS   (LED_BLINK3_PERIOD - LED_BLINK3_ON_MS)
15 
16 #define LED_BLINK4_PERIOD   2000
17 #define LED_BLINK4_DUTY     5
18 #define LED_BLINK4_ON_MS    100
19 #define LED_BLINK4_OFF_MS   (LED_BLINK4_PERIOD - LED_BLINK4_ON_MS)

本PDF由谷雨文档中心自动生成,点击下方链接阅读最新内容。

取自“http://doc.iotxx.com/index.php?title=LED_闪烁控制软件模块&oldid=2506