吃饭容易出汗是什么原因| 孕妇感冒了可以吃什么药| 艾草有什么功效| 为什么会勃起| 尿道痛什么原因| hermes是什么意思| 怀孕初期流产有什么症状| 心率低有什么危害| bmi是什么意思啊| 囊内可见卵黄囊是什么意思| 草单斤是什么字| 五月十七是什么星座| invent是什么意思| 梦见包饺子是什么征兆| 胳膊脱臼是什么症状| 舌头白色是什么原因| 掉头发是缺什么| 日照香炉生紫烟的香炉是什么意思| 9月15号是什么日子| 电器着火用什么灭火器| refill是什么意思| 私处痒是什么原因| 穿什么衣服| 缘字五行属什么| 缪斯女神什么意思| 右侧肋骨下面是什么器官| henry是什么意思| 一个马一个并念什么| 儿童支气管炎吃什么药| 嫉妒是什么意思| 北顶娘娘庙求什么灵验| 星月菩提是什么| 羊水穿刺是检查什么的| 舍利子到底是什么| 大姨的女儿叫什么| 支气管炎是什么| led灯是什么灯| 为什么眼皮会肿| 孕妇可以吃什么感冒药| 失心疯是什么意思| 三点水一个前读什么| 大排是什么肉| xswl是什么意思| 什么不息| 十八岁属什么生肖| 植物人是什么| 杯酒释兵权是什么意思| 国家安全法属于什么法| 鹿土念什么| 补牙挂什么科| 龟头瘙痒用什么药膏| 梦见和死人一起吃饭是什么意思| 吃什么能长高| 大头儿子叫什么名字| 什么是职务| 反酸吃什么食物好| 小人得志是什么意思| 乳头突然疼痛什么原因| 奶奶过生日送什么礼物| 剖腹产后吃什么| 放电是什么意思| 于文华朱之文什么关系| au是什么意思| 企鹅代表什么生肖| 泄气的意思是什么| 免疫性疾病是什么意思| 甘油是什么油| math是什么意思| 肺结节吃什么| 皮是什么结构| 高考考生号是什么| 梦到上坟是什么意思| 5月份出生的是什么星座| 晕轮效应是什么意思| 什么方法避孕最安全有效| 看头发挂什么科| 早上跑步有什么好处| 什么是电信诈骗| 天空是什么颜色| 枸杞与菊花一起泡水喝有什么功效| classic什么意思| 想要什么样的爱| 老是犯困是什么原因| 墨菲定律什么意思| 双鱼男喜欢什么样的女生| 什么是pp材质| 频繁做噩梦是什么原因| 骨科什么意思| 什么的大自然| 缺如是什么意思| 么么是什么意思| 文旦是什么| 不孕吐的人说明什么| 螃蟹不能和什么食物一起吃| 吃皮蛋有什么好处和坏处| 天天睡觉做梦是什么原因| 反式脂肪是什么| 手指头脱皮是什么原因| 出汗发粘是什么原因| 电器火灾用什么灭火器| 枕头太低了有什么危害| 太平鸟属于什么档次| 甲亢吃什么药好| 银花有焰万家春是什么生肖| 种植牙有什么风险和后遗症| 0中间有一横是什么字体| 海底轮是什么意思| 北京的区长是什么级别| 三重一大是什么内容| 惊蛰是什么季节的节气| 凡人修仙传什么时候写的| 白兰地是什么酒| 一什么被子| 肠胃不好能吃什么水果| 老古董是什么意思| 脚后跟痛是什么原因| 什么是重心| 闭口粉刺是什么原因引起的| 腹肌不对称是什么原因| 中国最大的海是什么海| 女人每天吃什么抗衰老| 外向孤独症是什么意思| cfa是什么证书| 睾丸疼痛挂什么科| 支原体吃什么药最有效| 脉细滑是什么意思| get什么意思| 火疖子挂什么科| 大方得体是什么意思| aspirin是什么意思| 什么来什么去的四字词语| 鬼冢虎属于什么档次| 缺碘会有什么症状| 什么花粉| 直捣黄龙是什么意思| 拉绿色大便是什么原因| 多春鱼为什么全是籽| 甲状腺是什么| 拉开帷幕是什么意思| 四个一是什么字| 生蛇是什么病| 女人腰疼是什么原因引起的| 岳飞为什么必须死| 为什么得带状疱疹| 棕色皮鞋配什么颜色裤子| 红颜知己是什么| 福瑞祥和是什么意思| 可乐加味精女人喝了什么效果| 子母环是什么形状图片| 桑拓木命是什么意思| 男人额头有痣代表什么| 绿豆的功效与作用是什么| 小腿酸什么原因| 公立医院和私立医院有什么区别| 桑蚕丝被有什么好处| 为什么会抑郁| 海马用什么呼吸| 乳糖不耐受喝什么奶粉| 翻车了是什么意思| rapper什么意思| 三个马念什么| 18kgp是什么金| 妇科检查bv阳性是什么意思| 低血糖有什么危害| 2001年属蛇的是什么命| nt什么货币| 女人怀孕的最佳时间是什么时间| 回乳是什么意思| 为什么会肌酐高| 吃什么药减肥效果好| 眉毛上长痣代表什么| 明天叫什么日子| 鄙视是什么意思| 太阳穴长痘痘什么原因| 谭字五行属什么| 肌层回声均匀是什么意思| 什么是麻疹| 喝酒手麻是什么原因| 吃稀饭配什么菜好吃| 亦女念什么| 甲状腺4a是什么意思| 榨菜的原料菜叫什么| 慢阻肺是什么意思| 男性尿道痒吃什么药| 什么是碳酸饮料| 地板油是什么意思| 什么面好吃| 促什么谈什么| 怀孕初期吃什么对胎儿发育好| 十月八号是什么星座| 下面痒用什么药效果好| 静待花开什么意思| 三个马念什么| 什么样的水花| 什么的笑| 农历10月22日是什么星座| 为什么减肥不掉秤| 云南白药的保险子是起什么作用的| 大便是绿色的是什么原因| 红楼梦是一部什么小说| 2是什么数| 王五行属性是什么| 屁多且臭是什么原因| 肌酐偏高是什么意思| 脚踝后面的筋疼因为什么| 什么情况下吃救心丸| 每天拉肚子是什么原因引起的| 雷同是什么意思| 敌敌畏中毒用什么洗胃| 饮鸩止渴是什么意思| 法则是什么意思| 十一月九号是什么星座| 长孙皇后叫什么名字| 江小白加雪碧什么意思| 后脑勺出汗是什么原因| 算命先生是什么生肖| 半年抛是什么意思| 91是什么意思| 六根清净是什么意思| 老是掉头发是什么原因| tga是什么| 1997年属什么生肖| 五十岁是什么之年| 疱疹长什么样| 勇往直前是什么意思| 四肢抽搐口吐白沫是什么病| 电导率是什么意思| 仰卧起坐有什么好处| 三峡大坝什么时候建成的| 耳加贵念什么| 9月16日是什么星座| 2.8是什么星座| 小孩阑尾炎是由什么原因引起的| 为什么会长汗斑| 血栓的症状是什么| 孕妇肚子疼是什么原因| 婴儿反复发烧是什么原因引起的| 猫咪弓背是什么原因| 血压高什么原因| 胆囊结石不宜吃什么| 如初是什么意思| utc是什么| 阴雨连绵是什么意思| metoo是什么意思| 奶奶的弟弟叫什么| 处子之身是什么意思| 精分什么意思| 吃鸡蛋补什么| 乌鸡白凤丸适合什么人吃| 肝主筋的筋是指什么| 买碗有什么讲究| 花千骨什么时候上映的| 教师节送什么礼物给老师| 女生腰疼是什么原因| 土是什么颜色| hbsag阳性什么意思| 随波逐流什么意思| 上大厕拉出血是什么原因| 支原体肺炎吃什么药| 大姑姐是什么意思| 血常规查的是什么项目| 男戴观音女戴佛是什么意思| 什么是非遗| 梦到和婆婆吵架是什么意思| 百度

新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 利用与硬件无关的方法简化嵌入式系统设计:驱动程序实现

【宝马5系 2018款 530Li 领先版 M运动套装报价】宝马5系报价

作者:Giacomo Paterniani,现场应用工程师 时间:2025-08-04 来源:EEPW 收藏
编者按:本文探讨如何在项目中实现与硬件无关的驱动程序。即插即用的设计理念能够显著降低嵌入式软件或固件设计的复杂性,无论设计者的经验水平如何,都能从中受益。如果您想了解驱动程序的基本函数和嵌入式系统的软件架构,请参见文章“利用与硬件无关的方法简化嵌入式系统设计:基本知识”。

百度 第89分钟,阿根廷撤下布斯托斯,换上梅尔卡多。

简介

中,设计人员通常要编写驱动程序和固件的代码,确保所选传感器能够实现其所需的基本功能。这一过程往往耗时且繁琐。为解决这一难题,可以通过结合硬件、软件和固件的方式,采用即插即用的设计思路,从而简化传感器的选择和系统集成。与的驱动程序不仅能够让传感器集成变得更加高效,还可以作为一种通用解决方案,便于在未来的设计中重复使用。本文将以惯性测量单元(IMU)传感器为例,说明如何实现与的驱动程序,不过,这种方法同样适用于其他类型的传感器和器件。驱动程序采用C语言编写,并在一款通用微控制器上进行了测试。

驱动程序实现

附录中包含提及的所有图片和代码,可供读者查阅。

■   adis16500_rd_error_flag

附录中的图10展示了该函数的实现。该函数读取S16500_REG_DIAG_STAT寄存器中包含的错误标志,如果未发生错误,所有位都为0。可能的错误有10个,因此,该函数会返回一个S16500_ERROR_FLAGS结构,其中包含10个布尔字段,每个字段代表一个错误。该函数只读取S16500_REG_ DIAG_STAT寄存器,并使用特定错误掩码检查该寄存器的各个位,发现逻辑1时,该结构的相应字段就会设置为true。

■   adis16500_rd_temp

这是一个温度读取函数,其实现方法与加速度和陀螺仪相同(详情请见本系列第一篇文章)。读取的值用℃为单位表示。其二进制值包含在16位寄存器ADIS16500_REG_TEMP_OUT中。之后,数据将经过二进制转二进制补码的转换。得到的二进制补码值将乘以温度比例因子(单位为℃/LSB),最终得出以℃为单位的数值,并记录在作为输入传递的指针中。该函数实现可参见附录中的图9。

■   adis16500_get_ts_usec

该函数用于获取IMU的时间戳,单位为μs。其实现方法与adis16500_rd_temp函数完全相同。具体可参见附录中的图9。

■   adis16500_rd_data_cntr

该程序读取已输出的数据数量。实际上,只需读取名为ADIS16500_REG_DATA_CNTR的寄存器即可实现。当该寄存器达到最大值时,将从0重新开始。该函数的实现方式可参见附录中的图9。

■   adis16500_wr_acc_calib

该函数用于执行自定义偏移校准。设计人员通过调用该函数,可将偏移值添加到从输出数据寄存器读取的值中,从而将x、y、z校准值添加到x、y、z加速度数据中。该函数的输入是指向ADIS16500_XL_OUT类型结构的指针,该结构包含x、y和z浮点类型字段。该函数的目标是从浮点值转换为二进制补码值,再从二进制补码值转换为二进制值。所有步骤可参见附录中的图11。接下来,需要将二进制值写入偏置寄存器,例如,对于x轴,需要写入两个寄存器:ADIS16500_REG_X_ACCEL_BIAS_L(低16位)和ADIS16500_REG_X_ACCEL_BIAS_H(高16位)。y轴和z轴也是如此,各自有相应的偏置寄存器。为了检查该程序是否正确执行,放置IMU传感器时,确保z轴垂直指向天空。在这种情况下,x轴和y轴的加速度值接近0,z轴的加速度值接近–9.81 m/s2 (–g)。调用校准函数并传递一个校准结构,其中x、y和z字段均等于–9.81 m/s2,校准后的读取结果为x = –9.81;y = –9.81;z = 0,即表明校准偏移函数正常工作。

■   adis16500_wr_gyro_calib

这是与陀螺仪有关的偏移校准函数,其实现方法与加速度校准函数完全相同。区别在于,陀螺仪的校准需要按照数据手册中的说明,使用对应的陀螺仪偏移寄存器来完成。

本文着重介绍IMU传感器驱动程序,但其软件/固件结构可用于任何类型的传感器。因此,要实现对所有传感器的通用支持,只需根据传感器与微控制器之间的通信协议(如 SPI、I2C、UART 等)进行调整。传感器的初始化方式仍然有效,因为初始化阶段记录了通过通信协议进行收发的函数。

如何在项目中引入和使用驱动程序

除了关于传感器和微控制器单元(MCU)间硬件连接的基本说明外,本文还提供了相关指南,从软件和固件的角度介绍如何引入驱动程序。

1751883166803017.png

图1 项目文件夹结构

传感器驱动程序没有通用的组织结构。图1所示为建议的文件夹结构。userlib文件夹中包含所有传感器驱动程序。在本示例中,只有IMU传感器驱动程序,但如果项目包含更多传感器,组织方式基本相同。userlib中有两个文件夹,分别是include和src。include文件夹包含驱动程序的标头文件,即本例中的adis16500.h,而src中包含源文件,即adis16500.c。userlib中还有一个指定include指令的makefile,如图2所示。

1751883222161409.png

图2 userlib makefile

1751883246156667.png

图3 主makefile

图3所示为主makefile。它位于应用层,靠近main.c。该makefile包含user.mk,如图3中红色下划线所示(代码第115行)。

借助makefile (.mk),设计人员可以在应用层(比如在main.c内)引入驱动程序的接口,并且可以调用传感器驱动程序的所有公共函数。这样,应用层和传感器驱动层之间就会建立起链接。在应用层可以得知传感器的驱动程序接口(adis16500.h)。因此,在应用层,将通过上文讨论的初始化程序建立传感器驱动层和外设驱动层之间的链接。在IMU传感器的具体用例中,发送器、接收器SPI函数和系统延迟函数将在main.c文件中定义,如附录中的图2所示。这三个函数完全遵循驱动程序头文件中的原型,即附录中图3顶部所示的原型。这三个函数内部是外设驱动层提供的函数,如spiSelect、spiSend、spiReceive、spiUnselect和chThdSleepMicroseconds。因此,SPI接收器、发送器和系统延迟函数代表外设驱动层和传感器驱动层之间的链接,这些函数将分配到初始化结构中,如附录中的图2所示。以上就是在项目中引入驱动程序的整个过程。

如果要从传感器获取输出,设计人员可以使用adis16500_rd_acc和adis16500_rd_gyro部分介绍的函数。传感器读取并没有完全通用的方法,图4仅提供一个示例。

1751883298750422.png

图4 传感器输出读取示例

在此示例中,main.c中有一个无限循环,始终检查名为_adis16500_data_ready的布尔静态变量。该变量与回调函数相关,当DR引脚变为高电平时,它将切换到TRUE,这意味着已有新数据可用。在这种情况下,主函数将调用adis16500_rd_acc和adis16500_rd_gyro函数。通过全速运行IMU传感器,设计人员将能够以2 kHz的输出数据速率(ODR)获取数据。

结论

本文介绍了驱动程序功能,以及如何通过与的方法简化传感器集成。与硬件无关的驱动程序可以作为一种通用解决方案,在未来的设计中重复使用。

作者简介

Giacomo Paterniani拥有博洛尼亚大学生物医学工程学位,并在摩德纳-雷焦·艾米里亚大学获得电子工程硕士学位。毕业后,他在摩德纳-雷焦·艾米里亚大学担任了一年研究员。2022年4月,他作为研究生现场应用工程师加入ADI公司的研究生项目。2023年4月,他成为FAE。


评论


相关推荐

技术专区

关闭
ca153是什么检查项目 当兵苦到什么程度 2022年属虎的是什么命 什么是低血糖 你的书包里有什么英文
油麦菜不能和什么一起吃 什么泡水喝能降血压 jnby是什么牌子 什么什么的玉米 连城诀为什么不火
你是什么意思 韩世忠为什么不救岳飞 血小板减少有什么危害 penis什么意思 护理专业是干什么的
厄瓜多尔说什么语言 来龙去脉指什么生肖 血压高要吃什么蔬菜能降血压 想飞上天和太阳肩并肩是什么歌 七月生日是什么星座
胳膊出汗是什么原因hcv8jop2ns1r.cn 怀孕什么时候可以做b超hcv8jop9ns2r.cn 有冬瓜西瓜南瓜为什么没有北瓜hcv7jop5ns2r.cn lsp是什么意思hcv7jop7ns2r.cn 最不干净的动物是什么生肖hcv8jop6ns2r.cn
金刚菩提是什么植物的种子1949doufunao.com 尿路感染吃什么药效果最好hcv9jop5ns6r.cn 为什么一动就出汗hcv7jop6ns9r.cn 6.25什么星座hcv8jop3ns0r.cn 巴洛特利为什么叫巴神hcv8jop7ns8r.cn
脾胃虚弱吃什么蔬菜hcv9jop4ns1r.cn 白砂糖是什么糖1949doufunao.com 红疮狼斑是什么引起的cj623037.com 泰山石敢当是什么意思hcv9jop3ns8r.cn 拜读是什么意思hcv8jop0ns0r.cn
什么的hcv9jop6ns3r.cn 梦到死人了有什么兆头cj623037.com 前列腺炎是什么症状hcv8jop0ns8r.cn 珂字五行属什么hcv7jop6ns0r.cn 手指缝里长水泡还痒是什么原因hcv9jop1ns6r.cn
百度