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