比特率(Bitrate)
表示每秒鐘傳輸?shù)?code style="margin: 0px 2px;padding: 2px 4px;max-width: 100%;box-sizing: border-box !important;word-wrap: break-word !important;font-size: 14px;border-radius: 4px;background-color: rgba(27, 31, 35, 0.0470588);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(239, 112, 96);">二進(jìn)制位數(shù),單位為比特每秒(bit/s)。波特率(Baudrate)
表示每秒鐘傳送的碼元
符號的個數(shù),是衡量數(shù)據(jù)傳送速率的指標(biāo)。碼元
是通訊信號調(diào)制的概念,通訊中常用時間間隔相同的符號來表示一個二進(jìn)制數(shù)字,這樣的信號稱為碼元。比如串口通訊
)中一個碼元都是表示兩種狀態(tài),所以大家常常直接以波特率來表示比特率 。0xAA
(當(dāng)然,發(fā)送其它數(shù)據(jù)也是可以的)。我們的串口配置如下:發(fā)送信號線(TX)
:0xAA
,邏輯分析儀抓到的數(shù)據(jù)為:while
循環(huán)中發(fā)送數(shù)據(jù)0xAA
,所以就沒有空閑狀態(tài)。在這個實驗中,我們需要知道的是兩個點是:0xAA(10101010B)
,所以邏輯分析儀抓到的有效數(shù)據(jù)是01010101B
。TTL電平
,為正邏輯電平信號。邏輯分析儀抓到的數(shù)據(jù)0對應(yīng)著實際電壓0~0.5V
,數(shù)據(jù)1對應(yīng)著實際電壓2.4V-5V
,TTL電平標(biāo)準(zhǔn)
做對比的是RS-232電平標(biāo)準(zhǔn)
,如:COM 口
(也稱?DB9 接口
) ?:115200bps
。在串口通訊中,碼元只用1個二進(jìn)制數(shù)來表示(即只有0 和 1兩種狀態(tài)),所以波特率與比特率在數(shù)值上是相等的。而比特率表示的是每秒鐘傳輸?shù)?code style="margin: 0px 2px;padding: 2px 4px;max-width: 100%;box-sizing: border-box !important;word-wrap: break-word !important;font-size: 14px;border-radius: 4px;background-color: rgba(27, 31, 35, 0.0470588);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(239, 112, 96);">二進(jìn)制位數(shù),那我們知道傳一位數(shù)據(jù)的時間豈不是就可以反推出波特率是多少了嗎?從邏輯分析儀中,我們可以知道發(fā)送一位數(shù)據(jù)的時間如下:8.667us
,所以1秒鐘發(fā)送多少位數(shù)據(jù)是可以算出來的:115380bps
,與115200bps
很相近。最終肯定是有一定的誤差,這個誤差產(chǎn)生的原因包括邏輯分析儀的質(zhì)量及我們的測量環(huán)境等等因素。但是,這個誤差也是在允許的范圍內(nèi)的,可以看看串口助手接收到的數(shù)據(jù)是不是正確的:波特率對應(yīng)不上
,我們就得自己檢查我們的底層文件了,代碼中的某個與波特率計算相關(guān)的值(時鐘)與實際不匹配了,就會出現(xiàn)這樣的現(xiàn)象,比如之前我的一位同事就遇到這樣的情況就是這個原因?qū)е碌摹?/p>我們用STM32的時候,一般都是使用外部晶振,比如STM32F103
系列,可輸入的外部晶振的范圍是4~16MHz
:8M
的話,就出問題了(比如串口波特率就不正確了)。追根溯源,串口波特率是配進(jìn)USART_Init
函數(shù)中的,打開這個函數(shù):apbclock
變量,而這個值得來源從RCC_GetClocksFreq
函數(shù)來,再打開這個函數(shù):HSE_VALUE
這個值要與實際做對應(yīng)。遇到這種問題找誰說理去?經(jīng)驗就是不斷踩坑、不斷積累的一個過程,早點遇到坑可能也是一件好事。像類似底層的問題很少遇到,但是一旦遇到那就得比較棘手的問題了,需要很有耐心地去查找。能用穩(wěn)定的芯片是一件很幸福的事情,用不穩(wěn)定、不成熟的芯片的時候,那個才是真的難啊,遇到問題真是讓人懷疑人生啊,軟件、硬件、芯片都可能有問題……以上就是本次的筆記分享,希望各位喜歡!如有錯誤歡迎指出,謝謝!掃描二維碼,關(guān)注更多精彩內(nèi)容
單片機(jī)在控制本地的外圍期間時,信息的交互是通過8位并行數(shù)據(jù)總線進(jìn)行的,但是在較大規(guī)模的現(xiàn)代控制系統(tǒng)中,單片機(jī)還需要控制遠(yuǎn)端的設(shè)備,可以利用單片機(jī)的串行通信模塊,在學(xué)習(xí)了RS-232串口通信的原理和時序后,學(xué)習(xí)了利用RS-...
關(guān)鍵字: 串口通訊 單片機(jī) 數(shù)據(jù)傳輸在學(xué)習(xí)單片機(jī)和進(jìn)行單片機(jī)產(chǎn)品開發(fā)過程中,我們通常使用仿真器作為調(diào)試程序的有力工具。但仿真器價格昂貴,對于初學(xué)者和一般個人開發(fā)人員很難承受。為此,我們選用了帶ISP 功能的AT89S51/52 系列單片機(jī),不需要仿真器也能...
關(guān)鍵字: 串口通訊 在線系統(tǒng) 可編程器資源使用說明:2410+LINUX、UART(即RS-232串口)全雙工通信、RS-485半雙工通信局部程序框圖及其設(shè)計說明:調(diào)試記錄及調(diào)試結(jié)果:MODBUS總結(jié):...
關(guān)鍵字: 2410 串口通訊 modbus協(xié)議 ascii模式這兩天在某嵌入式系統(tǒng)做了個串口通訊程序,遇到了每次只接收8個字節(jié)的問題。相信很多人都遇到了。上網(wǎng)一查資料,找到串口配置結(jié)構(gòu)體struct termios中的c_cc[VTIME] 和?c_cc[VMI
關(guān)鍵字: 串口通訊 嵌入式系統(tǒng)