完整的代码可以参考工程文件,系统开发平台如下:
(资料图)
MCU:STM32F401RET6
IDE:IAR 7.4或者Keil MDK 4.72A
使用此模块前需要系统提供滴答定时器,用于驱动任务轮询作业。(参考platform.c)
//定时器中断(提供系统滴答)voidSysTick_Handler(void){systick_increase(SYS_TICK_INTERVAL);//增加系统节拍}注册初始化入口及任务(参考自key_task.c)
staticvoidkey_init(void){/*dosomething*/}staticvoidkey_scan(void){/*dosomething*/}module_init("key",key_init);//注册按键初始化接口driver_register("key",key_scan,20);//注册按键任务(20ms轮询1次)适用于在线调试、参数配置等(参考使用cli_task.c),用户可以通过串口输出命令行控制设备行为、查询设备状态等功能。
cli支持的命令行格式如下:
每行命令包含一个命令名称+命令参数(可选),命令名称及参数可以通过空格或者","进行分隔。
cli系统自带了2条默认命令,分别是"?"与"help"命令,输入他们可以列出当前系统包含的命令列表,如下所示:
?-aliasfor"help"help-listallcommand.pm-Lowpowercontrolcommandreset-resetsystemsysinfo-showsysteminfomation.完整的例子可以参考cli_task.c.
staticcli_obj_tcli;/*命令管理器对象*//**@brief命令行任务初始化*@returnnone*/staticvoidcli_task_init(void){cli_port_tp={tty.write,tty.read};/*读写接口*/cli_init(&cli,&p);/*初始化命令行对象*/cli_enable(&cli);cli_exec_cmd(&cli,"sysinfo");/*显示系统信息*/}/**@brief命令行任务处理*@returnnone*/staticvoidcli_task_process(void){cli_process(&cli);}module_init("cli",cli_task_init);task_register("cli",cli_task_process,10);/*注册命令行任务*/以复位命令为例(参考cmd_devinfo.c):
#include"cli.h"//.../**@brief复位命令*/intdo_cmd_reset(structcli_obj*o,intargc,char*argv[]){NVIC_SystemReset();return0;}cmd_register("reset",do_cmd_reset,"resetsystem");控制间歇运行,降低系统功耗。其基本的工作原理是通过轮询系统中各个模块是否可以允许系统进入低功耗。实际上这是一种判决机制,所有模块都具有有票否决权,即只要有一个模块不允许休眠,那么系统就不会进入休眠状态。pm模块在休眠前会统计出各个模块会返回最小允许休眠时长,并以最小休眠时长为单位进行休眠。
使用前需要通过pm_init进行初始化适配,并提供当前系统允许的最大休眠时间,进入休眠的函数接口,基本的接口定义如下:
/*低功耗适配器---------------------------------------------------------*/typedefstruct{/***@brief系统最大休眠时长(ms)*/unsignedintmax_sleep_time;/***@brief进入休眠状态*@param[in]time-期待休眠时长(ms)*@retval实际休眠时长*@note休眠之后需要考虑两件事情,1个是需要定时起来给喂看门狗,否则会在休眠*期间发送重启.另外一件事情是需要补偿休眠时间给系统滴答时钟,否则会*造成时间不准。*/unsignedint(*goto_sleep)(unsignedinttime);}pm_adapter_t;voidpm_init(constpm_adapter_t*adt);voidpm_enable(void);voidpm_disable(void);voidpm_process(void);完成的使用例子可以参考platform-lowpower.c,默认情况下是禁用低功耗功能的,读者可以去除工程中原来不带低功耗版本的platform.c,并加入platform-lowpower.c文件进行编译即可使用。
以按键扫描为例,正常情况下,如果按键没有按下,那么系统休眠可以进入休眠状态,对按键功能是没有影响的。如果按键按下时,那么系统需要定时唤醒并轮询按键任务。
所以在一个低功耗系统下,为了不影响按键实时性需要处理好两个事情:
对于第一种情况,将按键配置为边沿中断唤醒即可,以STM32F4为例(参考key_task.c),它支持外部中断唤醒功能。
/**@brief按键io初始化*PC0->key;*@returnnone*/staticvoidkey_io_init(void){/*EnableGPIOAclock*/RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);gpio_conf(GPIOC,GPIO_Mode_IN,GPIO_PuPd_UP,GPIO_Pin_0);//低功耗模式下,为了能够检测到按键,配置为中断唤醒RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC,EXTI_PinSource0);exti_conf(EXTI_Line0,EXTI_Trigger_Falling,ENABLE);nvic_conf(EXTI0_IRQn,0x0F,0x0F);key_create(&key,readkey,key_event);/*创建按键*/}对于第二种情况,可以通过pm_dev_register来处理,当系统请求休眠时,如果此时按键按下,则返回下次唤醒时间即可,如下面的例子所示。
//参考key_task.c#include"pm.h"/**@brief休眠通知*/staticunsignedintkey_sleep_notify(void){returnkey_busy(&key)||readkey()?20:0;/*非空闲时20ms要唤醒1次*/}pm_dev_register("key",NULL,key_sleep_notify,NULL);具有闪烁特性(led, motor, buzzer)的设备(led, motor, buzzer)管理
使用步骤:
或者通过"module"模块的任务注册来实现
task_register("blink",blink_dev_process,50);//50ms轮询1次blink_dev_tled;//定义led设备/**@brief红色LED控制(GPIOA.8)*@param[in]on-亮灭控制*/staticvoidled_ctrl(inton){if(on)GPIOA->ODR|=(1<<8);elseGPIOA->ODR&=~(1<<8);}/**@briefled初始化程序*/voidled_init(void){led_io_init(void);//ledio初始化blink_dev_create(&led,led_ctrl);//创建led设备blink_dev_ctrl(&led,50,100,0);//快闪(50ms亮,100ms灭)}类似blink模块,使用之前有两个注意事项:
key_tkey;//定义按键管理器/**@brief按键事件*@param[in]type-按键类型(KEY_PRESS,KEY_LONG_DOWN,KEY_LONG_UP)*@param[in]duration-长按持续时间*/voidkey_event(inttype,unsignedintduration){if(type==KEY_PRESS){//短按}elseif(type==KEY_LONG_DOWN){//长按}}//读取键值(假设按键输出口为STM32MCUPA8)intread_key(void){returnGPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)==Bit_RESET;}/**@brief按键初始化*/voidkey_init(void){//打开GPIO时钟RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);//配置成输入模式gpio_conf(GPIOA,GPIO_Mode_IN,GPIO_PuPd_NOPULL,GPIO_Pin_8);//创建1个按键key_create(&key,read_key,key_event);}本文来源网络,免费传达知识,版权归原作者所有。如涉及作品版权问题,请联系我进行删除。
《嵌入式Linux驱动大全》
标签:
上一篇 : 115网盘内容怎么下载?_115网盘怎么下载东西
下一篇 : 最后一页
最新推荐
来源:https: gitee com moluo-tech CodeBrick介绍一种无OS的MCU实用
1、2、登录后可以看到上传的文件,移动鼠标将文件取出,就会出现下图所
涤纶短纤涤纶短纤”染石、涤纶涤丝””涤纶、涤纶纺丝”三大纤维”产品
今日是日本广岛原爆78周年,广岛市和平纪念公园有悼念仪式,大约5万人
HELLO,我是智能手机网小溪,我来为大家解答以上问题。冥王的宠妃全文
14支红十字救援队已成功转移涿州受灾群众1475名---记者6日从中国红十字
据吴堡新闻发布消息,8月4日下午,陕西省榆林市吴堡县出现雷雨大风天气
央视网消息:中国物流与采购联合会今天(8月5日)发布7月份中国大宗商
据证券时报,中国银行4日在北京召开支持民营企业发展座谈会,着力为民
一位城商行高管的违法犯罪行为悄然曝光!裁判文书网日前披露的一则裁判
正在柏林举行的2023年世界泳联跳水世界杯超级总决赛举行了男子3米板和
每经AI快讯,受洪涝灾害影响,河北涿州部分地区交通受阻,人们的生产生
今年上半年,随着居民消费支出逐步恢复,消费板块也开始呈现回暖迹象。
四川贷款同比增速连续11个月居全国前三位。8月4日,记者从中国人民银行
中国服务外包研究中心副研究员郑伟对《经济参考报》记者表示,上半年我
切尔西的头号前锋目标是欧洲豪门皇家马德里的“紧急解决方案”,而曼联
8月4日,国家疾控局发布洪涝灾区环境卫生处置与预防性消毒指引(2023版
《科创板日报》8月5日讯(记者余佳欣实习记者黄嘉文)小鹏汽车与大众汽
智通财经APP获悉,华创证券发布研报称,量增仍有空间且功能性尚在初期
亚马逊中国:向京津冀暴雨洪涝灾害受灾地区提供援助:8月5日消息,亚马
小小门牌,有大作用。如今,在张店区车站街道辖区内,每栋楼的楼体上,
1、OA办公系统是什么是前几年研究比较热的一个问题,那时候互联网刚普
大河网讯(记者莫韶华)郑州市气象台2023年08月05日14时40分发布暴雨黄
8月4日,冷水江市锡矿山,经过整治的炭家湾片区绿草如茵,空气清新。近
“跟着花花看大运会”“花花带你游成都”……大运会期间,成都大熊猫繁
作者|JimmyMa邮箱|majiming@pingwest com空气悬架现在已经不是顶级豪
十女九斑,相信这是很多女性都要面对的事实,再加上肌肤暗沉无光、毛孔
不久前福建厦门一男童参加野外郊游后竟开始反复高烧10多天身上多处皮疹
8月4日,中泰证券(600918)融资买入1 75亿元,融资偿还1 97亿元,融资
近日,多家上市房企披露融资动向,南京高科等部分房企融资利率低于3%,
2023年8月4日亚泰集团融资余额4 97亿元,创近一年新高
你们好,最近0471房产发现有诸多的对于百度云账号登录会不会看见我的百
8月的成都,大运会圣火熊熊燃烧,来自世界各地的青年运动员们在大运会
8月4日,接到保定市城管执法局要求支援涿州防汛抢修的紧急通知后,上午
中新网北京8月4日电 题:孙柏涛:坐“冷板凳”攀地震科技高峰,赴
很多人对质朴无华的木色装饰自然成了当季最流行的时尚风潮不是很了解那
大家好,小乐来为大家解答以上的问题。凤祭传小说,凤祭传这个很多人还
在sqlServer中,sql语句“介于”和“不介于”之间,它包括边界值,但不
夏日炎炎,又正值暑假游泳、戏水是小朋友们最喜爱的活动之一但是家长们
8月4日,北京市房山区蓝天救援队发布关于给牺牲救援队员王宏春、刘建民
等待多年,顺义这一小区居民陆续领到“大红本”!,大红,顺义,房本,小区
证券时报网讯,Choice统计显示,8月4日,沪深两市全天特大单净买入18 6
据了解,事情的起因是李立群在杭州居住时患上了带状疱疹,因为病情较重
宝马计划使电动i4车型比M4轿跑车更强大,更快:轿车将从一对电动机中获
当前大家对于亚瑟王2都是颇为感兴趣的,大家都想要了解一下亚瑟王2,那
8月12日,“驾域-2023沃尔沃汽车驾享体验日”正式开启。在这里,您可以
俗话说“没有丑女人,就懒女人”,但是大家一定要答应我,你在也不要懒
7月7日,网传河南洛阳伊川县水寨卫生院院长在开会时,要求医生多给病人
夏日深夜,繁星满天,南部战区空军航空兵某旅一次跨昼夜飞行后,喧闹的
夏日生活打卡季 我是Allie,美好的一天从营养早餐开始,吃好早餐,一
一张陌生人的图片“活化”成为视频? 深度合成正瓦解“眼见为实”
一张陌生人的图片“活化”成为视频? 深度合成正瓦解“眼见为实”
凤凰早报|耶伦“加长版”北京行:2天谈了10小时;郑州“缩水版”悬赏:1000万给了5000
立邦亮相2023中国建博会(广州),携手行业伙伴探索未来共生
湖北五峰山体滑坡已救出7人其中1人无生命体征仍有7人失联:湖北省宜昌市举行五峰7·8山体滑坡灾害新闻发布会。发布会上介绍
23078期双色球晒票欣赏,6张小票“打头炮”,生活更要砥砺前行
本周创业板指累跌超2%,万亿成交昙花一现,回调中量能逐步萎缩
电影《巨人》入围第76届洛迦诺电影节Fuori Concorso单元
聚焦兰洽会|兰州市共签约招商引资项目117个、签约总额893亿元
传道授业解惑 妙手仁心医患——东乡县妇幼保健院医联体建设显成效
警惕市场情绪太乐观!空头“认命”出逃,美股上涨推力又少了一个
7月7日基金净值:信澳领先智选混合最新净值0.7183,跌0.91%
供需失衡业绩失速 东方海外国际(00316)遭遇“退潮”时刻?
AYANEO AIR 1S 掌机 7 月 9 日发布:R7 7840U + OLED 屏
天康生物:上半年生猪销售收入21.42亿元 同比增长62.4%
超越丰田“神车”,Model Y成全球最畅销车型,特斯拉降价再次补刀日系车企
Copyright © 2015-2022 北极律师网版权所有 备案号:浙ICP备2022016517号-19 联系邮箱:514 676 113@qq.com