1. 程式人生 > >STM32串口打印輸出亂碼的解決辦法

STM32串口打印輸出亂碼的解決辦法

tor ctrl 記錄 sci 還要 printf 文件中 net print

前言

最近在試用uFUN開發板,下載配套的Demo程序,串口數據輸出正常,當使用另一個模板工程,調用串口printf調試功能時,輸出的卻是亂碼,最後發現是外部晶振頻率不一樣。很多STM32開發板都是使用的8M晶振,這個也是ST官方推薦的晶振頻率,而且固件庫默認是8M頻率,倍頻系數9。而uFUN開發板的晶振是和CH340共用一個12M晶振。如果固件庫的參數不和硬件實際連接的晶振頻率一致,那麽不僅是串口會出現亂碼,而且定時器這些也是不準確的,因為基本的工作時鐘被打亂了。其實之前也遇到過這個問題,這次就算是記錄一下吧!

技術分享圖片

1.修改stm32f10x.h文件中的晶振頻率

打開工程中的stm32f10x.h文件,Ctrl+G

快捷鍵定位到119行,把宏定義

#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串口打印輸出亂碼的解決辦法