資料介紹
使用開發(fā)板的USART作為UART通信,在前調用BSP_Init()函數(shù)初始化開發(fā)板,串口上傳輸?shù)臄?shù)據(jù)出錯:'a'變成0xfa或0xfe;
【在這個問題解決之后,回頭總結下,在解決問題時:
1.預計有可能造成出錯的原因(這個可能需要一些經(jīng)驗,但是思維方式需要這樣的猜測,從系統(tǒng)內外,可以先羅列出盡可能有的原因,后面再一一排除)
2.盡可能的定位出錯的地方(比如這里通過在線調試,確定在修改時鐘后,可以解決數(shù)據(jù)發(fā)送的不正確)
3.推測并排除次因,找出主因,往深一步探測 】
1:猜測原因。
外因:串口接收的過程受干擾
內因:A.端口設置有問題 B.USART的波特率設置有問題
2:定位錯誤
在剛開始時通過屏蔽BSP_Init()發(fā)現(xiàn)功能正常,再具體定位到BSP_Init()里面的SYSCLK_Frequency時鐘設置,發(fā)現(xiàn)例程中默認的是72M,但是改為36M,就沒有問題,應該是時鐘方面的設置問題,具體的問題做何解析?
3:推測排除,深究
外因內因很好排除,數(shù)據(jù)既然在波特率低時能正常通信,可能不是端口設置的問題,應該是波特率的問題,常看用戶手冊該節(jié)的資料:
注:
1.CPU 的時鐘頻率越低,則某一特定波特率的誤差也越低。可以達到的波特率上限可以由這組數(shù)據(jù)得到。
2.只有USART1 使用PCLK2(最高72MHz)。其它USART使用PCLK1(最高36MHz)。
USART的波特率的計算公式:
USARTDIV是一個無符號的定點數(shù)。這12位的值設置在USART_BRR寄存器。那么USARTDIV與USART_BRR的關系又是怎么樣的?
加入USARTDIV=27.75;那么USART_BRR=0x1B(27)+0XC(0.75*16)=0X1BC;同理可以從USART_BRR推出USARTDIV的值;
假設fck=36000000;Tx=115200;=>USARTDIV=19.53125;所以0x13+(0.53125*16=8.5)=>0x13+0x9=0x139;所以實際上是0x139產生的波特率:115015.97(誤差率為0.15%);
===》理論最大波特率:36000000/(16*1.0)=2.25M(USARTDIV最小為1.0)
繼續(xù)往下查,對于SYSCLK_Frequency最高72M,運行應該沒有問題,但是目前有問題;順藤摸瓜,查看各個時鐘控制器,發(fā)現(xiàn)時鐘設置路徑:HSE-->PREDIV2-->PLL2-->PREDIV1-->PLL-->SYSCLK;
發(fā)現(xiàn)其中有問題:HSE(25M),PREDIV2(源代碼設置是2分頻),PLL2(8倍頻),PREDIV1(9倍頻),SYSCLK是算不出72M的,這時72M的算法其實已經(jīng)超過72M,所以給USART2時,波特率計算時會出現(xiàn)問題;將PREDIV2(改為5分頻就對了);
這就是為什么調用BSP_Init()或者SystemInit會出問題,他們都調用SetSysClock(),再調用SetSysClockTo72()【宏定義72M】,同時將系統(tǒng)時鐘改為36M時不會出問題,因為此時調用的不是出問題的SetSysClockTo72(),而在之前用的是出錯的SetSysClockTo72()卻沒有發(fā)現(xiàn)問題,是因為系統(tǒng)時鐘雖沒有在預設值,但是系統(tǒng)還足以正常工作,但是一旦添加串口,波特率設置就會有很大的偏差,數(shù)據(jù)傳輸就出錯。
1:參考代碼其實里面是有很多問題的
2:我們應該盡可能的多閱讀參考代碼,利用其中的資源,避免重復造輪子。
2:用串口終端軟件顯示字符串,連續(xù)發(fā)送幾個字符串時,“xxxx/n”,包含了換行轉義字符,但是就是不會換行?
通過調試,發(fā)現(xiàn)在存儲空間,轉義字符‘/n’是正確的0x0a,
USART_SendString(USART2,Menu[0]);
USART_SendString(USART2,Menu[1]);
USART_SendString(USART2,Menu[2]);
USART_SendString(USART2,Menu[3]);
但是不連續(xù)發(fā)送就不會出現(xiàn)這種現(xiàn)象,或者一句句調試打印也不會出現(xiàn)不換行的現(xiàn)象,斷定是連續(xù)發(fā)送的時間間隔太短,軟件還沒來得及換行,就又重新顯示新數(shù)據(jù),那么就在USART_SendString的尾部加了延時,就解決問題了。
- 智嵌STM32F107網(wǎng)絡互聯(lián)開發(fā)板V2.2原理圖 22次下載
- RT-Thread libmodbus RS485 RTU主機調試 - STM32F107VCT6
- 使用STM32CubeMX 快速生成 USB HID 工程 - STM32F107VCT6
- STM32V107VCT6,基于HAL庫的用IO口模擬I2C的0.96寸OLED驅動
- MCU-stm32f107vc line block diagram(芯片集成電路內部功能單元電路方框圖)
- 基于STM32F103C8T6開發(fā)板控制的OLED顯示 86次下載
- STM32F107單片機開發(fā)板的模板文件免費下載 85次下載
- STM32F107官方開發(fā)板原理圖及PCB資料免費下載 0次下載
- STM32F107VCT6+DP83848 移植 LWip-1.4.1 筆記 126次下載
- STM32F107開發(fā)板的學習筆記 52次下載
- GD32F107VCT6 Demo板原理圖及使用說明 209次下載
- 深入STM32F107VCT6的串口通信 103次下載
- STM32F107開發(fā)板用戶手冊V1.0 82次下載
- 智嵌 STM32F107網(wǎng)絡互聯(lián)開發(fā)板V2.2原理圖 130次下載
- STM32F 107 開發(fā)板用戶手冊(User Manual) 13次下載
- 正點原子stm32f1 nano開發(fā)板簡介 4.5k次閱讀
- 微雪電子STM32開發(fā)板 Open32F3-D簡介 2.1k次閱讀
- 微雪電子STM32開發(fā)板 Open32F3-D簡介 2.2k次閱讀
- 微雪電子STM32開發(fā)板 Open32F3-D簡介 2.8k次閱讀
- 微雪電子STM32開發(fā)板 Open32F0-D簡介 2.2k次閱讀
- 微雪電子STM32開發(fā)板 Open107V簡介 2.5k次閱讀
- 微雪電子STM32F446RET6 STM32開發(fā)板簡介 7.4k次閱讀
- 微雪電子STM32F411RET6 STM32開發(fā)板簡介 8.4k次閱讀
- 微雪電子STM32F469NIH6開發(fā)板 學習板簡介 5.1k次閱讀
- 微雪電子32F746GDISCOVERY STM32F7開發(fā)板簡介 5.4k次閱讀
- 微雪電子STM32F3Discovery 開發(fā)板簡介 4.7k次閱讀
- dfrobotSTM32 Cortex M3開發(fā)板簡介 2.4k次閱讀
- 微雪電子STM32開發(fā)板 Open32F0-D簡介 2.2k次閱讀
- 基于STM32F107VCT6微控制器的控制系統(tǒng)解決方案 7.9k次閱讀
- stm32開發(fā)板哪個好 5.8w次閱讀
下載排行
本周
- 1冷柜-電氣控制系統(tǒng)講解
- 13.68 MB | 4次下載 | 10 積分
- 2安川A1000變頻器中文版說明書
- 20.16 MB | 3次下載 | 3 積分
- 3直流電路的組成和基本定律
- 1.67 MB | 2次下載 | 免費
- 4丹佛斯2800系列變頻器說明書
- 8.00 MB | 1次下載 | 5 積分
- 5PC8011同步開關型降壓3.5A單節(jié)鋰電池充電管理電路技術手冊
- 0.74 MB | 1次下載 | 免費
- 6ES7243E+ES8311音頻錄制與播放電路資料
- 0.06 MB | 1次下載 | 5 積分
- 7SDM02 激光測距模塊產品手冊
- 0.43 MB | 1次下載 | 免費
- 8SDFM 激光測距模塊模組手冊
- 0.54 MB | 1次下載 | 免費
本月
- 1CH341編程器軟件NeoProgrammer_2.2.0.10
- 20.47 MB | 170次下載 | 1 積分
- 22025智能家居傳感器市場分析及創(chuàng)新應用
- 3.11 MB | 43次下載 | 免費
- 3RV1126B系列開發(fā)板產品資料
- 4.19 MB | 18次下載 | 免費
- 4CH341編程軟件下載
- 2.50 MB | 16次下載 | 5 積分
- 5全志系列-米爾基于T153核心板開發(fā)板 四核異構、3路千兆網(wǎng),賦能多元化工業(yè)場景
- 3.05 MB | 12次下載 | 免費
- 6【開源】60余套STM32單片機、嵌入式Linux、物聯(lián)網(wǎng)、人工智能項目案例及入門學習資源包
- 10.55 MB | 8次下載 | 免費
- 7冷柜-電氣控制系統(tǒng)講解
- 13.68 MB | 4次下載 | 10 積分
- 8特斯拉MODEL S車載充電機主電路回路原理圖
- 0.81 MB | 4次下載 | 3 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935137次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233094次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191448次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183356次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81604次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73824次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65991次下載 | 10 積分
電子發(fā)燒友App





創(chuàng)作
發(fā)文章
發(fā)帖
提問
發(fā)資料
發(fā)視頻
上傳資料賺積分
評論