你的位置:首頁(yè) > 測(cè)試測(cè)量 > 正文
萬(wàn)變不離其宗之單片機(jī)串口共性問(wèn)題
發(fā)布時(shí)間:2020-07-22 責(zé)任編輯:lina
【導(dǎo)讀】單片機(jī)開(kāi)發(fā)串口是應(yīng)用最為廣泛的通信接口,也是最為簡(jiǎn)單的通信接口之一,但是其中的一些要點(diǎn)你是否明了呢?來(lái)看看本人對(duì)串口的一些總結(jié),當(dāng)然這個(gè)總結(jié)并不能面面俱到,只是將個(gè)人認(rèn)為具有共性以及相對(duì)比較重要的點(diǎn)做了些梳理。
啥是串口?
首先這玩意兒分兩種:
●通用異步收發(fā)器(UART)是用于異步串行通信的一種物理層標(biāo)準(zhǔn),其中數(shù)據(jù)格式和傳輸速度是可配置的。
●通用同步收發(fā)器(USART)是一種串行接口設(shè)備,可以對(duì)其進(jìn)行編程以進(jìn)行異步或同步通信。
數(shù)據(jù)格式
線(xiàn)上空閑、無(wú)數(shù)據(jù)狀態(tài)為常高電平,故邏輯低定義為起始位。
●起始位:總是 1 位
●數(shù)據(jù)位:常見(jiàn)的有 8 位或 9 位。
校驗(yàn)位
奇校驗(yàn)
偶校驗(yàn)
無(wú)校驗(yàn)
●停止位:
1 位
2 位
●波特率:bit rate 就是位/秒的概念,就是 1 秒傳送多少位的概念。常見(jiàn)的波特率有哪些呢?
這里須注意的要點(diǎn):
一個(gè)有效字節(jié)的傳輸時(shí)間怎么算?
比如 9600 下,1 位起始位,8 位數(shù)據(jù)位,奇校驗(yàn),1 位停止位,則
為什么要理解清楚這個(gè)概念呢,因?yàn)樵趹?yīng)用中需要計(jì)算數(shù)據(jù)吞吐率問(wèn)題,就比如一個(gè)應(yīng)用是數(shù)據(jù)采集串口傳輸問(wèn)題,需要計(jì)算采集的位速率需要小于或等于傳輸波特率,否則數(shù)據(jù)就來(lái)不及傳。當(dāng)然如果說(shuō)你有足夠大的緩沖區(qū)可以臨時(shí)存儲(chǔ),但是如果進(jìn)來(lái)太快,而傳出速度跟不上,多大的緩沖都會(huì)滿(mǎn)!
●校驗(yàn)位有用嗎?當(dāng)你的傳輸介質(zhì)處于一個(gè)有干擾的場(chǎng)景下,校驗(yàn)位就可以從物理層檢測(cè)出錯(cuò)誤。
●理解數(shù)據(jù)編碼方式有啥意義呢?比如在調(diào)試中你可以利用邏輯分析直接去解析收發(fā)線(xiàn)上的數(shù)據(jù)報(bào)文。
●應(yīng)用電路設(shè)計(jì)的時(shí)候 RX-TX 相連,很多初學(xué)者容易在這里踩坑!
●常見(jiàn)的傳輸位序?yàn)榈陀行辉谇啊?/div>
●對(duì)于波特率而言需要注意波特率發(fā)生器有可能帶來(lái)誤碼問(wèn)題
啥是 UART?
兩邊分別代表兩個(gè)通信的設(shè)備,單從 UART 編程的角度講收發(fā)不需要物理同步握手,想發(fā)就發(fā)。圖中箭頭代表數(shù)據(jù)信息流向。RX 表示接收數(shù)據(jù),TX 表示發(fā)送數(shù)據(jù)。數(shù)據(jù)總是從發(fā)送端傳遞到接收端,這就是為啥 RX 連接 TX,TX 連 RX 的原因。
啥是 USART?
同步簡(jiǎn)單說(shuō),收發(fā)不可自如,不可以想發(fā)就發(fā),收發(fā)需要利用硬件 IO 口進(jìn)行握手,RTS/CTS 就是用于同步的握手信號(hào):
●RTS:Ready to send,請(qǐng)求發(fā)送,用于在當(dāng)前傳輸結(jié)束時(shí)阻止數(shù)據(jù)發(fā)送。
●CTS:clear to send,清除發(fā)送,用于指示 USART 已準(zhǔn)備好接收數(shù)據(jù)。
這個(gè)對(duì)于普通應(yīng)用而言并不常見(jiàn),這里不做詳細(xì)展開(kāi),需要用到的時(shí)候只需要對(duì)應(yīng)收發(fā)時(shí)控制握手信號(hào)即可。
編程策略
對(duì)于不同的單片機(jī),其硬件體系各異,寄存器也差異很大,但是從收發(fā)編程策略角度而言,常見(jiàn)有下面三種方式:
●查詢(xún)發(fā)送/中斷接收模式
●收發(fā)中斷模式
●DMA 模式
查詢(xún)發(fā)送/中斷接收模式
這里以偽代碼方式描述一下:
對(duì)于接收而言,如采用查詢(xún)模式則幾乎是沒(méi)有任何應(yīng)用價(jià)值,因?yàn)橥獠繑?shù)據(jù)不知道什么時(shí)候會(huì)到來(lái),所以查詢(xún)接受就不描述了,這里描述一下中斷接收。
中斷接收需要考慮的幾個(gè)要點(diǎn):
●斷幀:這就取決于協(xié)議怎么制定了,比如應(yīng)用協(xié)議定義的是 ASCII 碼方式,就可以定義同步頭、同步尾,比如 AT 指令的解析,做邏輯判斷幀頭、幀尾即可。但是如果傳輸?shù)氖?16 進(jìn)制數(shù)據(jù),比如 MODBUS-RTU 其斷幀采用的是 3.5 個(gè)字節(jié)時(shí)間沒(méi)有新的字節(jié)接收到,則認(rèn)為收到完整的幀了。
●如何保證幀的完整性,一般會(huì)在報(bào)文尾部加校驗(yàn),比較常用的校驗(yàn)?zāi)J接?CRC 校驗(yàn)算法。
●不同的單片機(jī)開(kāi)發(fā)環(huán)境對(duì)于中斷向量的處理方式略有不同,需要根據(jù)各自芯片的特點(diǎn)進(jìn)行處理。比如 51 單片機(jī),其發(fā)送/接收都共享一個(gè)中斷向量號(hào)。
收發(fā)中斷模式
還需要考慮的是,對(duì)于 UART 硬件層面的出錯(cuò)處置,以 STM32 為例,就可能有下面的錯(cuò)誤可能發(fā)生:
●溢出錯(cuò)誤
●噪聲檢測(cè)
●幀錯(cuò)誤
●奇偶校驗(yàn)錯(cuò)誤
另外不同的單片機(jī)其底層硬件實(shí)現(xiàn)差異也不較大,比如有的硬件發(fā)送緩沖是單字節(jié)的緩沖,有的則具有 FIFO,這些在選型編程時(shí)都需要綜合考慮。
DMA 模式
DMA 發(fā)送模式而言,大致分這樣幾步:
●初始化 UART 為 DMA 發(fā)送模式,開(kāi)啟 DMA 結(jié)束中斷,并寫(xiě)好 DMA 傳輸結(jié)束中斷處理函數(shù)
●準(zhǔn)備待發(fā)送報(bào)文,幀頭、幀尾、校驗(yàn)處理
●將待發(fā)送報(bào)文緩沖區(qū)首地址賦值給 DMA 源地址,DMA 目標(biāo)地址設(shè)置為 UART 發(fā)送寄存器,設(shè)置好發(fā)送長(zhǎng)度。
●啟動(dòng) DMA 傳輸,剩下傳輸完成就會(huì)進(jìn)入傳輸結(jié)束中斷處理函數(shù)。
●DMA 接收模式而言,大致分這樣幾步:
●初始化 UART 為 DMA 接收模式,開(kāi)啟 DMA 結(jié)束中斷,并寫(xiě)好 DMA 傳輸結(jié)束中斷處理函數(shù)
中斷處理函數(shù)中標(biāo)記接收到幀,對(duì)于使用 RTOS 而言,還可以使用的機(jī)制是利用 RTOS 的事件機(jī)制、消息機(jī)●制進(jìn)行通知有新的幀接收到了。
●對(duì)于 DMA 接收模式而言,對(duì)于變長(zhǎng)幀的處理較為不利,所以如果想使用 DMA 接收,制定協(xié)議時(shí)盡量考慮將幀長(zhǎng)度固定,這樣處理會(huì)方便些。
總結(jié)一下
單片機(jī)串口是一個(gè)需要好好掌握的內(nèi)容,這里總結(jié)了一些個(gè)人經(jīng)驗(yàn),盡量將一些個(gè)人共性的東西總結(jié)出來(lái)。至于實(shí)際實(shí)現(xiàn)而言,由于芯片體系差異較多,具體代碼各異。但個(gè)人認(rèn)為處置的思路方法卻是基本一致。所以本文除了描述串口本身的細(xì)節(jié)而言,想表達(dá)的一個(gè)額外的觀(guān)點(diǎn)是:
對(duì)于一些技術(shù)點(diǎn)盡量學(xué)會(huì)將其共性的東西剝離總結(jié)出來(lái)。
總結(jié)、概括、剝離抽象是一個(gè)比較好的學(xué)習(xí)思路,不用對(duì)具體的硬件死記,萬(wàn)變不離其宗。
如果本文有喜歡的朋友,后面陸續(xù)可以總結(jié)一下I2C/SPI等常用接口。
免責(zé)聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問(wèn)題,請(qǐng)電話(huà)或者郵箱聯(lián)系小編進(jìn)行處理。
特別推薦
- 兆易創(chuàng)新GD32F30x STL軟件測(cè)試庫(kù)獲得德國(guó)萊茵TüV IEC 61508功能安全認(rèn)證
- 芯科科技第三代無(wú)線(xiàn)開(kāi)發(fā)平臺(tái)引領(lǐng)物聯(lián)網(wǎng)發(fā)展
- MSO 4B 示波器為工程師帶來(lái)更多臺(tái)式功率分析工具
- 艾為電子推出新一代高線(xiàn)性度GNSS低噪聲放大器——AW15745DNR
- 瑞薩發(fā)布四通道主站IC和傳感器信號(hào)調(diào)節(jié)器, 以推動(dòng)不斷增長(zhǎng)的IO-Link市場(chǎng)
- e絡(luò)盟現(xiàn)貨供應(yīng) Abracon 新推出的 AOTA 系列微型鑄型電感器
- 加賀富儀艾電子推出支持Wi-Fi 6和藍(lán)牙的無(wú)線(xiàn)局域網(wǎng)/藍(lán)牙組合模塊
技術(shù)文章更多>>
- 數(shù)字驅(qū)動(dòng)工業(yè),智能賦能制造 AMTS & AHTE SOUTH CHINA 2024同期會(huì)議全公開(kāi)!
- 團(tuán)體觀(guān)展招募!104CEF開(kāi)啟組團(tuán)觀(guān)眾通道,解鎖更多禮遇
- 觸摸式OLED顯示屏有望重新定義汽車(chē)用戶(hù)界面
- 用Python自動(dòng)化雙脈沖測(cè)試
- 揭秘電動(dòng)汽車(chē)中直流鏈路電容器的奧秘(上)
技術(shù)白皮書(shū)下載更多>>
- 車(chē)規(guī)與基于V2X的車(chē)輛協(xié)同主動(dòng)避撞技術(shù)展望
- 數(shù)字隔離助力新能源汽車(chē)安全隔離的新挑戰(zhàn)
- 汽車(chē)模塊拋負(fù)載的解決方案
- 車(chē)用連接器的安全創(chuàng)新應(yīng)用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門(mén)搜索
SPANSION
SRAM
SSD
ST
ST-ERICSSON
Sunlord
SynQor
s端子線(xiàn)
Taiyo Yuden
TDK-EPC
TD-SCDMA功放
TD-SCDMA基帶
TE
Tektronix
Thunderbolt
TI
TOREX
TTI
TVS
UPS電源
USB3.0
USB 3.0主控芯片
USB傳輸速度
usb存儲(chǔ)器
USB連接器
VGA連接器
Vishay
WCDMA功放
WCDMA基帶
Wi-Fi
友情鏈接(QQ:317243736)
我愛(ài)方案網(wǎng) ICGOO元器件商城 創(chuàng)芯在線(xiàn)檢測(cè) 芯片查詢(xún) 天天IC網(wǎng) 電子產(chǎn)品世界 無(wú)線(xiàn)通信模塊 控制工程網(wǎng) 電子開(kāi)發(fā)網(wǎng) 電子技術(shù)應(yīng)用 與非網(wǎng) 世紀(jì)電源網(wǎng) 21ic電子技術(shù)資料下載 電源網(wǎng) 電子發(fā)燒友網(wǎng) 中電網(wǎng) 中國(guó)工業(yè)電器網(wǎng) 連接器 礦山設(shè)備網(wǎng) 工博士 智慧農(nóng)業(yè) 工業(yè)路由器 天工網(wǎng) 乾坤芯 電子元器件采購(gòu)網(wǎng) 亞馬遜KOL 聚合物鋰電池 工業(yè)自動(dòng)化設(shè)備 企業(yè)查詢(xún) 工業(yè)路由器 元器件商城 連接器 USB中文網(wǎng) 今日招標(biāo)網(wǎng) 塑料機(jī)械網(wǎng) 農(nóng)業(yè)機(jī)械 中國(guó)IT產(chǎn)經(jīng)新聞網(wǎng) 高低溫試驗(yàn)箱
?
關(guān)閉
?
關(guān)閉