嵌入式軟件開發在項目的開發過程中,使用調試工具是必不可少的。
串口簡單靈活的特性常被工程師用作代碼的調試工具,它的另一個名字叫uart。
說到uart,相信很多工程師都熟透了,掌握一個uart,可以說是已經邁進了嵌入式軟件的殿堂,所以uart也常被用作嵌入式入門的必備功課。
那既然都熟了,那為什么還拿出來說呢,帶著這樣的一個問題,跟著我一起深入的了解我們的這個項目,一起探討uart背后那些不為人知的故事。
目的意義在我們的開發測試中,uart通常扮演者信息輸出,人機交互和下載程序的功能,有些場景下可能有線的串口不是很方便或者不能實現信息的輸出,比如調平衡車,有線串口對這種遠距離的調試顯得有些力不足。有些場景或者我們根本不可以把數據直接讀出來,比如車廠,整車的CAN數據是汽車的血液,一些ECU的出廠前身體狀況,全靠采集can數據來診斷,即使整車有can數據的存儲功能,一些測試調試不一定能很方便的拿到,所以這個無線的數據采集儀就能派上用場,這就是我本次項目的主要意義。
?本期內容可以了解到以下幾個方面:
? 1、模塊化代碼的設計思路,開發思想和獨立模塊開發模型;
2、uart等串行板級通信的設計原理及其注意事項;
3、項目中常用的測試方法和測試手段;
4、通信協議的制定和協議棧的開發; ?
?項目簡介:項目采用雙mcu-STM32F030C8T6和RF24L01無線模塊實現主從設備的上下行數據傳輸,在此基礎上增加與pc的通信和數據記錄功能,實現離線數據同步功能; ?基礎功能:
實現雙mcu數據的上下行無線傳輸,波特率為115200;
實現主設備與pc機的通信,并實現uart調試功能;
擴展功能:1、can數據、spi 、iic的數據的采集傳輸; 2、離線存儲功能; ?開發準備及其環境硬件環境:具備RF24L01模塊接口的STM32開發板2塊、RF20L01無線模塊2塊;開發工具:STM32J-link仿真器、串口TTL轉換小板各1;軟件環境 :KIEL-MDK 、串口助手 ; ?開發計劃節點1:完成技術指標的確定,開發板、硬件模塊及其調試器采購到位,完成軟硬件的架構設計; ?節點2:調試接口與pc的交互程序的開發;
初建工程,完成uart1調試接口程序的開發;
完成uart2與pc機的交互程序的設計;
節點3:定制NRF24L01的傳輸協議,并完成開發
驅動的開發與BSP的開發;
協議的開發;
節點4:整體調試、測試; ?節點5:編寫項目總結。 ?
?
?
項目設計
Part 01
項目概述及其環境的搭建
?項目簡介:? 項目采用雙mcu-STM32F030C8T6和RF24L01無線模塊實現主從設備的上下行數據傳輸,在此基礎上增加與pc的通信和數據記錄功能,實現離線數據同步功能;功能指標 ?基礎功能:? 1、為了盡快上手軟件,硬件系統采用現成模塊, RF24L01模塊接口的STM32開發板2塊和RF20L01無線模塊2塊,STM32系統板2塊分為主板和從板,從板信息通過24l01無線模塊發送到主板,主板通過uart與pc交互;硬件部分后續獨立部分說明分享。 ?
?
? 2、軟件方面是重點研究對象,軟件主要分為driver、hal、bsp、service、app五個部分。Driver層是和硬件直接相關,hal層是隔離層,bsp是驅動相關芯片的板級支持層、服務層主要是一些任務相關,App為應用層。 ?
?擴展功能:1、can數據、spi 、iic的數據的采集傳輸; 2、離線存儲功能; ?開發準備及其環境:1、硬件環境 :具備RF24L01模塊接口的STM32開發板2塊、RF20L01無線模塊2塊; 2、開發工具 :STM32J-link仿真器、串口TTL轉換小板各1; 3、軟件環境 KIEL-MDK 、串口助手 ; ?
Part 02
軟件設計-外設uart
導言uart外設是開發調試的重要手段,也是板級通信常用的通信方式。 ? 對于耳熟能詳的uart,你了解多少呢? ? 它的用法的注意事項和難點又有哪些呢? ? 本期內容讓我帶著大家重點探討一下uart的軟件設計。 ?內容提要1、uart的基本概述和STM32中uart驅動HAL層的配置; 2、調試打印中,uart的數據發送策略; 3、通信中,uart的策略與架構。 ?軟件實戰1、外設與系統? 與傳統寫驅動程序相比,STM32CubeMX代碼生成器讓驅動變得更簡單、快速,大大提高了開發效率。 ? STM32CubeMX不僅支持外設配置,還支持freeRTOS,不過很可惜,考慮到片子的成本,8KRAM的片子僅能跑2個靜態的線程,而且從板有集成到項目中的需求,所以從設備不使用freeRTOS。 ? 從設備主頻48MHZ,uart外設需要對GPIO/NVIC/DMA/UART進行配置,主設備還需要配置freeRTOS。 ?
?2、調試神器-uart不管哪個項目,printf的輸出是必不可少的! ? 實現的關鍵點是數據通過printf函數收集到debug_pool后如何發送。 ? 下面內容圍繞這個問題展開討論。 ? 無os的情況下,若是需要實時性要求較高的情況下,發送需要直接調用uart驅動發送接口拋出,這種方式,效率低,cpu占用高。 ? 一般情況下是要開一片空間,當數據收集滿后通過DMA送到uart硬件然后發出去。不過這種方式是需要一個Task,周期的拋數據。 ?
? 有os的系統,這里需要加消息隊列或者內存池,還需要一個獨立的線程進行處理。 ? 比較復雜,這里不展開討論。 ?
?對上圖思想進行解釋:1、接收部分首先考慮如何接收數據,是采用run_buf的形式還是一個字節中斷的方式;
2、數據接收后,要思考幀識別,確定一幀數據后進入CRC校驗;
3、校驗通過后再進行協議的解析和處理;
5、數據發送部分先對數據進行打包。記住多線程的處理要對數據進行保護,防止tx_buf里的數據被刷寫;
6、通過打包后的數據要CRC加碼校驗,然后再發出去; ?值得注意的是:要將這些公共的CRC和收發任務單獨提出來,與協議相關的內容獨立出來,這樣協議層的變得不會引起程序大的改動; ?本次更新內容如下:
Part 03
軟件設計-外設uart
引言:相信很多工程師們都曉得: 調試串口不僅扮演打印信息的角色,還得有配置設備、設備參數輸入等功能. 如果開發window上位機界軟件是成本上和時間上都不劃算; 要是在Linux這種跨平臺下還得開發一套軟件. 所以做一個類似Linux命令這樣的串口軟件就顯得很有必要! ? 直接用像SecureCRT這類軟件連接串口即可調試,與設備進行交互,把這個軟件命名為mshel。 ? 另外,直接與pc進行這樣的數據流存在亂碼和丟數據的現象,這里使用了為二者制定的私有協議。 ?本期內容:1、mshell的原理與結構; 2、pc交互的通信協議; ?軟件實戰:mshell的設計原理和思路:mshell是設備開發人員與設備進行配置管理的交互接口,主要功能如下: 1)設備log打印顯示功能;
2)可對設備進行配置和控制;
3)具有Linux的終端控制臺類似的功能,可以顯示功能菜單和參數輸入等功能,給出功能菜單示例; ?
?SecureCRT軟件的串口數據交互特點:
1)對與窗口輸入的字母和數字,是以ASCII的形式通過串口下發到設備;
2)窗口輸入一個字符,串口會下發一個字符,回車、退格和空格都是一個字節,左右上下鍵是2字節;
3)軟件接收到字符后回顯到窗口,回車0x0D回顯沒有反應, 行跳轉;
4)給出用到的一些雙字節按鍵:
KEY_UP = 0x5B410000,?
KEY_DOWN = 0x5B420000,
KEY_LEFT = 0x5B440000,?
KEY_RIGHT = 0x5B430000,
根據以上特點可知,實現mshell進行需要回顯功能,就是收到啥發啥,提示程序員設備收到所下發的字符。 ? 需要對收到的字符進行存儲和解析,需要設計命令解析器。 ? 命令解析器處理完指令及其數據后,交給執行單元。 ? 執行單元的設計包括一級指令執行,即選擇功能模塊,比如uart相關指令,之后進入到子模塊處理程序。 ?
?核心模塊的功能如下:? 1)echo回顯模塊是將pc發來的字符實時的發回到pc的終端,提示輸入有效;
2)cmd_analysis命令解析器是將收到的字符進行處理,要知道輸入參數的個數,指令以及數據;
3)cmd_dispatch命令調度器是對注冊的命令塊進行回調處理; ? ?
? 1)物理層主要是硬件線路數據,軟件驅動的收發;采用標準3線制 Uart 物理接口、波特率待定、 8個數據位,無校驗,1個停止位。
2)數據鏈路層是對接收一包數據的完整性已經正確的保證,這里使用crc校驗;
3)傳輸層是實現數據包的順序傳輸,和穩定性,具體的協議幀定義如下: ?
應答幀在應用層payload中進行,counter計數避免幀重復,對于協議的實現,僅mcu部分,上位機部分使用Linux,將數據存到文件中即可。 ? 目前更新到這里,想看后續更新記得關注我們~ ?項目如此有趣想要跟著一起做?點擊下方的閱讀原文按鈕,下載本次項目相關附件資料,一起來實戰吧!
Part 04
定制NRF24L01的傳輸協議,完成開發
Part 05
整體調試、測試
Part 06
編寫項目總結
?
原文標題:來實戰之《嵌入式UART項目開發》步驟三:調試接口與pc的交互程序的開發
文章出處:【微信公眾號:電路設計技能】歡迎添加關注!文章轉載請注明出處。
評論
查看更多