STM32串口打印輸出亂碼的解決辦法
阿新 • • 發佈:2019-03-17
tor ctrl 記錄 sci 還要 printf 文件中 net print 快捷鍵定位到119行,把宏定義
前言
最近在試用uFUN開發板,下載配套的Demo程序,串口數據輸出正常,當使用另一個模板工程,調用串口printf調試功能時,輸出的卻是亂碼,最後發現是外部晶振頻率不一樣。很多STM32開發板都是使用的8M晶振,這個也是ST官方推薦的晶振頻率,而且固件庫默認是8M頻率,倍頻系數9。而uFUN開發板的晶振是和CH340共用一個12M晶振。如果固件庫的參數不和硬件實際連接的晶振頻率一致,那麽不僅是串口會出現亂碼,而且定時器這些也是不準確的,因為基本的工作時鐘被打亂了。其實之前也遇到過這個問題,這次就算是記錄一下吧!
1.修改stm32f10x.h文件中的晶振頻率
打開工程中的stm32f10x.h
文件,Ctrl+G
#define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
外部晶振頻率8M修改為12M
#define HSE_VALUE ((uint32_t)12000000) /*!< Value of the External oscillator in Hz */
如下圖所示:
2.修改system_stm32f10x.c文件中的倍頻系數
打開工程中的system_stm32f10x.c
文件,Ctrl+G
快捷鍵定位到1056行,把宏定義
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);
倍頻系數由9修改為6,因為STM32F103主頻最高到72MHz,外部晶振改為12M後,所以倍頻系數改為6
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL6);
如下圖所示:
總結
當然串口亂碼可能不止這一個原因,這個解決方法只針對於外部晶振的改變,導致的串口數據亂碼。其他問題還要仔細分析,總得來說,兩個問題:程序問題,硬件問題。
參考資料:
- STM32串口通信亂碼詳細處理方法
歷史精選文章:
- 【UFUN開發板評測】小巧而不失精致,簡單而不失內涵——uFun開發板開箱爆照
- 一鍵自動格式化你的代碼
- Qt小項目之串口助手控制LED
- Jlink使用技巧之燒寫SPI Flash存儲芯片
- Jlink使用技巧之虛擬串口功能
- Jlink使用技巧之讀取STM32內部的程序
- Jlink使用技巧之J-Scope虛擬示波器功能
- C++學習之從C到C++
歡迎大家關註我的個人博客
或微信掃碼關註我的公眾號
STM32串口打印輸出亂碼的解決辦法