萬變不離其宗之單片機串口共性問題
發布時間:2020-07-22 責任編輯:lina
【導讀】單(dan)片(pian)機(ji)開(kai)發(fa)串(chuan)口(kou)是(shi)應(ying)用(yong)最(zui)為(wei)廣(guang)泛(fan)的(de)通(tong)信(xin)接(jie)口(kou),也(ye)是(shi)最(zui)為(wei)簡(jian)單(dan)的(de)通(tong)信(xin)接(jie)口(kou)之(zhi)一(yi),但(dan)是(shi)其(qi)中(zhong)的(de)一(yi)些(xie)要(yao)點(dian)你(ni)是(shi)否(fou)明(ming)了(le)呢(ne)?來(lai)看(kan)看(kan)本(ben)人(ren)對(dui)串(chuan)口(kou)的(de)一(yi)些(xie)總(zong)結(jie),當(dang)然(ran)這(zhe)個(ge)總(zong)結(jie)並(bing)不(bu)能(neng)麵(mian)麵(mian)俱(ju)到(dao),隻(zhi)是(shi)將(jiang)個(ge)人(ren)認(ren)為(wei)具(ju)有(you)共(gong)性(xing)以(yi)及(ji)相(xiang)對(dui)比(bi)較(jiao)重(zhong)要(yao)的(de)點(dian)做(zuo)了(le)些(xie)梳(shu)理(li)。
啥是串口?
首先這玩意兒分兩種:
●通用異步收發器(UART)是用於異步串行通信的一種物理層標準,其中數據格式和傳輸速度是可配置的。
●通用同步收發器(USART)是一種串行接口設備,可以對其進行編程以進行異步或同步通信。
數據格式

線上空閑、無數據狀態為常高電平,故邏輯低定義為起始位。
●起始位:總是 1 位
●數據位:常見的有 8 位或 9 位。
校驗位
奇校驗
偶校驗
無校驗
●停止位:
1 位
2 位
●波特率:bit rate 就是位/秒的概念,就是 1 秒傳送多少位的概念。常見的波特率有哪些呢?
這裏須注意的要點:

一個有效字節的傳輸時間怎麼算?

比如 9600 下,1 位起始位,8 位數據位,奇校驗,1 位停止位,則

為(wei)什(shen)麼(me)要(yao)理(li)解(jie)清(qing)楚(chu)這(zhe)個(ge)概(gai)念(nian)呢(ne),因(yin)為(wei)在(zai)應(ying)用(yong)中(zhong)需(xu)要(yao)計(ji)算(suan)數(shu)據(ju)吞(tun)吐(tu)率(lv)問(wen)題(ti),就(jiu)比(bi)如(ru)一(yi)個(ge)應(ying)用(yong)是(shi)數(shu)據(ju)采(cai)集(ji)串(chuan)口(kou)傳(chuan)輸(shu)問(wen)題(ti),需(xu)要(yao)計(ji)算(suan)采(cai)集(ji)的(de)位(wei)速(su)率(lv)需(xu)要(yao)小(xiao)於(yu)或(huo)等(deng)於(yu)傳(chuan)輸(shu)波(bo)特(te)率(lv),否(fou)則(ze)數(shu)據(ju)就(jiu)來(lai)不(bu)及(ji)傳(chuan)。當(dang)然(ran)如(ru)果(guo)說(shuo)你(ni)有(you)足(zu)夠(gou)大(da)的(de)緩(huan)衝(chong)區(qu)可(ke)以(yi)臨(lin)時(shi)存(cun)儲(chu),但(dan)是(shi)如(ru)果(guo)進(jin)來(lai)太(tai)快(kuai),而(er)傳(chuan)出(chu)速(su)度(du)跟(gen)不(bu)上(shang),多(duo)大(da)的(de)緩(huan)衝(chong)都(dou)會(hui)滿(man)!
●校驗位有用嗎?當你的傳輸介質處於一個有幹擾的場景下,校驗位就可以從物理層檢測出錯誤。
●理解數據編碼方式有啥意義呢?比如在調試中你可以利用邏輯分析直接去解析收發線上的數據報文。
●應用電路設計的時候 RX-TX 相連,很多初學者容易在這裏踩坑!
●常見的傳輸位序為低有效位在前。
●對於波特率而言需要注意波特率發生器有可能帶來誤碼問題
啥是 UART?

兩邊分別代表兩個通信的設備,單從 UART 編程的角度講收發不需要物理同步握手,想發就發。圖中箭頭代表數據信息流向。RX 表示接收數據,TX 表示發送數據。數據總是從發送端傳遞到接收端,這就是為啥 RX 連接 TX,TX 連 RX 的原因。
啥是 USART?

同步簡單說,收發不可自如,不可以想發就發,收發需要利用硬件 IO 口進行握手,RTS/CTS 就是用於同步的握手信號:
●RTS:Ready to send,請求發送,用於在當前傳輸結束時阻止數據發送。
●CTS:clear to send,清除發送,用於指示 USART 已準備好接收數據。
這個對於普通應用而言並不常見,這裏不做詳細展開,需要用到的時候隻需要對應收發時控製握手信號即可。
編程策略
對於不同的單片機,其硬件體係各異,寄存器也差異很大,但是從收發編程策略角度而言,常見有下麵三種方式:
●查詢發送/中斷接收模式
●收發中斷模式
●DMA 模式
查詢發送/中斷接收模式
這裏以偽代碼方式描述一下:

duiyujieshoueryan,rucaiyongzhaxunmoshizejihushimeiyourenheyingyongjiazhi,yinweiwaibushujubuzhidaoshenmeshihouhuidaolai,suoyizhaxunjieshoujiubumiaoshule,zhelimiaoshuyixiazhongduanjieshou。

中斷接收需要考慮的幾個要點:
●斷幀:這就取決於協議怎麼製定了,比如應用協議定義的是 ASCII 碼方式,就可以定義同步頭、同步尾,比如 AT 指令的解析,做邏輯判斷幀頭、幀尾即可。但是如果傳輸的是 16 進製數據,比如 MODBUS-RTU 其斷幀采用的是 3.5 個字節時間沒有新的字節接收到,則認為收到完整的幀了。
●如何保證幀的完整性,一般會在報文尾部加校驗,比較常用的校驗模式有 CRC 校驗算法。
●不同的單片機開發環境對於中斷向量的處理方式略有不同,需要根據各自芯片的特點進行處理。比如 51 單片機,其發送/接收都共享一個中斷向量號。
收發中斷模式

還需要考慮的是,對於 UART 硬件層麵的出錯處置,以 STM32 為例,就可能有下麵的錯誤可能發生:
●溢出錯誤
●噪聲檢測
●幀錯誤
●奇偶校驗錯誤
另外不同的單片機其底層硬件實現差異也不較大,比如有的硬件發送緩衝是單字節的緩衝,有的則具有 FIFO,這些在選型編程時都需要綜合考慮。
DMA 模式
DMA 發送模式而言,大致分這樣幾步:
●初始化 UART 為 DMA 發送模式,開啟 DMA 結束中斷,並寫好 DMA 傳輸結束中斷處理函數
●準備待發送報文,幀頭、幀尾、校驗處理
●將待發送報文緩衝區首地址賦值給 DMA 源地址,DMA 目標地址設置為 UART 發送寄存器,設置好發送長度。
●啟動 DMA 傳輸,剩下傳輸完成就會進入傳輸結束中斷處理函數。
●DMA 接收模式而言,大致分這樣幾步:
●初始化 UART 為 DMA 接收模式,開啟 DMA 結束中斷,並寫好 DMA 傳輸結束中斷處理函數
中斷處理函數中標記接收到幀,對於使用 RTOS 而言,還可以使用的機製是利用 RTOS 的事件機製、消息機●製進行通知有新的幀接收到了。
●對於 DMA 接收模式而言,對於變長幀的處理較為不利,所以如果想使用 DMA 接收,製定協議時盡量考慮將幀長度固定,這樣處理會方便些。
總結一下
單dan片pian機ji串chuan口kou是shi一yi個ge需xu要yao好hao好hao掌zhang握wo的de內nei容rong,這zhe裏li總zong結jie了le一yi些xie個ge人ren經jing驗yan,盡jin量liang將jiang一yi些xie個ge人ren共gong性xing的de東dong西xi總zong結jie出chu來lai。至zhi於yu實shi際ji實shi現xian而er言yan,由you於yu芯xin片pian體ti係xi差cha異yi較jiao多duo,具ju體ti代dai碼ma各ge異yi。但dan個ge人ren認ren為wei處chu置zhi的de思si路lu方fang法fa卻que是shi基ji本ben一yi致zhi。所suo以yi本ben文wen除chu了le描miao述shu串chuan口kou本ben身shen的de細xi節jie而er言yan,想xiang表biao達da的de一yi個ge額e外wai的de觀guan點dian是shi:
對於一些技術點盡量學會將其共性的東西剝離總結出來。
總結、概括、剝離抽象是一個比較好的學習思路,不用對具體的硬件死記,萬變不離其宗。
如果本文有喜歡的朋友,後麵陸續可以總結一下I2C/SPI等常用接口。
免責聲明:本文為轉載文章,轉載此文目的在於傳遞更多信息,版權歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權問題,請電話或者郵箱聯係小編進行處理。
特別推薦
- 噪聲中提取真值!瑞盟科技推出MSA2240電流檢測芯片賦能多元高端測量場景
- 10MHz高頻運行!氮矽科技發布集成驅動GaN芯片,助力電源能效再攀新高
- 失真度僅0.002%!力芯微推出超低內阻、超低失真4PST模擬開關
- 一“芯”雙電!聖邦微電子發布雙輸出電源芯片,簡化AFE與音頻設計
- 一機適配萬端:金升陽推出1200W可編程電源,賦能高端裝備製造
技術文章更多>>
- 突破工藝邊界,奎芯科技LPDDR5X IP矽驗證通過,速率達9600Mbps
- 通過直接、準確、自動測量超低範圍的氯殘留來推動反滲透膜保護
- 從技術研發到規模量產:恩智浦第三代成像雷達平台,賦能下一代自動駕駛!
- 從機械執行到智能互動:移遠Q-Robotbox助力具身智能加速落地
- 品英Pickering將亮相2026航空電子國際論壇,展示航電與電池測試前沿方案
技術白皮書下載更多>>
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
按鈕開關
白色家電
保護器件
保險絲管
北鬥定位
北高智
貝能科技
背板連接器
背光器件
編碼器型號
便攜產品
便攜醫療
變容二極管
變壓器
檳城電子
並網
撥動開關
玻璃釉電容
剝線機
薄膜電容
薄膜電阻
薄膜開關
捕魚器
步進電機
測力傳感器
測試測量
測試設備
拆解
場效應管
超霸科技


