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