基于RT-Thread的CAN温度节点设计

采用 AHT10 传感器采集温湿度数据并通过 CAN 总线传输给接收端,接收端使用 W25Q128 进行温湿度数据的存储,接收端和发送端均可以显示当前所测温湿度。关键词:RT-Thread 嵌入式操作系统;温湿度测量;CAN 通信;虚拟文件系统(DFS)

1 目标要求

(1)采用内部具有 CAN 总线控制器的 STM32 系列单片机
(2)完成 RT-Thread 嵌入式操作系统移植,实现 CAN 总线通信、数据文件本地存储功能。
(3)设计并制作 CAN 总线温度测量节点的硬件电路,主要包括数字温度传感器、液晶显示、大容量 SPI 存储器和 CAN 接口;

2 环境搭建

2.1 硬件环境搭建

表 2.1 为发送端微控制器 STM32 与 AHT10、OLED12864、TJA1050 的接线关系,表 2.2 为接收端微控制器 STM32 与 OLED12864、W25Q128 的接线关系。

在这里插入图片描述

2.2 软件环境搭建

使用 RT-Thread Studio 软件,通过配置 RT-Thread Settings 完成对 IIC 的设置,同时通过打开 board.h 中的宏,设置其引脚分配,由于在 RT-Thread Settings 中没有 CAN 相关的驱动配置,因此需要通过 STM32CubeMX 完成对 CAN 的配置,其中,需要同时设置 CAN及 CAN 的时钟。然后复制生成的 msp 文件,并替换原有的 msp 文件。其次需要完成 board.c中 CAN 的宏的编写,CAN 的驱动程序也需要添加到程序中,直到这时,CAN 才能启动成功。而虚拟文件系统则需要开启 DFS、POSIX 等多个组件,例如需要挂载的 FLASH 为 SPI FLASH,则需要启用 Fats 组件和 SPI、SFUD 驱动。
在这里插入图片描述

3 硬件框架

在这里插入图片描述

4 软件设计

4.1 自定义应用层协议

连接: 1.接收端,当按键按下时发送初始命令
2.接收端使用停止等待协议
3.发送端,检测命令,正确则发送温湿度数据
断开连接: 1接收端不在线,发送端检测到发送失败而停止发送。
2.发送端不在线,接收端每500ms检查总线状态,检测到发送端不在线时则灭灯,等待按键按下发送初始命令。
在这里插入图片描述

4.2 发送端软件设计

下图为发送端详细流程图,具体代码工程后期会发
在这里插入图片描述

4.3 接收端软件设计

下图为接收端详细流程图,具体代码工程后期会发
在这里插入图片描述

5 遇到的问题

在操作文件系统时,遇到了2个问题。

第一个问题是当挂载文件系统时会提示There is no space to register this file system,按照网上的原因和方法,当挂载多个文件系统时,需要修改挂载文件系统的数目,但是本设计中只挂载了一个文件系统,且按照网上所示修改后,仍提示此信息。最后发现可能是RT-Thread的BUG,因为虽然提示此信息,但是文件系统可以正常使用,因此这句话可以忽略,如果不想看到这句话,可以在驱动中将其注释。

第二个问题是在进行数据的存储时,发现使用RT-Thread提供的write()函数写入数据,再用cat命令查看文件的内容时,与写入内容不符。由于实现的目标为将读取的温湿度数据存储到FLASH中,所以需要不断将读取到的温湿度数据进行存储,但是用cat命令进行查看,发现只有第一个数据存储正确,其他数据缺东西。解决方法是使用POSIX接口函数实现数据的存储,这样使用cat命令查看文件全部内容时所看到的内容和写入的内容一致,实现所需要求。

6 总结

下图为接收端串口打印信息,可见RT Thread嵌入式操作系统已经启动,文件系統挂载成功,且温湿度测量数据成功写入W25Q128中。
发送Is命令查看程序中所创建的文件的信息,可以看出,文件在根目录中创建,文件名为test.txt, 此时文件中存储的数据大小为52字节。
发送cat命令查看文件中所存储的信息,可以看到写入信息与存储信息一致, 写入温湿度数据3次,存储到文件中的温湿度数据为3组,满足所需要求。
在这里插入图片描述
如下图所示,左侧为发送端的温度显示,右侧为接收端的温湿度显示,可以看出发送端传感器采集的温湿度数据与接收端通过CAN总线接收到的温湿度数据一致,且在测试过程中,发送端与接收端的延迟较小,较好的满足了设计要求。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值