为什么需要设备接口
RT-Thread 分为标准版本和 Nano 版本,其特点如下:
RT-Thread 标准版:拥有驱动框架,软件包等组件,软件包都是基于设备驱动接口来实现。
RT-Thread Nano :仅仅只是一个 RTOS 内核。没有任何组件。
Nano 是无法直接使用 RT-Thread 丰富软件包功能。
Nano 是一个面向低资源的 MCU 等芯片,不可能增加如同标准版的设备驱动框架。
Nano 需要一套统一设备驱动 API,屏蔽不同芯片的 HAL 层的区别。方便移植工程到不同的平台。
Nano 需要一套设备驱动 API,可以方便使用丰富软件包组件。
准备工作
使用 RT-Thread Studio 建立一个 STM32L431RCT6 的 RT-Thread Nano 基础工程。
基础工程创建可参考:在 RT-Thread Studio 上使用 RT-Thread Nano
ADC 设备接口
适配 ADC 设备驱动接口
在 RT-Thread 标准版中,ADC 设备 驱动提供了一套设备管理接口来访问 ADC,用户程序可以直接使用该 API 操作 ADC 的功能,设备管理接口如下:
![](//file.elecfans.com/web2/M00/53/E7/poYBAGLU07yAU-_DAABu9iOuuX0952.jpg)
由于 RT-Thread Nano 不使用设备驱动框架,所以没有对应的 rt_device_find() 这个 API 获取设备对象。当为了能够与 RT-Thread 标准版的接口相近,我们需要做了简单的修改,设备管理接口如下:
![](//file.elecfans.com/web2/M00/54/84/pYYBAGLU07yAf9s_AABvjvFImGc241.jpg)
对于 RT-Thread Nano,只需要适配如上这套 API,便可简单修改后使用 RT-Thread 丰富软件包功能。
复制 RT-Thread 完整版工程中的 adc.h 文件(路径:rt-thread\components\drivers\include\drivers\adc.h)到我们准备好的 STM32L431RCT6 的 RT-Thread Nano 基础工程中。
由于 RT-Thread Nano 没有驱动框架,所以我们要把 adc.h 中有关完整版的内容去掉。整理完之后的 adc.h 文件如下:
![](//file.elecfans.com/web2/M00/53/E7/poYBAGLU07yAYr4kAAD3kJX2Zng644.jpg)
我们需要适配如上 4 个 ADC 设备 API,参考实例:drv_adc.c 和 drv_adc.h。
编写 ADC 设备使用示例
![](//file.elecfans.com/web2/M00/54/84/pYYBAGLU07yARCBdAAB86zzIkqI137.jpg)
实例代码运行现象:
![](//file.elecfans.com/web2/M00/53/E7/poYBAGLU07yAUjU0AAASGZ9sn3g583.jpg)
原作者:RT-Thread文档中心
|