文章目录

  • 1 LED驱动流程图分析
    • 1.1 led_on流程图分析
    • 1.2 led_blink流程图分析
  • 2 代码实现

1 LED驱动流程图分析

这里主要分析led_on和led_blink流程。

1.1 led_on流程图分析

1.2 led_blink流程图分析


2 代码实现

代码使用HAL库开发,并且配置freertos。HAL配置太简单了,没啥需要注意的就不记录了。

drv_led.h:

#ifndef __DRV_LED_H
#define __DRV_LED_Hvoid led_init(void);
void led_on(uint32_t time_sec);
void led_off(void);
void led_blink(uint32_t period,uint32_t time_sec);#endif

drv_led.c:

#include <stdbool.h>
#include <string.h>
#include "main.h"#include "FreeRTOS.h"
#include "timers.h"#define LED_OFF()       HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_SET)
#define LED_ON()        HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_RESET)
#define LED_TOGGLE()    HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin)typedef enum{LED_STATE_OFF,LED_STATE_ON,LED_STATE_BLINK,
}led_state_e;static bool is_inited=false;
static TimerHandle_t timer_led;
static uint8_t state;struct led_control_t
{uint32_t time_on;uint32_t time_blink;uint32_t period_blink;uint32_t cnt_time_on;uint32_t cnt_time_blink;uint32_t cnt_period_blink;
}ledctl;void led_timer_callback( TimerHandle_t xTimer )
{switch (state){case LED_STATE_ON:ledctl.cnt_time_on++;if(ledctl.cnt_time_on>=ledctl.time_on){LED_OFF();ledctl.cnt_time_on=0;xTimerStop(timer_led,1000);}break;case LED_STATE_BLINK:ledctl.cnt_time_blink++;ledctl.cnt_period_blink++;if(ledctl.cnt_time_blink>=ledctl.time_blink){LED_OFF();ledctl.cnt_time_blink=0;xTimerStop(timer_led,1000);break;}if(ledctl.cnt_period_blink>=ledctl.period_blink){ledctl.cnt_period_blink=0;LED_TOGGLE();}break;default:break;}}void led_init(void)
{state=LED_STATE_OFF;memset(&ledctl,0,sizeof(ledctl));timer_led=xTimerCreate("timer_led",100,pdTRUE,NULL,led_timer_callback);LED_OFF();is_inited=true;
}
void led_on(uint32_t time_sec)
{if(!is_inited)return ;xTimerStop(timer_led,1000);ledctl.time_on=time_sec*10;ledctl.cnt_time_on=0;LED_ON();state=LED_STATE_ON;xTimerStart(timer_led,1000);
}
void led_off(void)
{if(!is_inited)return ;xTimerStop(timer_led,1000);LED_OFF();state=LED_STATE_OFF;ledctl.cnt_time_on=0;ledctl.cnt_time_blink=0;ledctl.cnt_period_blink=0;
}
void led_blink(uint32_t period,uint32_t time_sec)
{if(!is_inited)return ;xTimerStop(timer_led,1000);ledctl.time_blink=time_sec*10;ledctl.period_blink=period;ledctl.cnt_time_blink=0;ledctl.cnt_period_blink=0;LED_ON();state=LED_STATE_BLINK;xTimerStart(timer_led,1000);
}

LED驱动设计及实现相关推荐

  1. 多通道_人机交互界面的多通道RGB LED驱动设计

    现在的产品变得非常智能且彼此相互连接.扬声器.电视.冰箱.机顶盒和烟雾探测器等器件不再只是处在某一位置的工具 - 用户可远程或通过语音唤醒控制它们.这些器件比以前更加智能,这意味着它们还需要更加智慧的 ...

  2. 集丰照明|LED驱动设计5大关键点

    LED驱动设计5大关键点 1.芯片发热 这主要针对内置电源调制器的高压驱动芯片.假如芯片消耗的电流为2mA,300V的电压加在芯片上面,芯片的功耗为0.6W,当然会引起芯片的发热.驱动芯片的最大电流来 ...

  3. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之LED驱动框架--面向对象、分层设计思想

    文章目录 前言 1.LED驱动程序框架 1.1.对于LED驱动,我们想要什么样的接口? 1.2.LED驱动要怎么写,才能支持多个板子?分层写 1.3.程序分析 驱动程序 应用程序 Makefile 1 ...

  4. 嵌入式linux led驱动有几种写法,嵌入式Linux字符驱动LED灯设计

    一.任务要求 完成一个字符IO口驱动,在开发板上该IO口对应LED灯.该驱动程序通过控制IO口的高低电平来控制亮灭.同时要写一个应用层的测试程序,用来测试驱动程序.我的测试程序为myled_test. ...

  5. 南京邮电大学嵌入式系统开发实验5:嵌入式Linux下LED报警灯驱动设计及编程

    实验5  嵌入式Linux下LED报警灯驱动设计及编程 一.实验目的 理解驱动本质,掌握嵌入式Linux系统下驱动开发相关知识,包括端口寄存器访问.接口函数编写.和文件系统挂接.注册及相关应用编程等知 ...

  6. 单片机软件常用设计分享(二)驱动设计之LED灯显示设计

    单片机软件常用设计分享(二)驱动设计之LED灯显示设计 前言 <驱动设计–LED灯显示驱动> 一.LED灯工作方式 1.常亮 2.常灭 3.闪烁 4.间歇性闪烁 二.LED灯驱动数据结构 ...

  7. 驱动学习之LED驱动框架

    一:什么是驱动框架   (1)内核中驱动部分维护者针对每个种类的驱动设计一套成熟的.标准的.典型的驱动实现,然后把不同厂家的同类硬件驱动中相同的部分抽出来自己实现好,再把不同部分留出接口给具体的驱动开 ...

  8. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之驱动设计的思想:面向对象/分层/分离

    文章目录 前言 1.分离设计 驱动程序分析---程序分层 通用驱动程序---面向对象 个性化驱动程序---分离 APP 程序分析 前言 韦东山嵌入式Linux驱动开发基础知识学习笔记 文章中大多内容来 ...

  9. 白光LED驱动方案的选择 TPS61043

    所有专为驱动白光LED而设计的IC都提供恒定电流夕其中尽大多数是基于电感或电荷泵的解决方案9这两种解决方案各有其优缺点. 电荷泵解决方案也称为开关电容器解决方案,利用分离电容器将电源从输进端传送至输出 ...

最新文章

  1. 2021世界人工智能大会最高奖项——卓越人工智能引领者奖(Super AI Leader,简称SAIL奖)在大会开幕式揭晓...
  2. 分布式任务队列 Celery — 详解工作流
  3. 运维自动化之ansible playbook安装apache
  4. python连接池原理_python redis之连接池的原理
  5. echarts——父元素宽度100%,但canvas宽度100px
  6. 游戏大厅 从基础开始(7)--绕回来细说聊天室(中间偏下)之女仆编年史2
  7. Go语言编程—Go语言中JSON的处理(map、struct 和 JSON字符串的相互转换)
  8. 中国历史上最牛气的十大豪言壮语
  9. Linux修改文件/文件夹权限
  10. cocos2dx arm64 jpg格式的不显示_如何导出CocosCreator项目供cocos2dx加载
  11. linux下查看文件inode,Linux下如何寻找相同文件?
  12. 791A.Bear and Big Brother
  13. 十天学会单片机和c语言编程 ppt,十天学会单片机和C语言编程笔记1
  14. 细粒度分类网络之WS-DAN论文阅读附代码
  15. 计算机考证要考PS吗
  16. 啊哈 , 算法 !--深度优先搜索( C语言版 )
  17. 老四苏-33:舰载机王 苏-33的另一个编号叫苏-27K。自然,它也是从苏-27改过来的,首飞于1987年8月17日。
  18. 敢不敢问导师是不是讨厌自己_您一直想知道的有关人类记忆的一切(但不敢问)...
  19. 硅谷安全大腕弓峰敏和卜峥加盟滴滴
  20. [洛谷P5329][SNOI2019]字符串(咕)

热门文章

  1. ubuntu+VsCode+Cmake+eigen 开发eigen应用
  2. 【PC工具】大神级代码注释,漂亮实用的代码注释工具代码logo工具
  3. 关于热插拔usb hotplug /proc/sys/kernel mdev udev busybox
  4. 开源工作流程引擎ccflow多人待办处理模式的详解
  5. Gradle 之 Android 中的应用
  6. Swift和Objective-C的运行时编程
  7. 个人学习Linux决心书
  8. 成为Java GC专家(5)—Java性能调优原则
  9. Assembly.Load()不能加载程序集的问题
  10. asp.net ajax 弹不出alert对话框的解决办法