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