本人利用的是中國移動贈送的麒麟開發板,在進行串口通信的實驗時,采用正點原子的代碼,發現會一直出現亂碼的情況。經過兩天時間的排查,最終發現是晶振的問題,麒麟開發板使用的外部晶振是12M的,但是正點原子的代碼使用的是8M的晶振,下面演示修改前后的變化過程。(注意,波特率的設置也需要一樣)
利用串口1需要發送的內容:
1.png (68.2 KB, 下載次數: 72)
下載附件
2019-10-9 09:56 上傳
串口接收到的信息:
2.png (80.63 KB, 下載次數: 68)
下載附件
2019-10-9 09:57 上傳
修改system_stm32f10x.c文件中的晶振分頻為6分頻,因為自己用的麒麟開發板是12M的,12×9 = 108M,需要改成六分頻,12×6 = 72M:
3.png (107.61 KB, 下載次數: 74)
下載附件
2019-10-9 09:58 上傳
現在修改為六分頻:
4.png (123.91 KB, 下載次數: 67)
下載附件
2019-10-9 09:58 上傳
我們再來看一次現在是不是不亂碼了,發現還是亂碼:
5.png (74.58 KB, 下載次數: 75)
下載附件
2019-10-9 09:59 上傳
接下來修改stm32f10x.h文件中的宏定義,看到默認的是8000000的,我們把它改成我們需要的12000000
6.png (51.4 KB, 下載次數: 68)
下載附件
2019-10-9 09:59 上傳
7.png (71.59 KB, 下載次數: 75)
下載附件
2019-10-9 10:00 上傳
現在再來看看上位機接收到的數據吧:終于正常啦~
8.png (67.87 KB, 下載次數: 70)
下載附件
2019-10-9 10:00 上傳
心得:在玩stm32這種資源豐富的開發板的時候,一定要注意開發板的晶振和代碼里設置的晶振是不是一樣的,不然就會出現很多異常的問題
|