LED驱动设计及实现
文章目录
- 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驱动设计及实现相关推荐
- 多通道_人机交互界面的多通道RGB LED驱动设计
现在的产品变得非常智能且彼此相互连接.扬声器.电视.冰箱.机顶盒和烟雾探测器等器件不再只是处在某一位置的工具 - 用户可远程或通过语音唤醒控制它们.这些器件比以前更加智能,这意味着它们还需要更加智慧的 ...
- 集丰照明|LED驱动设计5大关键点
LED驱动设计5大关键点 1.芯片发热 这主要针对内置电源调制器的高压驱动芯片.假如芯片消耗的电流为2mA,300V的电压加在芯片上面,芯片的功耗为0.6W,当然会引起芯片的发热.驱动芯片的最大电流来 ...
- 【嵌入式Linux】嵌入式Linux驱动开发基础知识之LED驱动框架--面向对象、分层设计思想
文章目录 前言 1.LED驱动程序框架 1.1.对于LED驱动,我们想要什么样的接口? 1.2.LED驱动要怎么写,才能支持多个板子?分层写 1.3.程序分析 驱动程序 应用程序 Makefile 1 ...
- 嵌入式linux led驱动有几种写法,嵌入式Linux字符驱动LED灯设计
一.任务要求 完成一个字符IO口驱动,在开发板上该IO口对应LED灯.该驱动程序通过控制IO口的高低电平来控制亮灭.同时要写一个应用层的测试程序,用来测试驱动程序.我的测试程序为myled_test. ...
- 南京邮电大学嵌入式系统开发实验5:嵌入式Linux下LED报警灯驱动设计及编程
实验5 嵌入式Linux下LED报警灯驱动设计及编程 一.实验目的 理解驱动本质,掌握嵌入式Linux系统下驱动开发相关知识,包括端口寄存器访问.接口函数编写.和文件系统挂接.注册及相关应用编程等知 ...
- 单片机软件常用设计分享(二)驱动设计之LED灯显示设计
单片机软件常用设计分享(二)驱动设计之LED灯显示设计 前言 <驱动设计–LED灯显示驱动> 一.LED灯工作方式 1.常亮 2.常灭 3.闪烁 4.间歇性闪烁 二.LED灯驱动数据结构 ...
- 驱动学习之LED驱动框架
一:什么是驱动框架 (1)内核中驱动部分维护者针对每个种类的驱动设计一套成熟的.标准的.典型的驱动实现,然后把不同厂家的同类硬件驱动中相同的部分抽出来自己实现好,再把不同部分留出接口给具体的驱动开 ...
- 【嵌入式Linux】嵌入式Linux驱动开发基础知识之驱动设计的思想:面向对象/分层/分离
文章目录 前言 1.分离设计 驱动程序分析---程序分层 通用驱动程序---面向对象 个性化驱动程序---分离 APP 程序分析 前言 韦东山嵌入式Linux驱动开发基础知识学习笔记 文章中大多内容来 ...
- 白光LED驱动方案的选择 TPS61043
所有专为驱动白光LED而设计的IC都提供恒定电流夕其中尽大多数是基于电感或电荷泵的解决方案9这两种解决方案各有其优缺点. 电荷泵解决方案也称为开关电容器解决方案,利用分离电容器将电源从输进端传送至输出 ...
最新文章
- 2021世界人工智能大会最高奖项——卓越人工智能引领者奖(Super AI Leader,简称SAIL奖)在大会开幕式揭晓...
- 分布式任务队列 Celery — 详解工作流
- 运维自动化之ansible playbook安装apache
- python连接池原理_python redis之连接池的原理
- echarts——父元素宽度100%,但canvas宽度100px
- 游戏大厅 从基础开始(7)--绕回来细说聊天室(中间偏下)之女仆编年史2
- Go语言编程—Go语言中JSON的处理(map、struct 和 JSON字符串的相互转换)
- 中国历史上最牛气的十大豪言壮语
- Linux修改文件/文件夹权限
- cocos2dx arm64 jpg格式的不显示_如何导出CocosCreator项目供cocos2dx加载
- linux下查看文件inode,Linux下如何寻找相同文件?
- 791A.Bear and Big Brother
- 十天学会单片机和c语言编程 ppt,十天学会单片机和C语言编程笔记1
- 细粒度分类网络之WS-DAN论文阅读附代码
- 计算机考证要考PS吗
- 啊哈 , 算法 !--深度优先搜索( C语言版 )
- 老四苏-33:舰载机王 苏-33的另一个编号叫苏-27K。自然,它也是从苏-27改过来的,首飞于1987年8月17日。
- 敢不敢问导师是不是讨厌自己_您一直想知道的有关人类记忆的一切(但不敢问)...
- 硅谷安全大腕弓峰敏和卜峥加盟滴滴
- [洛谷P5329][SNOI2019]字符串(咕)
热门文章
- ubuntu+VsCode+Cmake+eigen 开发eigen应用
- 【PC工具】大神级代码注释,漂亮实用的代码注释工具代码logo工具
- 关于热插拔usb hotplug /proc/sys/kernel mdev udev busybox
- 开源工作流程引擎ccflow多人待办处理模式的详解
- Gradle 之 Android 中的应用
- Swift和Objective-C的运行时编程
- 个人学习Linux决心书
- 成为Java GC专家(5)—Java性能调优原则
- Assembly.Load()不能加载程序集的问题
- asp.net ajax 弹不出alert对话框的解决办法