歡迎透過合法的方式分享此文內容,若要轉載/轉貼,請明確貼出此原始連結並標示作者基本資訊,請勿抄襲及非法轉貼(例如擷取內文但並未註明出處)
STM32_UART基礎教學之部份簡介(主要以簡易的Receive data應用為範例作教學)。
課程會介紹關於UART的基礎使用方式,包含Polling(輪詢)和interrupt(中斷)機制的差異和基本使用觀念。
而在中斷的方面,
下列影片1的情況是因為我們 沒有 讓CPU或DMA去讀(read) Receive Data Register之中的接收資料,也沒有去對RXNE flag寫0,所以RXNE flag沒有被清除,導致UART ISR flow不斷地被觸發。
而影片2的情況是因為我們讓CPU從Receive Data Register把資料給讀走(在ISR flow中呼叫使用了HAL_UART_Receive),所以RXNE flag被清除,所以每當UART收到來自PC端(中間串接UART轉USB的module)的字元資料(character byte data),UART ISR flow才會被觸發。
另外,在課程中也會提及blocking mode API(以HAL_UART_Receive為例) 和 non-blocking mode API(以HAL_UART_Receive_IT為例)的差異,如影片3。
影片中使用的STM32板子型號是STM32F407G-DISC1 (STM32F4-Discovery),板子上的主MCU晶片型號是STM32F407VGT6(ARM Cortex-M4 CPU based)。
另外關於一些在ST官方手冊[1]中相關的部分:
ST RM0090官方手冊[1] |
題外話,注意這裡的STM32 MCU通訊功能周邊裝置的blocking/non-blocking mode API,和作業系統(如Linux)的blocking/non-blocking I/O model的意思(實際狀況)不太一樣,勿混淆。
也可於下方連結進去我於facebook的公開貼文中觀看,謝謝。
Ref:
[1] STM32 RM0090 Reference manual Rev 19: https://www.st.com/resource/en/reference_manual/dm00031020-stm32f405-415-stm32f407-417-stm32f427-437-and-stm32f429-439-advanced-arm-based-32-bit-mcus-stmicroelectronics.pdf
--------------------
孫文良 (阿良的嵌入式系統技術學習區)
【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先點擊參考這篇介紹文章】