【STM32】串列埠通訊出現亂碼(使用官方標準庫)

2020-10-04 07:00:15

Author:AXYZdong 自動化專業 工科男
有一點思考,有一點想法,有一點理性!
定個小小目標,努力成為習慣!在最美的年華遇見更好的自己!
CSDN@AXYZdong,CSDN首發,AXYZdong原創
唯一部落格更新的地址為: 👉 AXYZdong的部落格 👈

在這裡插入圖片描述


  • 開發板:stm32f407VET6
  • 開發環境:keil5 MDK
  • 為了使文章的內容完整,增加了一下原因的敘述,沒有興趣的話可以直接跳轉到 問題解決

  • 問題產生

最近學習了一下32的串列埠通訊,串列埠設定還是很簡單的,不過後面串列埠偵錯助手上面出現的亂碼。很讓人頭疼。

當然第一時間去百度尋求解決辦法。

百度搜尋總結:

  • 在程式不出現問題的情況下,一定是外部晶振設定的問題。但是也要排查下面 👇 兩個問題

先排查這兩個問題

1.USB轉串列埠的問題

  • 解決方法: USB轉串列埠壞了的話,換一個好的就沒事了。(ps:這個出現的概率比較小)

2.波特率不同步的問題

  • 出現亂碼,首先檢查一下,串列埠助手的波特率是不是和程式設定的是一樣的,如果一樣的話出現亂碼,參考下面的解決方法。

插播一條反爬蟲資訊,讀者可以忽略:


在這裡插入圖片描述

  • 外部晶振對串列埠的影響

stm32的串列埠使用的是外部高速時鐘的時鐘源

串列埠外設是掛在APB匯流排上的,一般用於低速外設,它是AHB匯流排時鐘分頻所得。
這樣設計分頻是為了降低低速外設的開關損耗。

然而AHB匯流排的時鐘又源自於高速時鐘源。高速時鐘源可以是高速內部時鐘、高速外部時鐘、高速內部或外部時鐘PLL倍頻所得。

所以最終串列埠的波特率受高速時鐘的影響。

在這裡插入圖片描述

  • 問題解決

首先找到自己板子上外部晶振,並確定它的大小。

在這裡插入圖片描述

▲ 博主機板子上晶振是8Mhz

在官方標準庫中,外部時脈頻率設定預設 25MHz 的晶振。

而我們需要將外部時脈頻率設定成適合自己板子的

找到 stm32f4xx.h ,在 .h 檔案120行左右的地方,預設是這樣的:

/**
 * @brief In the following line adjust the value of External High Speed oscillator (HSE)
   used in your application 
   
   Tip: To avoid modifying this file each time you need to use different HSE, you
        can define the HSE value in your toolchain compiler preprocessor.
  */    
#if !defined  (HSE_VALUE) 
  #define HSE_VALUE    ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
  
#endif /* HSE_VALUE */
▲ 預設25Mhz

下面只需定義一下自己開發板的外部時鐘源頻率即可:(加個宏定義

/**
 * @brief In the following line adjust the value of External High Speed oscillator (HSE)
   used in your application 
   
   Tip: To avoid modifying this file each time you need to use different HSE, you
        can define the HSE value in your toolchain compiler preprocessor.
  */    
	
#define HSE_VALUE   ((uint32_t)8000000)    // 定義自己開發版上的外部時鐘源頻率
#if !defined  (HSE_VALUE) 
  #define HSE_VALUE    ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
  
#endif /* HSE_VALUE */

附:如果串列埠助手沒有收到任何東西,請檢查連線 TXRX 端子的杜邦線是否鬆動。


  • 總結

  • 對於 stm32 的 F1 和 F4 等系列,如果出現串列埠通訊出現亂碼的問題,都可以嘗試使用上述方法解決。

  • 自己開發板上的外部晶振要了解,如果某一匯流排的時鐘來源於外部時鐘源,自己使用的外設恰好掛靠在該匯流排上,利用官方標準庫,一定要將 stm32f4xx.h 檔案中相關設定加以修改。


【參考文獻】
[1]:https://blog.csdn.net/qq_34179721/article/details/97427395?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-2


  本次的分享就到這裡


11

好書不厭百回讀,熟讀自知其中意。將學習成為習慣,用知識改變命運,用部落格見證成長,用行動證明努力。
如果我的部落格對你有幫助、如果你喜歡我的部落格內容,請 「點贊」 「評論」 「收藏」 一鍵三連哦!
聽說 👉 點贊 👈 的人運氣不會太差,每一天都會元氣滿滿呦!^ _ ^ ❤️ ❤️ ❤️
碼字不易,大家的支援就是我堅持下去的動力。點贊後不要忘了👉關注👈我哦!
更多精彩內容請前往 AXYZdong的部落格


如果以上內容有任何錯誤或者不準確的地方,歡迎在下面👇留個言。或者你有更好的想法,歡迎一起交流學習~~~