概述
车载环境参数采集终端基于STM32H750 系列芯片(RT-ART-PI开发板)开发,支持采集多种环境参数,包括车内温度,湿度,气压,噪音,有毒有害气体,车辆震动冲击加速度等。本地通过串口与 PC 端通讯,上位机实时显示并存储数据。该系统适用于记录车辆的行驶车况及车内的环境参数等。
开发环境
硬件:STM32H750-RT-ART-Pi开发板
扩展板:博士BME280温湿度气压三合一传感器扩展板、ADI ADXL375扩展板、精讯畅通CO、NH3有害气体模组、噪声板卡等。
RT-Thread版本:RT-Thread V 4.0.2
开发工具及版本:RT-Thread-Studio
RT-Thread使用情况概述
内核部分:调度器,信号量,线程,中断,设备。
调度器:创建多个线程来实现不同的工作。
信号量:用来同步线程和资源分配。
SPI框架:使用 SPI 框架来驱动ADXL375。
I2C框架:使用 I2C 框架来驱动BME280。
串口驱动框架:使用串口框架来采集CO浓度,NH3浓度和噪音分贝。
设备:使用了SPI总线,SPI设备,uart,I2C总线等。
硬件框架
软件框架
MCU 上电之后初始化外设接口和传感器工作参数配置,之后会持续获取传感器采样值并通过串口以50Hz的速率发送数据到上位机。
软件模块说明
设备:
UART: uart1、uart4
SPI:SPI2总线,SPI20设备(ADXL375)
I2C: I2C4
PIN:GPIOI8、GPIOC15、GPIOD13、GPIOH4
线程:
1、LED_Blink: LED闪烁线程,用来指示当前系统的运行状态,输出数据时蓝灯闪烁,否则红灯闪烁。
2、Print_Task: 通过串口4将采集到的数据以50Hz频率、字符形式上传至PC端。
3、Noise_Task: 通过串口1以5Hz的速率读取噪音分贝。
4、NH3_Task: 通过串口1以2Hz的速率读取NH3气体浓度。
5、CO_Task: 通过串口1以2Hz的速率读取CO气体浓度。
6、BMP280_Task: 通过I2C4读取读取温度、湿度、气压等原始数据并转换为实际数值。
7、ADXL375_Task: 通过SPI2总线读取加速度数值,加速度采样频率为3200Hz,并记录20ms内绝对最大值。
8、button_Task: 读取GPIOH4电平,低电平输出数据,高电平停止输出。
信号量:
1、water_mark_sem: ADXL375水印中断,通过GPIOD13中断输入,用来同步ADXL375_Task 线程及时从器件FIFO中读取样本。
2、serial1_sem: 用来指示串口1可用状况,线程CO_Task、NH3_Task、Noise_Task会先获取此信号量,只有获取到之后才能使用串口1,并在使用完之后释放此信号量。此信号量用来避免串口访问冲突。
3、serial1_tx_sem: 串口1通过中断模式发送数据,此信号指示数据发送完成。
4、serial1_rx_sem: 串口1通过中断模式接收数据,此信号指示数据接收完成。
演示效果
比赛感悟
非常感谢主办方提供的这次契机,让我有幸一窥当下MCU发展的主流趋势。通过学习RT-Thread,我学到了很多很多以前从未接触到的概念,编程思想等等,让我对MCU编程有了全新的认识。尤其是其 对象 的概念,让我对嵌入式编程有了全新的理解。在此之前我还在裸机,寄存器,外设,驱动包等等之间徘徊,深陷其中不能自拔。偶然有幸接触到RT-Thread,让我醍醐灌顶。原来还有这样骚操作。
遥想大学还在玩51,毕业之后种种原因并未从事单片机嵌入式方向的工作。转眼间五六年过去,去年重拾MCU,又误入AVR mage64系列(手动狗头)。当真正开始学习STM32系列单片机系列之后,和寄存器大眼瞪小眼,外设五花八门,标准库,HAL库等等资料多到眼花缭乱,各种参考资料久久不得啃下,自学之路崎岖又坎坷。此次大赛有幸初次相识RT-thread,一见方恨晚。
时代的发展,MCU的性能也越来越强,万物互联的需求也愈加强烈,使用RTOS来实现物与网的链接,是时代发展的潮流。接下来的嵌入式开发里紧绕RT-Thread这颗大树,汲取难得的养料。
最后感谢主办方提供了这么好的一个平台,不仅能展示自我,也能学到很多知识,还要感谢论坛上那些解决我问题以及制作软件包的大佬,希望有朝一日我也能给开源社区贡献一份自己力量。