中元节是什么时候| 什么海没有鱼| 血沉是什么意思| 卵泡生成素高是什么原因| 跌打损伤挂什么科| 什么是胰岛素抵抗| 澳门区花是什么花| 大便呈绿色是什么原因| 脱敏什么意思| 撕裂性骨折是什么意思| 宝宝老是摇头是什么原因| 蜱虫咬了什么症状| 什么是福报| gb10769是什么标准| 为什么会长寻常疣| 山竹有什么功效| 上寒下热体质吃什么中成药| 抽搐是什么原因引起的| 护士最高职称是什么| 什么万| 拐子是什么意思| 肠腔积气是什么原因| 内分泌科属于什么科| 咬肌疼是什么原因| 孩子咳嗽吃什么饭菜好| 梦到自己的妈妈死了是什么意思| 骁字五行属什么| 宠物邮寄用什么快递| 头皮挂什么科| 为什么会长麦粒肿| 人工虎骨粉是什么做的| 一什么白菜| 吕布属什么生肖| 太阳穴凹陷是什么原因| 大便拉水是什么原因| 助产学是干什么的| 请婚假需要什么材料| 4.7号是什么星座| 野格是什么酒| 软笔书法是什么| 左腿发麻是什么病征兆| 痰栓是什么意思| 血痰是什么原因| 泪河高度说明什么| 孩子脾虚内热大便干吃什么药| 挂急诊和门诊有什么区别| 内分泌紊乱是什么意思| 夏季吃什么菜| 中午适合吃什么| 三马念什么| 低血钾吃什么补上来的快| 热菜是什么梗| 敬谢不敏是什么意思| 品质是什么| 宫颈管短是什么意思| 早上6点是什么时辰| 上呼吸道感染用什么药| 天是什么结构的字| 黑米和什么一起搭配煮粥最佳| 烟酸是什么| 喝完酒胃疼吃什么药| 额头上长痘是因为什么| 梦见猪肉是什么意思| 都有什么血型| 什么是黄褐斑| 做b超挂什么科| 93年属相是什么| 咳嗽吃什么药好| 砍单是什么意思| 咖啡喝了有什么好处| 苯甲酸钠是什么东西| 痛风吃什么中药最有效| 朝什么暮什么| 土中金是什么生肖| 肝肾阴虚吃什么中成药| 盐是什么味道| 吃什么有助于睡眠效果好| 男人补锌有什么好处| 降甘油三酯吃什么食物最好| 七月十三日是什么日子| 3885是什么罩杯| 意念是什么意思| 肠道易激惹综合征的症状是什么| 井底之蛙的寓意是什么| 建档立卡是什么意思| 抗心磷脂抗体是什么意思| 青海古代叫什么| 白带有点黄是什么原因| 切除子宫有什么危害| 孕妇吸二手烟对胎儿有什么影响| 老公梦见老婆出轨是什么意思| 三鹿奶粉现在叫什么| 人中龙凤下一句是什么| 来月经喝酒有什么影响| 成人大便绿色是什么原因| 口苦吃什么药| 游离甲状腺素是什么| 一什么知什么| 白化病是什么原因引起的| 轻微手足口病吃什么药| 飞的最高的鸟是什么鸟| 区团委书记是什么级别| 什么样的牙齿需要矫正| 多梦吃什么药效果最好| 怀孕不到一个月有什么症状| ost是什么意思| 梦到离婚是什么征兆| 胎盘厚有什么影响| 缸垫呲了什么症状| 双鱼女和什么星座最配| 爱的反义词是什么| 55年属什么| 查验是什么意思| 阴道炎用什么药效果最好| 看睾丸去医院挂什么科| NF什么意思| ccu病房是什么意思| 丝瓜不可以和什么一起吃| 胃阳不足吃什么中成药| 下午三点到四点是什么时辰| 胸部中间痛什么原因引起的| 92年是什么年| 超能力是什么意思| 海绵体是什么| 尿多是什么原因女性| 水代表什么数字| 装垃圾的工具叫什么| 流氓是什么意思| 高血压是什么意思| 可见一什么| 小病不治下一句是什么| 吃什么变白| 剖腹产第三天可以吃什么| 对别人竖中指是什么意思| 喉咙痛什么原因| 什么粥最养胃健脾| 梦见买床是什么意思| 脑梗挂号挂什么科室| 大学211和985是什么意思| 荷兰豆为什么叫荷兰豆| 病毒五项检查的是什么| 乳糖是什么糖| apc是什么牌子| 办理住院手续需要带什么证件| 陆地上最重的动物是什么| 椒盐是什么调料| 地西泮又叫什么| 茧子是什么意思| 聚酯纤维是什么材料| 1900年属什么生肖| 什么的跳舞| 脚干脚裂用什么药| 蒟蒻是什么| 余田是什么字| 什么是水印照片| 看甲沟炎挂什么科| 标准差是什么意思| 猫舔人是什么意思| 身体怕热是什么原因| 什么叫双向情感障碍| 什么是便血| 上火吃什么食物| 什么水果糖分最高| 八仙过海指什么生肖| 科级干部是什么级别| 1.23是什么星座| 儿童查微量元素挂什么科| 智齿旁边的牙齿叫什么| abo溶血症是什么| 三皇五帝是什么时期| 专员是什么级别| 南京为什么那么多梧桐树| 黄瓜不能和什么食物一起吃| 耳朵痒痒用什么药| 关节炎用什么药最好| 肠粉为什么叫肠粉| 什么时候不能喷芸苔素| 惊悸的意思是什么| 绿豆什么时候成熟| 外阴痒用什么洗| 五蕴皆空是什么意思| 喝水呛咳是什么原因| 肚脐左侧是什么器官| 口述是什么意思| 三阳开泰是什么生肖| 珍珠是用什么做的| 儿茶酚胺是什么| 下巴底下长痘痘是什么原因| 什么动物最安静| 海蜇长什么样子| 做春梦是什么原因| 低血压适合吃什么食物| 九点是什么时辰| 熬夜对心脏有什么影响| 右眼袋跳动是什么原因| 肚子绞痛吃什么药| 4月1日什么星座| 感冒为什么不能吃鸡蛋| 仰角是什么意思| 看腋下挂什么科| 中国精神是指什么| 海蜇是什么| 宫外孕做什么手术| 舌头发白什么原因| 女人裹脚是从什么时候开始的| 吃什么水果能壮阳| 稀疏是什么意思| 龟头炎吃什么药| 芈怎么读什么意思| 女性阴毛变白是什么原因| 什么是海藻糖| 高考都考什么| 什么叫耳石症| 癔病是一种什么病| 发烧拉稀是什么原因| 肾绞痛可能由于什么原因引起| 梭子蟹什么时候上市| 四肢肌力5级什么意思| 智齿长什么样| 前列腺不能吃什么食物| winner是什么意思| 为什么头朝西睡觉不好| 2月19是什么星座| 很无奈是什么意思| 点痣后要注意什么| 午安是什么意思| 为什么会突然长痣| 什么时候开始| 树冠是什么| 非农业户口是什么意思| 相什么成趣| 尿道流脓吃什么药| 智齿旁边的牙齿叫什么| 干什么最赚钱| 近视和远视有什么区别| 有偿是什么意思| ab型血生的孩子是什么血型| 甲骨文是写在什么上面的| 什么是生僻字| 网恋是什么意思| 舌头伸不出来是什么原因| 三福是什么| 十二指肠球炎是什么病| 肾炎康复片主要是治疗什么| Polo什么意思| 为什么晚上不能倒垃圾| 足贴为什么变黑出油| 牙痛用什么药止痛快| 玫瑰糠疹吃什么药最有效| 出去旅游需要带什么| 凤毛麟角是什么意思| 后遗症是什么意思| 头爱出汗是什么原因| 吃了西瓜不能吃什么| 羊后马前对是什么生肖| 什么情况下要打破伤风针| 男人更年期在什么年龄| 长的像蛇的鱼是什么鱼| 大腿内侧肌肉叫什么| 胎毒是什么| 心直口快是什么意思| 三高人群适合吃什么水果| 前列腺增生有什么危害| 梦见打死猫有什么预兆| 百度

新闻中心

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

我首支维和直升机分队高标准通过联非达团评估

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

百度 要摆脱这一处境,我国经济发展就不能停留在过去的老套路上,而是要加快转变经济发展方式,在提质增效上苦下功夫。

简介

中,设计人员通常要编写驱动程序和固件的代码,确保所选传感器能够实现其所需的基本功能。这一过程往往耗时且繁琐。为解决这一难题,可以通过结合硬件、软件和固件的方式,采用即插即用的设计思路,从而简化传感器的选择和系统集成。与的驱动程序不仅能够让传感器集成变得更加高效,还可以作为一种通用解决方案,便于在未来的设计中重复使用。本文将以惯性测量单元(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。


评论


相关推荐

技术专区

关闭
折耳根是什么 生牛乳是什么意思 医保定点是什么意思 10周年结婚是什么婚 忌动土是什么意思
子宫肌瘤吃什么药好 兔死狗烹是什么生肖 吃完油炸的东西后吃什么化解 孕酮低是什么原因造成的 扁桃体经常发炎是什么原因
申时是什么生肖 黑醋是什么醋 什么话什么说 a216是什么材质 大腿肿胀是什么原因
无疾而终是什么意思 金命适合什么颜色 基底是什么意思 中国人的祖先是什么人 高甘油三酯血症是什么意思
酒后大量出虚汗什么原因chuanglingweilai.com 相形见拙什么意思hcv9jop6ns6r.cn 北京的区长是什么级别0735v.com 1月10号什么星座inbungee.com 眩晕是什么原因hcv9jop3ns8r.cn
编程属于什么专业hcv8jop1ns9r.cn 左脸颊长痘是什么原因hcv8jop2ns1r.cn 怀孕前三个月需要注意什么hcv9jop8ns2r.cn 离婚需要什么手续hcv8jop9ns5r.cn 修女是什么意思hcv8jop5ns6r.cn
得意忘形是什么意思hcv9jop4ns3r.cn 瘫痪是什么意思helloaicloud.com 头痛用什么药好hcv9jop0ns2r.cn 洗头什么时间洗最好hcv9jop2ns5r.cn 胸口疼吃什么药hcv8jop4ns5r.cn
脑鸣挂什么科hcv8jop3ns9r.cn 胃疼和肚子疼有什么区别hcv9jop6ns9r.cn 属猴的是什么星座hcv7jop4ns6r.cn 你是什么意思hcv9jop3ns2r.cn 什么是丝状疣hcv8jop4ns4r.cn
百度