親愛的工程師朋友和喜愛電子的朋友,大家好,我是火舞青春,也是本期“來實(shí)戰(zhàn)”項(xiàng)目《串行數(shù)據(jù)采集儀》的執(zhí)行官。
嵌入式軟件這個(gè)行業(yè)涉及甚廣,從我們身邊的電視、冰箱、洗衣機(jī),到我們的手機(jī),再到交通、到醫(yī)療、軍事無處不在。
在項(xiàng)目的開發(fā)過程中,使用調(diào)試工具是必不可少的。
串口簡單靈活的特性常被工程師用作代碼的調(diào)試工具,它的另一個(gè)名字叫uart。
說到uart,相信很多工程師都熟透了,掌握一個(gè)uart,可以說是已經(jīng)邁進(jìn)了嵌入式軟件的殿堂,所以u(píng)art也常被用作嵌入式入門的必備功課。
那既然都熟了,那為什么還拿出來說呢,帶著這樣的一個(gè)問題,跟著我一起深入的了解我們的這個(gè)項(xiàng)目,一起探討uart背后那些不為人知的故事。
目的意義;
在我們的開發(fā)測試中,uart通常扮演者信息輸出,人機(jī)交互和下載程序的功能,有些場景下可能有線的串口不是很方便或者不能實(shí)現(xiàn)信息的輸出,比如調(diào)平衡車,有線串口對(duì)這種遠(yuǎn)距離的調(diào)試顯得有些力不足。有些場景或者我們根本不可以把數(shù)據(jù)直接讀出來,比如車廠,整車的CAN數(shù)據(jù)是汽車的血液,一些ECU的出廠前身體狀況,全靠采集can數(shù)據(jù)來診斷,即使整車有can數(shù)據(jù)的存儲(chǔ)功能,一些測試調(diào)試不一定能很方便的拿到,所以這個(gè)無線的數(shù)據(jù)采集儀就能派上用場,這就是我本次項(xiàng)目的主要意義。
本期內(nèi)容可以了解到以下幾個(gè)方面:
1、模塊化代碼的設(shè)計(jì)思路,開發(fā)思想和獨(dú)立模塊開發(fā)模型;
2、uart等串行板級(jí)通信的設(shè)計(jì)原理及其注意事項(xiàng);
3、項(xiàng)目中常用的測試方法和測試手段;
4、通信協(xié)議的制定和協(xié)議棧的開發(fā);
項(xiàng)目簡介:
項(xiàng)目采用雙mcu-STM32F030C8T6和RF24L01無線模塊實(shí)現(xiàn)主從設(shè)備的上下行數(shù)據(jù)傳輸,在此基礎(chǔ)上增加與pc的通信和數(shù)據(jù)記錄功能,實(shí)現(xiàn)離線數(shù)據(jù)同步功能;
基礎(chǔ)功能:
1、實(shí)現(xiàn)雙mcu數(shù)據(jù)的上下行無線傳輸,波特率為115200;
2、實(shí)現(xiàn)主設(shè)備與pc機(jī)的通信,并實(shí)現(xiàn)uart調(diào)試功能;
擴(kuò)展功能:
1、can數(shù)據(jù)、spi 、iic的數(shù)據(jù)的采集傳輸;
2、離線存儲(chǔ)功能;
開發(fā)準(zhǔn)備及其環(huán)境
硬件環(huán)境 具備RF24L01模塊接口的STM32開發(fā)板2塊、RF20L01無線模塊2塊;
開發(fā)工具 STM32J-link仿真器、串口TTL轉(zhuǎn)換小板各1;
軟件環(huán)境 KIEL-MDK 、串口助手 ;
開發(fā)計(jì)劃(第五期的第1板塊,為期1個(gè)月)
· 節(jié)點(diǎn)1:完成技術(shù)指標(biāo)的確定,開發(fā)板、硬件模塊及其調(diào)試器采購到位,完成軟硬件的架構(gòu)設(shè)計(jì);
· 節(jié)點(diǎn)2:調(diào)試接口與pc的交互程序的開發(fā);
1、 初建工程,完成uart1調(diào)試接口程序的開發(fā);
2、 完成uart2與pc機(jī)的交互程序的設(shè)計(jì);
· 節(jié)點(diǎn)3:定制NRF24L01的傳輸協(xié)議,并完成開發(fā)
1、驅(qū)動(dòng)的開發(fā)與BSP的開發(fā);
2、協(xié)議的開發(fā);
· 節(jié)點(diǎn)4:整體調(diào)試、測試;
· 節(jié)點(diǎn)5:編寫項(xiàng)目總結(jié)。
項(xiàng)目設(shè)計(jì)
Part 01
項(xiàng)目概述及其環(huán)境的搭建
項(xiàng)目簡介:
項(xiàng)目采用雙mcu-STM32F030C8T6和RF24L01無線模塊實(shí)現(xiàn)主從設(shè)備的上下行數(shù)據(jù)傳輸,在此基礎(chǔ)上增加與pc的通信和數(shù)據(jù)記錄功能,實(shí)現(xiàn)離線數(shù)據(jù)同步功能;功能指標(biāo)
基礎(chǔ)功能:
1、為了盡快上手軟件,硬件系統(tǒng)采用現(xiàn)成模塊, RF24L01模塊接口的STM32開發(fā)板2塊和RF20L01無線模塊2塊,STM32系統(tǒng)板2塊分為主板和從板,從板信息通過24l01無線模塊發(fā)送到主板,主板通過uart與pc交互;硬件部分后續(xù)獨(dú)立部分說明分享。
2、軟件方面是重點(diǎn)研究對(duì)象,軟件主要分為driver、hal、bsp、service、app五個(gè)部分。Driver層是和硬件直接相關(guān),hal層是隔離層,bsp是驅(qū)動(dòng)相關(guān)芯片的板級(jí)支持層、服務(wù)層主要是一些任務(wù)相關(guān),App為應(yīng)用層。
擴(kuò)展功能:
1、can數(shù)據(jù)、spi 、iic的數(shù)據(jù)的采集傳輸;
2、離線存儲(chǔ)功能;
開發(fā)準(zhǔn)備及其環(huán)境:
1、硬件環(huán)境 :具備RF24L01模塊接口的STM32開發(fā)板2塊、RF20L01無線模塊2塊;
2、開發(fā)工具 :STM32J-link仿真器、串口TTL轉(zhuǎn)換小板各1;
3、軟件環(huán)境 KIEL-MDK 、串口助手 ;
Part 02
軟件設(shè)計(jì)-外設(shè)uart
導(dǎo)言
uart外設(shè)是開發(fā)調(diào)試的重要手段,也是板級(jí)通信常用的通信方式。
對(duì)于耳熟能詳?shù)膗art,你了解多少呢?
它的用法的注意事項(xiàng)和難點(diǎn)又有哪些呢?
本期內(nèi)容讓我?guī)е蠹抑攸c(diǎn)探討一下uart的軟件設(shè)計(jì)。
內(nèi)容提要
1、uart的基本概述和STM32中uart驅(qū)動(dòng)HAL層的配置;
2、調(diào)試打印中,uart的數(shù)據(jù)發(fā)送策略;
3、通信中,uart的策略與架構(gòu)。
軟件實(shí)戰(zhàn)
1、外設(shè)與系統(tǒng)
與傳統(tǒng)寫驅(qū)動(dòng)程序相比,STM32CubeMX代碼生成器讓驅(qū)動(dòng)變得更簡單、快速,大大提高了開發(fā)效率。
STM32CubeMX不僅支持外設(shè)配置,還支持freeRTOS,不過很可惜,考慮到片子的成本,8KRAM的片子僅能跑2個(gè)靜態(tài)的線程,而且從板有集成到項(xiàng)目中的需求,所以從設(shè)備不使用freeRTOS。
從設(shè)備主頻48MHZ,uart外設(shè)需要對(duì)GPIO/NVIC/DMA/UART進(jìn)行配置,主設(shè)備還需要配置freeRTOS。
2、調(diào)試神器-uart
不管哪個(gè)項(xiàng)目,printf的輸出是必不可少的!
實(shí)現(xiàn)的關(guān)鍵點(diǎn)是數(shù)據(jù)通過printf函數(shù)收集到debug_pool后如何發(fā)送。
下面內(nèi)容圍繞這個(gè)問題展開討論。
無os的情況下,若是需要實(shí)時(shí)性要求較高的情況下,發(fā)送需要直接調(diào)用uart驅(qū)動(dòng)發(fā)送接口拋出,這種方式,效率低,cpu占用高。
一般情況下是要開一片空間,當(dāng)數(shù)據(jù)收集滿后通過DMA送到uart硬件然后發(fā)出去。不過這種方式是需要一個(gè)Task,周期的拋數(shù)據(jù)。
有os的系統(tǒng),這里需要加消息隊(duì)列或者內(nèi)存池,還需要一個(gè)獨(dú)立的線程進(jìn)行處理。
比較復(fù)雜,這里不展開討論。
對(duì)上圖思想進(jìn)行解釋:
1、接收部分首先考慮如何接收數(shù)據(jù),是采用run_buf的形式還是一個(gè)字節(jié)中斷的方式;
2、數(shù)據(jù)接收后,要思考幀識(shí)別,確定一幀數(shù)據(jù)后進(jìn)入CRC校驗(yàn);
3、校驗(yàn)通過后再進(jìn)行協(xié)議的解析和處理;
5、數(shù)據(jù)發(fā)送部分先對(duì)數(shù)據(jù)進(jìn)行打包。記住多線程的處理要對(duì)數(shù)據(jù)進(jìn)行保護(hù),防止tx_buf里的數(shù)據(jù)被刷寫;
6、通過打包后的數(shù)據(jù)要CRC加碼校驗(yàn),然后再發(fā)出去;
值得注意的是,要將這些公共的CRC和收發(fā)任務(wù)單獨(dú)提出來,與協(xié)議相關(guān)的內(nèi)容獨(dú)立出來,這樣協(xié)議層的變得不會(huì)引起程序大的改動(dòng);
Part 03
調(diào)試接口與pc的交互程序的開發(fā)
Part 04
定制NRF24L01的傳輸協(xié)議,完成開發(fā)
Part 05
整體調(diào)試、測試
Part 06
編寫項(xiàng)目總結(jié)
責(zé)任編輯:xj
原文標(biāo)題:《來實(shí)戰(zhàn)》#5:老司機(jī)教你做一款UART之UART外設(shè)篇
文章出處:【微信公眾號(hào):電路設(shè)計(jì)技能】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
uart
+關(guān)注
關(guān)注
22文章
1239瀏覽量
101469 -
模塊化
+關(guān)注
關(guān)注
0文章
332瀏覽量
21370 -
代碼
+關(guān)注
關(guān)注
30文章
4798瀏覽量
68714
原文標(biāo)題:《來實(shí)戰(zhàn)》#5:老司機(jī)教你做一款UART之UART外設(shè)篇
文章出處:【微信號(hào):cirmall,微信公眾號(hào):電路設(shè)計(jì)技能】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論