使用STM32L496的Nucleo板的LPUART 做打印輸出時,電腦端始終沒法出現任何信息。
根據該開發板使用手冊說明,外設LPUART的TX/RX腳【PG7/PG8】默認與開發板STLINK部分的VCP端口相連,這樣做的好處就可以省去飛線的麻煩,更不需要外接USB-UART轉換器件。
客戶的LPUART相關代碼是基于該Nucleo板的cube庫例程修改而成。
上述CUBE庫LPUART例程里的通信口用的PB10/PB11。從芯片數據手冊我們可以得知LPUART的通信口可以復用到多個端口,如:PA2,PA3/PB11,PB10/PC1,PC0/PG7,PG8。
先基于例程配置使用PB10/PB11通信口做打印輸出,用飛線接到STM32L496的Nucleo板STLINK端的VCP接口,輸出正常。說明STLINK端的VCP端口、LPUART外設以及PC端vcp驅動的安裝都是正常的。
將LPUART通信口修改PG7,PG8,并做相關復用功能、GPIO配置的修改,電腦端根本看不到任何打印信息。即使用示波器直接測試LPUART輸出腳PG7也毫無動靜。難道PG7,PG8有什么特別的地方?查看手冊!
通過查看手冊可得知,端口PG[15:2]的供電由VDDIO2負責。現在需要用它,VDDIO2腳應接上相關電源。
通過查看NUCLEO板原理圖可知,VDDIO2已經與VDD相連了。
那軟件上還需要添加些什么配置呢?因為要操作VDDIO2域,電源接口時鐘要使能。另外,還要對一個跟VDDIO2供電有效的寄存器位【IOSV】進行置位,申明VDDIO2域可以工作了。
HAL_PWREx_EnableVddIO2(); //IOSV@PWR_CR2 ……①
__HAL_RCC_PWR_CLK_ENABLE(); //PWREN@RCC_APB1ENR1……②
將上面的第一句代碼插入到例程中的HAL_UART_MspInit()函數里,將第二句代碼
添加到SystemClock_Config()即可。然后編譯調試,輸出正常,問題基本了結。
上面是基于現存Cube庫代碼修改而成的。如果利用STM32CubeMx工具進行配置會快捷很多,關于上面添加的那些配代碼STM32CubeMx都幫你配置好,省去你研究那些細節了,從效率上講高了很多。也許會有人說這個效率是以犧牲對細節的把握為代價,也沒說錯。不過多數時候作為應用工程師來講重點還是在應用功能的實現和優化層面。
最后順便提醒下關于LPUART的波特率配置要注意的問題。
其實在前面的測試過程中,在設置波特率時也遇到點問題。例程中的波特率設置的115200,當把波特率設置為較低數值,比方9600時,發現UART通信不工作了。當波特率調高時工作又正常了,這樣反復驗證了多次現象依舊,應該是波特率設置這個地方有些細節需進一步了解確認。打開STM32L4的參考手冊RM0394閱讀相關章節。關于波特率的設置及參數限制都做了明確描述。
1.對于LPUART的波特率設置除了滿足上述公式外,還得遵守LPUART的時鐘須在【3倍波特率到4096倍波特率】范圍內。前面測試過程中,LPUART的時鐘源來自系統時鐘,最高80MHz。依據上述規定及公式,那它的波特率最低不得低于80M/4096=19531,所以當我們設置波特率為9600時自然無法正常通信了,此時建議配置在38400以上。
2.LPUART的時鐘源可以是系統時鐘,還可以是LSE。如果是32768的LSE,根據上述規定,LPUART_BRR的值不得小于0X300,即十進制768.那么相應的波特率配置就不要高于9600.
OK,拋磚引玉似地分享這些小細節,愿君有所獲。
-
單片機
+關注
關注
6039文章
44574瀏覽量
636314 -
pcb
+關注
關注
4322文章
23119瀏覽量
398474 -
PCB設計
+關注
關注
394文章
4690瀏覽量
85836
原文標題:一個關于LPUART輸出異常問題分享
文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論