你的位置:首頁(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ù)格式
線上空閑、無(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ì)滿!
●校驗(yàn)位有用嗎?當(dāng)你的傳輸介質(zhì)處于一個(gè)有干擾的場(chǎng)景下,校驗(yàn)位就可以從物理層檢測(cè)出錯(cuò)誤。
●理解數(shù)據(jù)編碼方式有啥意義呢?比如在調(diào)試中你可以利用邏輯分析直接去解析收發(fā)線上的數(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è)額外的觀點(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)電話或者郵箱聯(lián)系小編進(jìn)行處理。
特別推薦
- 授權(quán)代理商貿(mào)澤電子供應(yīng)Same Sky多樣化電子元器件
- 使用合適的窗口電壓監(jiān)控器優(yōu)化系統(tǒng)設(shè)計(jì)
- ADI電機(jī)運(yùn)動(dòng)控制解決方案 驅(qū)動(dòng)智能運(yùn)動(dòng)新時(shí)代
- 倍福推出采用 TwinSAFE SC 技術(shù)的 EtherCAT 端子模塊 EL3453-0090
- TDK推出新的X系列環(huán)保型SMD壓敏電阻
- Vishay 推出新款采用0102、0204和 0207封裝的精密薄膜MELF電阻
- Microchip推出新款交鑰匙電容式觸摸控制器產(chǎn)品 MTCH2120
技術(shù)文章更多>>
- 意法半導(dǎo)體推出首款超低功耗生物傳感器,成為眾多新型應(yīng)用的核心所在
- 是否存在有關(guān) PCB 走線電感的經(jīng)驗(yàn)法則?
- 智能電池傳感器的兩大關(guān)鍵部件: 車(chē)規(guī)級(jí)分流器以及匹配的評(píng)估板
- Quobly與意法半導(dǎo)體攜手, 加快量子處理器制造進(jìn)程,實(shí)現(xiàn)大型量子計(jì)算解決方案
- DigiKey和MediaTek強(qiáng)強(qiáng)聯(lián)合,開(kāi)啟物聯(lián)網(wǎng)邊緣AI和連接功能新篇章
技術(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)搜索
單向可控硅
刀開(kāi)關(guān)
等離子顯示屏
低頻電感
低通濾波器
低音炮電路
滌綸電容
點(diǎn)膠設(shè)備
電池
電池管理系統(tǒng)
電磁蜂鳴器
電磁兼容
電磁爐危害
電動(dòng)車(chē)
電動(dòng)工具
電動(dòng)汽車(chē)
電感
電工電路
電機(jī)控制
電解電容
電纜連接器
電力電子
電力繼電器
電力線通信
電流保險(xiǎn)絲
電流表
電流傳感器
電流互感器
電路保護(hù)
電路圖
友情鏈接(QQ:317243736)
我愛(ài)方案網(wǎng) ICGOO元器件商城 創(chuàng)芯在線檢測(cè) 芯片查詢(xún) 天天IC網(wǎng) 電子產(chǎn)品世界 無(wú)線通信模塊 控制工程網(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)閉