为什么需要设备接口
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
I2C 设备接口
适配 I2C 设备接口
在 RT-Thread 标准版中,I2C 设备 驱动提供了一套设备管理接口来访问 I2C,用户程序可以直接使用该 API 操作 I2C 的功能,设备管理接口如下:
由于 RT-Thread Nano 不使用设备驱动框架,所以没有对应的 rt_device_find() 这个 API 获取设备对象。但 RT-Thread 标准版实际为用户层提供了另外一套 API 给用户层使用。设备管理接口如下:
对于 RT-Thread Nano,只需要适配如上这套 API,便可简单修改后使用 RT-Thread 丰富软件包功能。
复制 RT-Thread 完整版工程中的 i2c.h 文件(路径:rt-thread\components\drivers\include\drivers\i2c.h)到我们准备好的 STM32L431RCT6 的 RT-Thread Nano 基础工程中。
由于 RT-Thread Nano 没有设备驱动框架,所以我们要把 i2c.h 中有关完整版的内容去掉。整理完之后的 i2c.h 文件如下:
我们需要适配如上 6 个 I2C 设备 API ,参考实例:drv_i2c.c 和 drv_i2c.h。
编写 I2C 设备使用示例
I2C 设备相关软件包使用
我们使用 as7341 软件包 来验证 I2C 设备 API。
首先克隆 as7341 软件包到 STM32L431RCT6 的 RT-Thread Nano 工程。
由于没有了 RT-Thread 标准版本的设备驱动框架,所以对软件包进行简单的修改:
在 as7341.h 中包含 drv_i2c.h 头文件。
修改 as7341.c 中的测试用例。代码如下:
使用 as7341 软件包实例,编译烧录便可以在终端输入测试命令:
原作者:RT-Thread 文档中心