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

文章目錄
- 問題產生
- 先排查這兩個問題
- 1.USB轉串口的問題
- 2.波特率不同步的問題
- 外部晶振對串口的影響
- 問題解決
- 總結
- 開發板: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 */
附:如果串口助手沒有收到任何東西,請檢查連接 TX 、RX 端子的杜邦線是否松動,
-
總結
-
對于 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
??本次的分享就到這里

好書不厭百回讀,熟讀自知其中意,將學習成為習慣,用知識改變命運,用博客見證成長,用行動證明努力,
如果我的博客對你有幫助、如果你喜歡我的博客內容,請 “點贊” “評論” “收藏” 一鍵三連哦!
聽說 👉 點贊 👈 的人運氣不會太差,每一天都會元氣滿滿呦!^ _ ^ ?? ?? ??
碼字不易,大家的支持就是我堅持下去的動力,點贊后不要忘了👉關注👈我哦!
更多精彩內容請前往 AXYZdong的博客
如果以上內容有任何錯誤或者不準確的地方,歡迎在下面👇留個言,或者你有更好的想法,歡迎一起交流學習~~~
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/151904.html
標籤:java
上一篇:C的gets和strcat的使用

