概述
車載環(huán)境參數(shù)采集終端基于STM32H750 系列芯片(RT-ART-PI開發(fā)板)開發(fā),支持采集多種環(huán)境參數(shù),包括車內(nèi)溫度,濕度,氣壓,噪音,有毒有害氣體,車輛震動(dòng)沖擊加速度等。本地通過(guò)串口與 PC 端通訊,上位機(jī)實(shí)時(shí)顯示并存儲(chǔ)數(shù)據(jù)。該系統(tǒng)適用于記錄車輛的行駛車況及車內(nèi)的環(huán)境參數(shù)等。
開發(fā)環(huán)境
硬件:STM32H750-RT-ART-Pi開發(fā)板
擴(kuò)展板:博士BME280溫濕度氣壓三合一傳感器擴(kuò)展板、ADI ADXL375擴(kuò)展板、精訊暢通CO、NH3有害氣體模組、噪聲板卡等。
RT-Thread版本:RT-Thread V 4.0.2
開發(fā)工具及版本:RT-Thread-Studio
RT-Thread使用情況概述
內(nèi)核部分:調(diào)度器,信號(hào)量,線程,中斷,設(shè)備。
調(diào)度器:創(chuàng)建多個(gè)線程來(lái)實(shí)現(xiàn)不同的工作。
信號(hào)量:用來(lái)同步線程和資源分配。
SPI框架:使用 SPI 框架來(lái)驅(qū)動(dòng)ADXL375。
I2C框架:使用 I2C 框架來(lái)驅(qū)動(dòng)BME280。
串口驅(qū)動(dòng)框架:使用串口框架來(lái)采集CO濃度,NH3濃度和噪音分貝。
設(shè)備:使用了SPI總線,SPI設(shè)備,uart,I2C總線等。
硬件框架
軟件框架
MCU 上電之后初始化外設(shè)接口和傳感器工作參數(shù)配置,之后會(huì)持續(xù)獲取傳感器采樣值并通過(guò)串口以50Hz的速率發(fā)送數(shù)據(jù)到上位機(jī)。
軟件模塊說(shuō)明
設(shè)備:
UART: uart1、uart4
SPI:SPI2總線,SPI20設(shè)備(ADXL375)
I2C: I2C4
PIN:GPIOI8、GPIOC15、GPIOD13、GPIOH4
線程:
1、LED_Blink: LED閃爍線程,用來(lái)指示當(dāng)前系統(tǒng)的運(yùn)行狀態(tài),輸出數(shù)據(jù)時(shí)藍(lán)燈閃爍,否則紅燈閃爍。
2、Print_Task: 通過(guò)串口4將采集到的數(shù)據(jù)以50Hz頻率、字符形式上傳至PC端。
3、Noise_Task: 通過(guò)串口1以5Hz的速率讀取噪音分貝。
4、NH3_Task: 通過(guò)串口1以2Hz的速率讀取NH3氣體濃度。
5、CO_Task: 通過(guò)串口1以2Hz的速率讀取CO氣體濃度。
6、BMP280_Task: 通過(guò)I2C4讀取讀取溫度、濕度、氣壓等原始數(shù)據(jù)并轉(zhuǎn)換為實(shí)際數(shù)值。
7、ADXL375_Task: 通過(guò)SPI2總線讀取加速度數(shù)值,加速度采樣頻率為3200Hz,并記錄20ms內(nèi)絕對(duì)最大值。
8、button_Task: 讀取GPIOH4電平,低電平輸出數(shù)據(jù),高電平停止輸出。
信號(hào)量:
1、water_mark_sem: ADXL375水印中斷,通過(guò)GPIOD13中斷輸入,用來(lái)同步ADXL375_Task 線程及時(shí)從器件FIFO中讀取樣本。
2、serial1_sem: 用來(lái)指示串口1可用狀況,線程CO_Task、NH3_Task、Noise_Task會(huì)先獲取此信號(hào)量,只有獲取到之后才能使用串口1,并在使用完之后釋放此信號(hào)量。此信號(hào)量用來(lái)避免串口訪問(wèn)沖突。
3、serial1_tx_sem: 串口1通過(guò)中斷模式發(fā)送數(shù)據(jù),此信號(hào)指示數(shù)據(jù)發(fā)送完成。
4、serial1_rx_sem: 串口1通過(guò)中斷模式接收數(shù)據(jù),此信號(hào)指示數(shù)據(jù)接收完成。
演示效果
比賽感悟
非常感謝主辦方提供的這次契機(jī),讓我有幸一窺當(dāng)下MCU發(fā)展的主流趨勢(shì)。通過(guò)學(xué)習(xí)RT-Thread,我學(xué)到了很多很多以前從未接觸到的概念,編程思想等等,讓我對(duì)MCU編程有了全新的認(rèn)識(shí)。尤其是其 對(duì)象 的概念,讓我對(duì)嵌入式編程有了全新的理解。在此之前我還在裸機(jī),寄存器,外設(shè),驅(qū)動(dòng)包等等之間徘徊,深陷其中不能自拔。偶然有幸接觸到RT-Thread,讓我醍醐灌頂。原來(lái)還有這樣騷操作。
遙想大學(xué)還在玩51,畢業(yè)之后種種原因并未從事單片機(jī)嵌入式方向的工作。轉(zhuǎn)眼間五六年過(guò)去,去年重拾MCU,又誤入AVR mage64系列(手動(dòng)狗頭)。當(dāng)真正開始學(xué)習(xí)STM32系列單片機(jī)系列之后,和寄存器大眼瞪小眼,外設(shè)五花八門,標(biāo)準(zhǔn)庫(kù),HAL庫(kù)等等資料多到眼花繚亂,各種參考資料久久不得啃下,自學(xué)之路崎嶇又坎坷。此次大賽有幸初次相識(shí)RT-thread,一見方恨晚。
時(shí)代的發(fā)展,MCU的性能也越來(lái)越強(qiáng),萬(wàn)物互聯(lián)的需求也愈加強(qiáng)烈,使用RTOS來(lái)實(shí)現(xiàn)物與網(wǎng)的鏈接,是時(shí)代發(fā)展的潮流。接下來(lái)的嵌入式開發(fā)里緊繞RT-Thread這顆大樹,汲取難得的養(yǎng)料。
最后感謝主辦方提供了這么好的一個(gè)平臺(tái),不僅能展示自我,也能學(xué)到很多知識(shí),還要感謝論壇上那些解決我問(wèn)題以及制作軟件包的大佬,希望有朝一日我也能給開源社區(qū)貢獻(xiàn)一份自己力量。