本文章是基于BES2700 芯片,其他BESxxx 芯片可做参考,如有不当之处,欢迎评论区留言指出。仅供参考学习用!
BES 平台 SDK之代码架构讲解二_谢文浩的博客-CSDN博客
关于SDK 系统框架简介可参考上一篇文章。链接如上所示!
一:LED配置
1. 根据原理图确认led 控制引脚GPIO,找到SDK 关于led配置的.c 源文件。/config/best1306_ibrt/target.h 和 /config/best1306_ibrt/target.c),如下截图所示:
target.h 文件
target.c 文件
此处只用了一个LED .
二:初始化LED
LED 会在main 函数进行,参考源文件目录/platform/main/main.cpp。如下截图所示:
三:LED 调用
参照如下源文件:
/app/main/app_status_ind.h
/config/_default_cfg_src_/app_status_ind.c
/app/pwl/app_pwl.h
/app/pwl/app_pwl.cpp
1.在app_pwl 源文件,对led 做了如下工作:
1. 创建一个定时器:
2.启动定时器,并且置位初始状态。
3. int app_pwl_stop(enum APP_PWL_ID_T id)
暂停指定ID 定时器,并熄灭led
4.int app_pwl_close(void)
暂停所有led 相关定时器,并熄灭led
5.int app_pwl_setup(enum APP_PWL_ID_T id, struct APP_PWL_CFG_T *cfg)
配置指定定时器id 相关参数。参考两个结构体:
struct APP_PWL_CFG_T {
struct PWL_CYCLE_ONCE {
uint8_t level; // 电平状态
uint32_t time; // 持续时间
}part[10]; // 总共变化次数,和parttotal 保持一致
uint8_t parttotal; // 总共循环次数
uint8_t startlevel;// 起始电平状态
bool periodic; // 循环周期
};
struct APP_PWL_T {
enum APP_PWL_ID_T id; // 定时器ID ,一个LED 对应一个ID
struct APP_PWL_CFG_T config; // 配置参数
uint8_t partidx; // 变化次数,用于和partotal 做比较。也作为part 的下标
osTimerId timer; // 定时器句柄
};
2.在app_status_ind 源文件,真正调用的地方
1.截图如下所示:
该函数会根据上层应用设置的状态来进行led 显示状态配置,实际调用的是app_pwl_setup()和app_pwl_start 函数。
相关配置参数可见:
解释如下:总共有六次变化,起始状态亮,运行一个周期结束。 亮200ms->灭200ms->亮200ms->灭200ms->亮200ms-灭200ms