資料介紹
使用開發(fā)板的USART作為UART通信,在前調(diào)用BSP_Init()函數(shù)初始化開發(fā)板,串口上傳輸?shù)臄?shù)據(jù)出錯(cuò):'a'變成0xfa或0xfe;
【在這個(gè)問題解決之后,回頭總結(jié)下,在解決問題時(shí):
1.預(yù)計(jì)有可能造成出錯(cuò)的原因(這個(gè)可能需要一些經(jīng)驗(yàn),但是思維方式需要這樣的猜測(cè),從系統(tǒng)內(nèi)外,可以先羅列出盡可能有的原因,后面再一一排除)
2.盡可能的定位出錯(cuò)的地方(比如這里通過在線調(diào)試,確定在修改時(shí)鐘后,可以解決數(shù)據(jù)發(fā)送的不正確)
3.推測(cè)并排除次因,找出主因,往深一步探測(cè) 】
1:猜測(cè)原因。
外因:串口接收的過程受干擾
內(nèi)因:A.端口設(shè)置有問題 B.USART的波特率設(shè)置有問題
2:定位錯(cuò)誤
在剛開始時(shí)通過屏蔽BSP_Init()發(fā)現(xiàn)功能正常,再具體定位到BSP_Init()里面的SYSCLK_Frequency時(shí)鐘設(shè)置,發(fā)現(xiàn)例程中默認(rèn)的是72M,但是改為36M,就沒有問題,應(yīng)該是時(shí)鐘方面的設(shè)置問題,具體的問題做何解析?
3:推測(cè)排除,深究
外因內(nèi)因很好排除,數(shù)據(jù)既然在波特率低時(shí)能正常通信,可能不是端口設(shè)置的問題,應(yīng)該是波特率的問題,??从脩羰謨?cè)該節(jié)的資料:
注:
1.CPU 的時(shí)鐘頻率越低,則某一特定波特率的誤差也越低??梢赃_(dá)到的波特率上限可以由這組數(shù)據(jù)得到。
2.只有USART1 使用PCLK2(最高72MHz)。其它USART使用PCLK1(最高36MHz)。
USART的波特率的計(jì)算公式:
USARTDIV是一個(gè)無(wú)符號(hào)的定點(diǎn)數(shù)。這12位的值設(shè)置在USART_BRR寄存器。那么USARTDIV與USART_BRR的關(guān)系又是怎么樣的?
加入U(xiǎn)SARTDIV=27.75;那么USART_BRR=0x1B(27)+0XC(0.75*16)=0X1BC;同理可以從USART_BRR推出USARTDIV的值;
假設(shè)fck=36000000;Tx=115200;=>USARTDIV=19.53125;所以0x13+(0.53125*16=8.5)=>0x13+0x9=0x139;所以實(shí)際上是0x139產(chǎn)生的波特率:115015.97(誤差率為0.15%);
===》理論最大波特率:36000000/(16*1.0)=2.25M(USARTDIV最小為1.0)
繼續(xù)往下查,對(duì)于SYSCLK_Frequency最高72M,運(yùn)行應(yīng)該沒有問題,但是目前有問題;順藤摸瓜,查看各個(gè)時(shí)鐘控制器,發(fā)現(xiàn)時(shí)鐘設(shè)置路徑:HSE-->PREDIV2-->PLL2-->PREDIV1-->PLL-->SYSCLK;
發(fā)現(xiàn)其中有問題:HSE(25M),PREDIV2(源代碼設(shè)置是2分頻),PLL2(8倍頻),PREDIV1(9倍頻),SYSCLK是算不出72M的,這時(shí)72M的算法其實(shí)已經(jīng)超過72M,所以給USART2時(shí),波特率計(jì)算時(shí)會(huì)出現(xiàn)問題;將PREDIV2(改為5分頻就對(duì)了);
這就是為什么調(diào)用BSP_Init()或者SystemInit會(huì)出問題,他們都調(diào)用SetSysClock(),再調(diào)用SetSysClockTo72()【宏定義72M】,同時(shí)將系統(tǒng)時(shí)鐘改為36M時(shí)不會(huì)出問題,因?yàn)榇藭r(shí)調(diào)用的不是出問題的SetSysClockTo72(),而在之前用的是出錯(cuò)的SetSysClockTo72()卻沒有發(fā)現(xiàn)問題,是因?yàn)橄到y(tǒng)時(shí)鐘雖沒有在預(yù)設(shè)值,但是系統(tǒng)還足以正常工作,但是一旦添加串口,波特率設(shè)置就會(huì)有很大的偏差,數(shù)據(jù)傳輸就出錯(cuò)。
1:參考代碼其實(shí)里面是有很多問題的
2:我們應(yīng)該盡可能的多閱讀參考代碼,利用其中的資源,避免重復(fù)造輪子。
2:用串口終端軟件顯示字符串,連續(xù)發(fā)送幾個(gè)字符串時(shí),“xxxx/n”,包含了換行轉(zhuǎn)義字符,但是就是不會(huì)換行?
通過調(diào)試,發(fā)現(xiàn)在存儲(chǔ)空間,轉(zhuǎ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ā)送就不會(huì)出現(xiàn)這種現(xiàn)象,或者一句句調(diào)試打印也不會(huì)出現(xiàn)不換行的現(xiàn)象,斷定是連續(xù)發(fā)送的時(shí)間間隔太短,軟件還沒來(lái)得及換行,就又重新顯示新數(shù)據(jù),那么就在USART_SendString的尾部加了延時(shí),就解決問題了。
- 智嵌STM32F107網(wǎng)絡(luò)互聯(lián)開發(fā)板V2.2原理圖 19次下載
- RT-Thread libmodbus RS485 RTU主機(jī)調(diào)試 - STM32F107VCT6
- 使用STM32CubeMX 快速生成 USB HID 工程 - STM32F107VCT6
- STM32V107VCT6,基于HAL庫(kù)的用IO口模擬I2C的0.96寸OLED驅(qū)動(dòng)
- MCU-stm32f107vc line block diagram(芯片集成電路內(nèi)部功能單元電路方框圖)
- 基于STM32F103C8T6開發(fā)板控制的OLED顯示 78次下載
- STM32F107單片機(jī)開發(fā)板的模板文件免費(fèi)下載 71次下載
- STM32F107官方開發(fā)板原理圖及PCB資料免費(fèi)下載 0次下載
- STM32F107VCT6+DP83848 移植 LWip-1.4.1 筆記 119次下載
- STM32F107開發(fā)板的學(xué)習(xí)筆記 52次下載
- GD32F107VCT6 Demo板原理圖及使用說明 209次下載
- 深入STM32F107VCT6的串口通信 98次下載
- STM32F107開發(fā)板用戶手冊(cè)V1.0 74次下載
- 智嵌 STM32F107網(wǎng)絡(luò)互聯(lián)開發(fā)板V2.2原理圖 128次下載
- STM32F 107 開發(fā)板用戶手冊(cè)(User Manual) 12次下載
- 正點(diǎn)原子stm32f1 nano開發(fā)板簡(jiǎn)介 1795次閱讀
- 微雪電子STM32開發(fā)板 Open32F3-D簡(jiǎn)介 1464次閱讀
- 微雪電子STM32開發(fā)板 Open32F3-D簡(jiǎn)介 1511次閱讀
- 微雪電子STM32開發(fā)板 Open32F3-D簡(jiǎn)介 1522次閱讀
- 微雪電子STM32開發(fā)板 Open32F0-D簡(jiǎn)介 1516次閱讀
- 微雪電子STM32開發(fā)板 Open107V簡(jiǎn)介 1397次閱讀
- 微雪電子STM32F446RET6 STM32開發(fā)板簡(jiǎn)介 5678次閱讀
- 微雪電子STM32F411RET6 STM32開發(fā)板簡(jiǎn)介 6659次閱讀
- 微雪電子STM32F469NIH6開發(fā)板 學(xué)習(xí)板簡(jiǎn)介 4159次閱讀
- 微雪電子32F746GDISCOVERY STM32F7開發(fā)板簡(jiǎn)介 4040次閱讀
- 微雪電子STM32F3Discovery 開發(fā)板簡(jiǎn)介 3605次閱讀
- dfrobotSTM32 Cortex M3開發(fā)板簡(jiǎn)介 1248次閱讀
- 微雪電子STM32開發(fā)板 Open32F0-D簡(jiǎn)介 1334次閱讀
- 基于STM32F107VCT6微控制器的控制系統(tǒng)解決方案 7178次閱讀
- stm32開發(fā)板哪個(gè)好 5.5w次閱讀
下載排行
本周
- 1TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 2開關(guān)電源基礎(chǔ)知識(shí)
- 5.73 MB | 6次下載 | 免費(fèi)
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設(shè)計(jì)
- 0.60 MB | 3次下載 | 免費(fèi)
- 5基于FPGA的光纖通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 0.61 MB | 2次下載 | 免費(fèi)
- 6基于FPGA的C8051F單片機(jī)開發(fā)板設(shè)計(jì)
- 0.70 MB | 2次下載 | 免費(fèi)
- 751單片機(jī)窗簾控制器仿真程序
- 1.93 MB | 2次下載 | 免費(fèi)
- 8基于51單片機(jī)的RGB調(diào)色燈程序仿真
- 0.86 MB | 2次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33564次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21548次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6653次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537796次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191185次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183278次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多