当前位置: 首页 >  业内资讯  >   >  正文

一个实用的单片机软件框架

  • 2023-08-06 21:28:50 来源:面包芯语

使用说明

完整的代码可以参考工程文件,系统开发平台如下:


(资料图)

MCU:STM32F401RET6

IDE:IAR 7.4或者Keil MDK 4.72A

任务初始化及任务轮询管理(module)

使用此模块前需要系统提供滴答定时器,用于驱动任务轮询作业。(参考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)

适用于在线调试、参数配置等(参考使用cli_task.c),用户可以通过串口输出命令行控制设备行为、查询设备状态等功能。

命令格式

cli支持的命令行格式如下:

< param1> < param2> < paramn> < \r\n >,< param1>, < param2>, < paramn>, < \r\n >

每行命令包含一个命令名称+命令参数(可选),命令名称及参数可以通过空格或者","进行分隔。

系统默认命令

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模块在休眠前会统计出各个模块会返回最小允许休眠时长,并以最小休眠时长为单位进行休眠。

如何适配

使用前需要通过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);

blink模块

具有闪烁特性(led, motor, buzzer)的设备(led, motor, buzzer)管理

使用步骤:

或者通过"module"模块的任务注册来实现

task_register("blink",blink_dev_process,50);//50ms轮询1次

LED驱动

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驱动大全》

标签:

最新推荐

一个实用的单片机软件框架

来源:https: gitee com moluo-tech CodeBrick介绍一种无OS的MCU实用

115网盘内容怎么下载?_115网盘怎么下载东西

1、2、登录后可以看到上传的文件,移动鼠标将文件取出,就会出现下图所

涤纶短纤(涤纶短纤维行情)

涤纶短纤涤纶短纤”染石、涤纶涤丝””涤纶、涤纶纺丝”三大纤维”产品

广岛原爆78周年 市长吁日本加入禁核武条约

今日是日本广岛原爆78周年,广岛市和平纪念公园有悼念仪式,大约5万人

冥王的宠妃全文阅读(穿越小说-冥王的宠妃简介)

HELLO,我是智能手机网小溪,我来为大家解答以上问题。冥王的宠妃全文

14支红十字救援队已成功转移涿州受灾群众1475名

14支红十字救援队已成功转移涿州受灾群众1475名---记者6日从中国红十字

陕西吴堡县通报黄河大桥护栏倒塌事件:已成立调查组

据吴堡新闻发布消息,8月4日下午,陕西省榆林市吴堡县出现雷雨大风天气

系列稳增长政策提振市场信心 大宗商品供需更趋均衡

央视网消息:中国物流与采购联合会今天(8月5日)发布7月份中国大宗商

中国银行召开支持民营企业发展座谈会

据证券时报,中国银行4日在北京召开支持民营企业发展座谈会,着力为民

违法所得超4.5亿!这家银行原行长犯六宗大罪,法院判了

一位城商行高管的违法犯罪行为悄然曝光!裁判文书网日前披露的一则裁判

跳水世界杯总决赛:中国队再添两金一银

正在柏林举行的2023年世界泳联跳水世界杯超级总决赛举行了男子3米板和

河北涿州迅速开展灾后清理与物资转运工作

每经AI快讯,受洪涝灾害影响,河北涿州部分地区交通受阻,人们的生产生

消费复苏带动板块逐步回暖 家电消费呈现这些特点

今年上半年,随着居民消费支出逐步恢复,消费板块也开始呈现回暖迹象。

四川贷款同比增速连续11月居全国前三位 融资总量保持稳定增长

四川贷款同比增速连续11个月居全国前三位。8月4日,记者从中国人民银行

服务进出口总额同比增8.5%

中国服务外包研究中心副研究员郑伟对《经济参考报》记者表示,上半年我

皇马的“紧急解决方案”:切尔西头号前锋目标是皇马,曼联被告知

切尔西的头号前锋目标是欧洲豪门皇家马德里的“紧急解决方案”,而曼联

扩散提醒!洪涝灾区卫生与消毒指引→

8月4日,国家疾控局发布洪涝灾区环境卫生处置与预防性消毒指引(2023版

解析“大众+小鹏”:产业链科创板公司回应合作进展 主机大厂布局中国背后|聚焦

《科创板日报》8月5日讯(记者余佳欣实习记者黄嘉文)小鹏汽车与大众汽

华创证券:乳业量价空间广阔 布局价值凸显

智通财经APP获悉,华创证券发布研报称,量增仍有空间且功能性尚在初期

亚马逊中国:向京津冀暴雨洪涝灾害受灾地区提供援助

亚马逊中国:向京津冀暴雨洪涝灾害受灾地区提供援助:8月5日消息,亚马

门牌”扫一扫 方便真不少

小小门牌,有大作用。如今,在张店区车站街道辖区内,每栋楼的楼体上,

oa办公系统包括哪些(OA办公系统是什么)

1、OA办公系统是什么是前几年研究比较热的一个问题,那时候互联网刚普

郑州市气象台发布暴雨黄色预警信号

大河网讯(记者莫韶华)郑州市气象台2023年08月05日14时40分发布暴雨黄

百年矿山重披“绿装”

8月4日,冷水江市锡矿山,经过整治的炭家湾片区绿草如茵,空气清新。近

大家为什么爱花花

“跟着花花看大运会”“花花带你游成都”……大运会期间,成都大熊猫繁

理想正在打造一条空气悬架的“理链”

作者|JimmyMa邮箱|majiming@pingwest com空气悬架现在已经不是顶级豪

真正祛斑最有效产品排行榜,揭晓美白祛斑的产品哪个好

十女九斑,相信这是很多女性都要面对的事实,再加上肌肤暗沉无光、毛孔

可怕,6岁男孩郊游后高烧10多天!在肚脐找到……

不久前福建厦门一男童参加野外郊游后竟开始反复高烧10多天身上多处皮疹

中泰证券:8月4日融券净卖出5.96万股,连续3日累计净卖出40.08万股

8月4日,中泰证券(600918)融资买入1 75亿元,融资偿还1 97亿元,融资

南京高科等部分房企融资利率低于3%

近日,多家上市房企披露融资动向,南京高科等部分房企融资利率低于3%,

亚泰集团:融资余额4.97亿元,创近一年新高(08-04)

2023年8月4日亚泰集团融资余额4 97亿元,创近一年新高

百度云账号登录会不会看见我的百度 百度云账号登录

你们好,最近0471房产发现有诸多的对于百度云账号登录会不会看见我的百

【世界看大运】坦桑尼亚运动员:在成都大运会拥抱职业生涯新起点 能向世界介绍自己很幸运!

8月的成都,大运会圣火熊熊燃烧,来自世界各地的青年运动员们在大运会

保定市城管执法局项目中心赶赴涿州开展小区地下室积水抽排工作

8月4日,接到保定市城管执法局要求支援涿州防汛抢修的紧急通知后,上午

孙柏涛:坐“冷板凳”攀地震科技高峰,赴“最前线”践防震减灾使命

中新网北京8月4日电 题:孙柏涛:坐“冷板凳”攀地震科技高峰,赴

质朴无华的木色装饰自然成了当季最流行的时尚风潮

很多人对质朴无华的木色装饰自然成了当季最流行的时尚风潮不是很了解那

凤祭传小说(凤祭传)

大家好,小乐来为大家解答以上的问题。凤祭传小说,凤祭传这个很多人还

2022年01月06日整理发布:sql语句between包括边界值吗

在sqlServer中,sql语句“介于”和“不介于”之间,它包括边界值,但不

痛心!女童半夜溺亡,只因床边放了个……

夏日炎炎,又正值暑假游泳、戏水是小朋友们最喜爱的活动之一但是家长们

北京房山蓝天救援队:征求家属意见,尊重两名牺牲队员初心,不必捐款

8月4日,北京市房山区蓝天救援队发布关于给牺牲救援队员王宏春、刘建民

等待多年,顺义这一小区居民陆续领到“大红本”!

等待多年,顺义这一小区居民陆续领到“大红本”!,大红,顺义,房本,小区

中国联通、太平洋等14股获特大单资金净流入超2亿元

证券时报网讯,Choice统计显示,8月4日,沪深两市全天特大单净买入18 6

知名演员住院半月花费20万?官方回应

据了解,事情的起因是李立群在杭州居住时患上了带状疱疹,因为病情较重

宝马i4电动轿车将比M4轿跑车更快

宝马计划使电动i4车型比M4轿跑车更强大,更快:轿车将从一对电动机中获

亚瑟王2游戏(亚瑟王2)

当前大家对于亚瑟王2都是颇为感兴趣的,大家都想要了解一下亚瑟王2,那

2023沃尔沃汽车驾享体验日启动在即石家庄站火热招募中!

8月12日,“驾域-2023沃尔沃汽车驾享体验日”正式开启。在这里,您可以

女人再懒,也别穿牛仔裤、运动鞋出门!夏天换成这样穿多洋气好看

俗话说“没有丑女人,就懒女人”,但是大家一定要答应我,你在也不要懒

“给所有病人开中药”是“权力病”发作

7月7日,网传河南洛阳伊川县水寨卫生院院长在开会时,要求医生多给病人

看深夜星空下的战机 致敬幕后英雄

夏日深夜,繁星满天,南部战区空军航空兵某旅一次跨昼夜飞行后,喧闹的

适合夏天吃的盐水毛豆来了,只要注意这四点,成品翠绿不发黄,赞

夏日生活打卡季 我是Allie,美好的一天从营养早餐开始,吃好早餐,一

X 广告
X 广告

精彩放送

《雷雨》再登曹禺剧场,找到1934年原典的诗意与悲悯

国信证券:预计公司资管业务还有很大的发展空间

涉嫌承揽工程诈骗,榆林榆阳警方征集马治彪、邵广雄犯罪线索

重庆水泵各车间、处室全力以赴顺利实现“双过半”目标

暖宫孕子片有副作用吗?

“电”量满格跑出加速度!聚焦长春汽博会上的新能源车(一)

紧密型城市医疗集团是什么?如何建设?一起来看!

河北新增城乡残疾人就业17098人

小米手机怎么打开硬件检测

凤凰早报|耶伦“加长版”北京行:2天谈了10小时;郑州“缩水版”悬赏:1000万给了5000

“全球最热一天”率刷新 动物园水豚宝宝忙避暑

文白将军的个人资料 文白

《长风渡》戏外更热闹,张昊唯直播晒白敬亭送的望都F4T恤

中金:市场积极因素正在积累

立邦亮相2023中国建博会(广州),携手行业伙伴探索未来共生

“包办入学”不可轻信 遇上这样的“能人”务必小心

湖北五峰山体滑坡已救出7人其中1人无生命体征仍有7人失联:湖北省宜昌市举行五峰7·8山体滑坡灾害新闻发布会。发布会上介绍

新能源汽车板块突然爆发!是反转还是反弹?基金经理重磅研判!

盛世中华 何以中国 | 解锁非遗的传承密码

23078期双色球晒票欣赏,6张小票“打头炮”,生活更要砥砺前行

最受4岁小孩欢迎的生日礼物你该送什么

本周创业板指累跌超2%,万亿成交昙花一现,回调中量能逐步萎缩

“神兽”出笼 “饲养员”快收下这份暑假安全指南

强对流天气黄色预警:13省市部分地区将有短时强降水

电影《巨人》入围第76届洛迦诺电影节Fuori Concorso单元

奔跑吧2为啥没有迪丽热巴,被曝因鹿晗公布恋情选择退出

系列-2-下集

京媒:国安本赛季半程15场联赛,使用15套首发阵容

庐山云雾茶特级

全民k歌golden(锦零全民k歌)

聚焦兰洽会|兰州市共签约招商引资项目117个、签约总额893亿元

证监会有关部门负责人就公募基金费率改革答记者问

传道授业解惑 妙手仁心医患——东乡县妇幼保健院医联体建设显成效

警惕市场情绪太乐观!空头“认命”出逃,美股上涨推力又少了一个

地址新最(sexinse board新地址)

7月7日基金净值:信澳领先智选混合最新净值0.7183,跌0.91%

什么是齿轮的压力角 什么是齿轮模数

供需失衡业绩失速 东方海外国际(00316)遭遇“退潮”时刻?

舌尖上的阿坝州(四川省阿坝州小吃美食介绍)

AYANEO AIR 1S 掌机 7 月 9 日发布:R7 7840U + OLED 屏

顺丰控股:预计上半年净利润同比增长60%-68%

开车过隧道,一不小心就“撞杆”!上海市交通委说这样解决

《老龄经济学》:将人口老龄化问题纳入经济学框架

天康生物:上半年生猪销售收入21.42亿元 同比增长62.4%

超越丰田“神车”,Model Y成全球最畅销车型,特斯拉降价再次补刀日系车企

港股三大指数继续下挫!新能源、消费股等普跌

外交部:敦促日方不要把机构报告当作排海“通行证”

天津2023中考其他考生志愿填报规定(指标生+特长生+创新班)

医是医二是二第二季(医是医二是二)

“七七事变”86周年!勿忘国耻,吾辈自强!

Copyright ©  2015-2022 北极律师网版权所有  备案号:浙ICP备2022016517号-19   联系邮箱:514 676 113@qq.com