色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

萬變不離其宗的單片機串口共性問題

電子設計 ? 來源:電子設計 ? 作者:電子設計 ? 2020-12-15 00:14 ? 次閱讀

首發:嵌入式客棧
作者:逸珺

導讀

單片機開發串口是應用最為廣泛的通信接口,也是最為簡單的通信接口之一,但是其中的一些要點你是否明了呢?來看看本人對串口的一些總結,當然這個總結并不能面面俱到,只是將個人認為具有共性以及相對比較重要的點做了些梳理。

啥是串口?

首先這玩意兒分兩種:

通用異步收發器(UART) 是用于異步串行通信的一種物理層標準,其中數據格式和傳輸速度是可配置的。

通用同步收發器(USART)是一種串行接口設備,可以對其進行編程以進行異步同步通信。

數據格式

線上空閑、無數據狀態為常高電平,故邏輯低定義為起始位。

起始位:總是 1 位

數據位:常見的有 8 位或 9 位。

校驗位

奇校驗

偶校驗

無校驗

停止位:

1 位

2 位

波特率:bit rate 就是位/秒的概念,就是 1 秒傳送多少位的概念。常見的波特率有哪些呢?

這里須注意的要點:

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

位數波特率

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

為什么要理解清楚這個概念呢,因為在應用中需要計算數據吞吐率問題,就比如一個應用是數據采集串口傳輸問題,需要計算采集的位速率需要小于或等于傳輸波特率,否則數據就來不及傳。當然如果說你有足夠大的緩沖區可以臨時存儲,但是如果進來太快,而傳出速度跟不上,多大的緩沖都會滿!

校驗位有用嗎?當你的傳輸介質處于一個有干擾的場景下,校驗位就可以從物理層檢測出錯誤。

理解數據編碼方式有啥意義呢?比如在調試中你可以利用邏輯分析直接去解析收發線上的數據報文。

應用電路設計的時候 RX-TX 相連,很多初學者容易在這里踩坑!

常見的傳輸位序為低有效位在前。

對于波特率而言需要注意波特率發生器有可能帶來誤碼問題

啥是 UART?

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

啥是 USART?

同步簡單說,收發不可自如,不可以想發就發,收發需要利用硬件 IO 口進行握手,RTS/CTS 就是用于同步的握手信號

RTS:Ready to send,請求發送,用于在當前傳輸結束時阻止數據發送。

CTS:clear to send,清除發送,用于指示 USART 已準備好接收數據。

這個對于普通應用而言并不常見,這里不做詳細展開,需要用到的時候只需要對應收發時控制握手信號即可。

編程策略

對于不同的單片機,其硬件體系各異,寄存器也差異很大,但是從收發編程策略角度而言,常見有下面三種方式:

查詢發送/中斷接收模式

收發中斷模式

DMA 模式

查詢發送/中斷接收模式

這里以偽代碼方式描述一下:

/*查詢發送字節*/  
voiduart_send_byte(uint8ch)  
{  
/*如果當前串口狀態寄存器非空閑,則一直等待*/  
/*注意while循環后的分號,表示循環體為空操作*/  
while(!UART_IS_IDLE());  
  
/*此時將發送字節寫入發送寄存器*/  
UART_TX_REG=ch;  
}  
  
/*發送一個緩沖區*/  
voiduart_send_buffer(uint8*pBuf,uint8size)  
{  
uint8i=0;  
/*異常參數處理*/  
if(pBuf==NULL)  
return;  
  
for(i=0;i

對于接收而言,如采用查詢模式則幾乎是沒有任何應用價值,因為外部數據不知道什么時候會到來,所以查詢接受就不描述了,這里描述一下中斷接收。

staticuint8rx_index=0;  
voiduart_rx_isr(void)  
{  
/*接收報文處理*/  
rx_buffer[rx_index++]=UART_RX_REG;  
}  

中斷接收需要考慮的幾個要點:

斷幀:這就取決于協議怎么制定了,比如應用協議定義的是 ASCII 碼方式,就可以定義同步頭、同步尾,比如 AT 指令的解析,做邏輯判斷幀頭、幀尾即可。但是如果傳輸的是 16 進制數據,比如 MODBUS-RTU 其斷幀采用的是 3.5 個字節時間沒有新的字節接收到,則認為收到完整的幀了。

如何保證幀的完整性,一般會在報文尾部加校驗,比較常用的校驗模式有 CRC 校驗算法

不同的單片機開發環境對于中斷向量的處理方式略有不同,需要根據各自芯片的特點進行處理。比如 51 單片機,其發送/接收都共享一個中斷向量號。

收發中斷模式

#defineFRAME_SIZE(128u)  
staticuint8tx_buffer[FRAME_SIZE];  
staticuint8tx_index=0;  
staticuint8tx_length=0;  
  
staticuint8rx_buffer[FRAME_SIZE];  
staticuint8rx_index=0;  
staticboolrx_frame_done=false;  
voidprepare_frame(uint8*pBuf,uint8size)  
{  
/*將待傳的報文按照協議封裝*/  
/*可能需要處理的事情,比如幀頭、幀尾、校驗等*/  
}  
  
booluart_start_sending(uint8*pBuf,uint8size)  
{  
if(pBuf==NULL)  
returnfalse;  
  
memcpy(tx_buffer,pBuf,size);  
tx_index=0;  
tx_length=size;  
  
/*使能發送中斷,向發送寄存器寫入一個字節,進入連續發送模式*/  
ENABLE_TX_INT=1;  
UART_TX_REG=tx_buffer[tx_index++];  
}  
  
voiduart_tx_isr(void)  
{  
if(tx_index

還需要考慮的是,對于 UART 硬件層面的出錯處置,以 STM32 為例,就可能有下面的錯誤可能發生:

溢出錯誤

噪聲檢測

幀錯誤

奇偶校驗錯誤

另外不同的單片機其底層硬件實現差異也不較大,比如有的硬件發送緩沖是單字節的緩沖,有的則具有 FIFO,這些在選型編程時都需要綜合考慮。

DMA 模式

DMA 發送模式而言,大致分這樣幾步:

初始化 UART 為 DMA 發送模式,開啟 DMA 結束中斷,并寫好 DMA 傳輸結束中斷處理函數

準備待發送報文,幀頭、幀尾、校驗處理

將待發送報文緩沖區首地址賦值給 DMA 源地址,DMA 目標地址設置為 UART 發送寄存器,設置好發送長度。

啟動 DMA 傳輸,剩下傳輸完成就會進入傳輸結束中斷處理函數。

DMA 接收模式而言,大致分這樣幾步:

初始化 UART 為 DMA 接收模式,開啟 DMA 結束中斷,并寫好 DMA 傳輸結束中斷處理函數

中斷處理函數中標記接收到幀,對于使用 RTOS 而言,還可以使用的機制是利用 RTOS 的事件機制、消息機制進行通知有新的幀接收到了。

對于 DMA 接收模式而言,對于變長幀的處理較為不利,所以如果想使用 DMA 接收,制定協議時盡量考慮將幀長度固定,這樣處理會方便些。

總結一下

單片機串口是一個需要好好掌握的內容,這里總結了一些個人經驗,盡量將一些個人共性的東西總結出來。至于實際實現而言,由于芯片體系差異較多,具體代碼各異。但個人認為處置的思路方法卻是基本一致。所以本文除了描述串口本身的細節而言,想表達的一個額外的觀點是:

對于一些技術點盡量學會將其共性的東西剝離總結出來。

總結、概括、剝離抽象是一個比較好的學習思路,不用對具體的硬件死記,萬變不離其宗。

如果本文有喜歡的朋友,后面陸續可以總結一下I2C/SPI等常用接口。

本文辛苦原創分享,如果覺得有價值也請幫忙點贊/轉發支持,不勝感激!

審核編輯 黃昊宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6036

    文章

    44556

    瀏覽量

    634966
  • 串口
    +關注

    關注

    14

    文章

    1551

    瀏覽量

    76474
收藏 人收藏

    評論

    相關推薦

    如何優化單片機項目的功耗

    功耗低的單片機是優化功耗的第一步。不同的單片機在工作模式下有不同的功耗表現,包括活動模式、睡眠模式和待機模式等。在設計之初,應根據應用需求選擇合適的單片機,考慮功耗性能。 2. 電源
    的頭像 發表于 11-01 14:16 ?311次閱讀

    基于51單片機的多路溫度檢測調節及串口顯示

    ,利用虛擬串口模塊實時將平均溫度值實現串口顯示。仿真演示視頻:基于51單片機的多路溫度檢測調節及串口顯示-仿真視頻設計介紹 51單片機
    的頭像 發表于 10-22 14:13 ?200次閱讀
    基于51<b class='flag-5'>單片機</b>的多路溫度檢測調節及<b class='flag-5'>串口</b>顯示

    單片機怎么寫入程序

    程序通常涉及以下幾個步驟: 選擇單片機和開發環境 : 確定項目需求,選擇合適的單片機型號。 安裝相應的開發環境,如Keil、IAR、MPLAB等。 硬件連接 : 將單片機連接到開發板或自制的電路板上。 使用USB轉
    的頭像 發表于 10-21 11:21 ?454次閱讀

    單片機燒錄程序的串口線怎么連接

    單片機開發過程中,燒錄程序是一項重要的工作。而燒錄程序通常需要使用串口線來實現。本文將介紹單片機燒錄程序的串口線連接方法,包括串口線的類型
    的頭像 發表于 09-02 09:50 ?1674次閱讀

    藍牙模塊如何實現單片機和手機端數據互傳

    ZX-D30、ZX-D37、ZX-D32等。 藍牙模塊設置 : 將藍牙模塊與單片機連接。通常,藍牙模塊通過串口(UART)與單片機通信。 設置藍牙模塊的工作模式和參數,例如波特率、名稱、停止位、數據位等。這通常通過發送特定的AT
    的頭像 發表于 07-24 17:59 ?2450次閱讀
    藍牙模塊如何實現<b class='flag-5'>單片機</b>和手機端數據互傳

    輸電線路分布式故障診斷裝置:鼎信線路巡檢的奇妙之旅

    ,條條框框規定了很多,但是“萬變不離其宗”,那就是針對架空輸電線路的故障發生,進行實時診斷故障原因、類型、時間、定位故障點。 輸電線路分布式故障診斷裝置鼎信DX-WPS100-GZ01?集多種功能于一體的智能系統,導線上布置的監測
    的頭像 發表于 04-24 16:37 ?462次閱讀

    單片機:微小卻強大的電子奇跡,揭秘無限可能!

    單片機:微小卻強大的電子奇跡,揭秘無限可能!
    的頭像 發表于 04-24 14:20 ?491次閱讀
    <b class='flag-5'>單片機</b>:微小卻強大的電子奇跡,揭秘<b class='flag-5'>其</b>無限可能!

    ?51單片機串口通信詳細介紹-小白必看

    51單片機串口通信是單片機與外部設備通信的重要方式,它基于串行通信的原理,以字節為單位進行數據傳輸。在51單片機中,串口通信主要依賴于兩個關
    的頭像 發表于 04-17 09:33 ?1985次閱讀
    ?51<b class='flag-5'>單片機</b><b class='flag-5'>串口</b>通信詳細介紹-小白必看

    為什么說2024年會是傳感器發展的黃金時代?

    ? ? 2023年,智能化的創新涌現為科技圈貢獻了許多熱點話題,從大模型到人形機器人,AI的浪潮一浪接一浪,資本的腳步也從未停歇,引發著各界的熱切關注。聚焦的話題迭現常新,但萬變不離其宗的是,AI
    的頭像 發表于 04-12 08:44 ?182次閱讀

    單片機串口屏連接步驟指南

    單片機串口屏的連接主要涉及硬件連接和軟件設置兩個方面。以下是一個基本的步驟指南
    的頭像 發表于 03-13 10:16 ?3318次閱讀
    <b class='flag-5'>單片機</b>與<b class='flag-5'>串口</b>屏連接步驟指南

    使用TC275單片機進行串口收發的時候,debug界面顯示的數據亂碼怎么解決?

    我在使用TC275單片機進行串口收發的時候,使用上位單片機發信息,debug界面顯示的數據亂碼,第一次用TC275,不知道什么問題,哪位大神可以給解決一下,
    發表于 01-26 07:01

    電流檢測,萬變不離其宗

    簡介電流檢測技術常用于高壓短路保護、電機控制、DC/DC換流器、系統功耗管理、二次電池的電流管理、蓄電池管理等電流檢測等場景。對于大部分應用,都是通過間接測量電阻兩端的壓降來獲取待測電路電流大小的,如下圖所示。在要求不高的情況下,電流檢測電路可以通過運放放大轉換成電壓,反推算負載的電流大小。技術分類測量電流時,電流檢測技術分為高端檢測和低端檢測。將測量電阻放
    的頭像 發表于 01-20 08:10 ?520次閱讀
    電流檢測,<b class='flag-5'>萬變不離其宗</b>

    基于51單片機年歷設計要求

    電子發燒友網站提供《基于51單片機年歷設計要求.rar》資料免費下載
    發表于 01-12 09:24 ?7次下載

    基于51單片機年歷設計

    電子發燒友網站提供《基于51單片機年歷設計.rar》資料免費下載
    發表于 01-03 11:22 ?17次下載

    基于51單片機的1602顯示帶鬧鐘年歷設計

    電子發燒友網站提供《基于51單片機的1602顯示帶鬧鐘年歷設計.rar》資料免費下載
    發表于 01-03 11:16 ?4次下載
    主站蜘蛛池模板: 最近在线视频观看2018免费| 欧美色图14p| 国产原创中文视频| 囯产精品久久久久久久久免费蜜桃 | 把腿张开老子CAO烂你动态图| 羽月希被黑人吃奶dasd585 | 免费看国产精品麻豆| 久久综合丁香激情久久| 久久久无码精品亚洲A片猫咪 | 日本老师xxxxx18| 欧亚一卡二卡日本一卡二卡| 欧美性喷潮xxxx| 青青青草国产| 色综合久久88色综合天天提莫 | 男总裁憋尿PLAY灌尿BL| 免费人成网站永久| 欧美三级aaa| 色多多污网站在线观看| 午夜福到在线2019| 亚洲成人精品| 丝瓜涩涩屋黄瓜香蕉丝瓜| 涩涩伊人久久无码欧美| 午夜婷婷一夜七次郎| 亚洲精品国产乱码AV在线观看 | 善良的女房东味道2在线观看| 色情内射少妇兽交| 午夜理论在线观看不卡大地影院| 亚洲成人免费看| 怡春院院日本一区二区久久| 97成人免费视频| yellow免费观看直播| 国产精品久久精品| 精品国产中文字幕在线视频| 免费果冻传媒在线完整观看| 全球真实小U女视频合集| 年轻漂亮的妺妺中文字幕版| 人淫阁| 亚洲国产精品一区二区第一页 | 色即是空 BT| 亚洲国产成人精品青青草原100 | 无码成A毛片免费|