前言 我一般用Segger-RTT來debug。不過這東西也有限制,比如MCU進出sleep mode,他的data stream就會斷掉,也是不方便 http://lihgong.blogspot.com/2016/05/segger-rtt-1.html http://lihgong.blogspot.com/2016/05/segger-rtt-2.html http://lihgong.blogspot.com/2016/05/segger-rtt-3_6.html 我不是很喜歡UART,根本原因是把他 用好 其實不容易。當年選用Segger RTT其實就是要逃避這題(笑);很多年過去了,總是要回來解決這題 STM32 HAL UART driver足足有3726Lines,這代表他的複雜度。假如UART跑在115200bps來說,傳送1byte需要約100us,假設CPU跑在16Mhz就需要1600T。簡單用Polling mode丟資料(或是接收資料)效能很悲劇;用了中斷模式會好一點,但是每個字元都來中斷,遇到高速UART其實效率也不大好;這題的根本解法是需要DMA mode 這篇我會介紹怎在使用STM32CubeIDE,把UART+DMA mode跑起來,TX/RX都有,實作我心裡最佳的框架。這篇直接講結論和步驟,原理很複雜,但是架起來卻很簡單 環境 STM32CubeIDE 你改用STM32CubeIDE了嗎?如果還沒,可以試試看;我用起來很滿意! Nucleo F411RE Board 上面有ST-LINK加開發版,帶條USB線就能出去玩;缺點是MINI-USB線有點討厭 MobaXTerm 好用的Terminal工具,可以連SSH/ RDP/ Serial Terminal UART-TX設定步驟 STM32CUBEIDE設定UART,關鍵是要打開UART中斷,以及打開TX/RX的DMA Enable UART IRQ Enable UART DMA channels 假如要傳送資料,這一段code能幫上忙。這裡面有個資料結構內藏ring-buf,每次user要寫東西就往buf[]擺,並且更新wptr;資料擺上去會呼叫UART HAL library的API來傳送;或是DMA傳送完了,也會檢查還有沒有剩下的要傳。因為有Global variabl
留言