chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

3天內不再提示

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

電子設計 ? 來源:電子設計 ? 作者:電子設計 ? 2020-12-15 00:14 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

首發(fā):嵌入式客棧
作者:逸珺

導讀

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

啥是串口?

首先這玩意兒分兩種:

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

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

數據格式

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

起始位:總是 1 位

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

校驗位

奇校驗

偶校驗

無校驗

停止位:

1 位

2 位

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

這里須注意的要點:

一個有效字節(jié)的傳輸時間怎么算?

位數波特率

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

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

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

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

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

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

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

啥是 UART?

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

啥是 USART?

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

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

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

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

編程策略

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

查詢發(fā)送/中斷接收模式

收發(fā)中斷模式

DMA 模式

查詢發(fā)送/中斷接收模式

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

/*查詢發(fā)送字節(jié)*/  
voiduart_send_byte(uint8ch)  
{  
/*如果當前串口狀態(tài)寄存器非空閑,則一直等待*/  
/*注意while循環(huán)后的分號,表示循環(huán)體為空操作*/  
while(!UART_IS_IDLE());  
  
/*此時將發(fā)送字節(jié)寫入發(fā)送寄存器*/  
UART_TX_REG=ch;  
}  
  
/*發(fā)送一個緩沖區(qū)*/  
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;  
}  

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

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

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

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

收發(fā)中斷模式

#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)  
{  
/*將待傳的報文按照協(xié)議封裝*/  
/*可能需要處理的事情,比如幀頭、幀尾、校驗等*/  
}  
  
booluart_start_sending(uint8*pBuf,uint8size)  
{  
if(pBuf==NULL)  
returnfalse;  
  
memcpy(tx_buffer,pBuf,size);  
tx_index=0;  
tx_length=size;  
  
/*使能發(fā)送中斷,向發(fā)送寄存器寫入一個字節(jié),進入連續(xù)發(fā)送模式*/  
ENABLE_TX_INT=1;  
UART_TX_REG=tx_buffer[tx_index++];  
}  
  
voiduart_tx_isr(void)  
{  
if(tx_index

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

溢出錯誤

噪聲檢測

幀錯誤

奇偶校驗錯誤

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

DMA 模式

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

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

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

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

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

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

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

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

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

總結一下

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

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

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

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

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

審核編輯 黃昊宇

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

    關注

    6074

    文章

    45341

    瀏覽量

    663686
  • 串口
    +關注

    關注

    15

    文章

    1607

    瀏覽量

    81952
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    MCU單片機串口數據記錄儀方案

    在工業(yè)控制、環(huán)境監(jiān)測、物流追蹤等眾多領域,如何可靠、便捷地記錄設備串口數據成為不少工程師關注的焦點?;贛CU單片機串口數據記錄儀方案,正以其高效集成、靈活存儲和簡便操作的特點,成為數據采集與記錄場景中的理想選擇。
    的頭像 發(fā)表于 11-27 15:02 ?110次閱讀

    單片機板跟上位進行串口發(fā)收數據時,每次上位下發(fā)指令,為什么?

    單片機板跟上位進行串口發(fā)收數據時,每次上位下發(fā)指令,出現問題都是在第一條指令后,有時在單片機回發(fā)完數據后偷發(fā)0x00,怎么解?
    發(fā)表于 08-08 08:20

    單片機用什么封裝

    單片機封裝是將芯片內部電路與外部引腳連接并包裹保護的結構,不僅影響單片機的安裝方式、適用場景,還與電路設計的緊湊性、散熱性能密切相關。不同封裝類型各有特點,適配從簡單電路到復雜系統(tǒng)的多樣化需求
    的頭像 發(fā)表于 08-01 13:47 ?904次閱讀

    什么單片機比較耐用

    ? ? ? ? 在工業(yè)控制、戶外設備、醫(yī)療儀器等場景中,單片機的耐用性直接決定了設備的穩(wěn)定運行與維護成本。耐用的單片機通常具備寬溫工作范圍、強抗干擾能力、穩(wěn)定的電源適應性和長壽命的硬件設計。深圳市安
    的頭像 發(fā)表于 07-31 13:48 ?561次閱讀

    單片機的儲存優(yōu)點是什么

    單片機作為嵌入式系統(tǒng)的核心,儲存系統(tǒng)是實現數據存儲與程序運行的關鍵部分。與獨立存儲芯片相比,單片機的儲存單元在集成度、功耗、可靠性等方面具備獨特優(yōu)勢,這些優(yōu)點使其能適應從消費電子到工業(yè)控制的多樣化
    的頭像 發(fā)表于 07-31 10:09 ?498次閱讀

    單片機采用什么電流控制

    單片機作為電子系統(tǒng)的控制核心,電流控制涉及自身工作電流管理與外部設備電流驅動兩個層面。由于單片機內部電路的特性,自身工作電流較小,而控制外部設備時需通過特定電路實現電流放大與調節(jié),
    的頭像 發(fā)表于 07-30 10:07 ?549次閱讀

    怎么測單片機系統(tǒng)頻率

    ,各有特點和操作要點。 示波器測量法 示波器是測量單片機系統(tǒng)頻率的常用工具,原理是通過捕捉單片機輸出的周期性信號,根據信號的周期計算頻率。 操作步驟 首先,確定
    的頭像 發(fā)表于 07-25 11:39 ?481次閱讀

    單片機怎么驅動電機?

    在各類自動化設備和智能裝置中,電機是重要的執(zhí)行部件,而單片機作為控制核心,需要通過特定的方式驅動電機運轉。單片機驅動電機并非直接連接即可,而是要根據電機類型和功率,搭配合適的驅動電路,才能實現穩(wěn)定
    的頭像 發(fā)表于 07-25 09:31 ?440次閱讀

    單片機怎么燒程序

    單片機燒程序是將編寫好的程序代碼寫入單片機內部存儲單元,讓單片機按照預設邏輯工作的過程,是單片機應用開發(fā)中不可或缺的環(huán)節(jié)。無論是簡單的燈光控制程序,還是復雜的工業(yè)控制算法,都需要通過燒
    的頭像 發(fā)表于 07-23 11:47 ?658次閱讀

    單片機直流電機調速原理

    在工業(yè)自動化、智能設備等領域,直流電機的調速控制至關重要,而單片機憑借靈活的控制能力,成為實現直流電機精準調速的核心部件。單片機直流電機調速技術通過程序控制,能讓電機在不同工況下保持穩(wěn)定的轉速
    的頭像 發(fā)表于 07-17 13:42 ?500次閱讀

    單片機定制開發(fā)的設計思路

    單片機定制開發(fā)是根據特定場景和功能需求,量身打造符合要求的單片機應用方案,設計過程需要兼顧技術可行性與實際應用價值,涉及多個關鍵環(huán)節(jié)。 一、需求分析階段 單片機定制開發(fā)的第一步是深入
    的頭像 發(fā)表于 07-17 11:14 ?590次閱讀
    <b class='flag-5'>單片機</b>定制開發(fā)的設計思路

    使用USB轉TTL串口板和ST-LINK調試下載器給STM32單片機下載程序

    本文詳細介紹如何使用ST-LINK/V2和USB轉TTL串口板為STM32單片機下載程序,包括STM32啟動模式、JTAG與SWD接口對比、驅動安裝及官方軟件STM32ST-LINKUtility和FlashLoaderDemonstrator的操作流程。
    的頭像 發(fā)表于 06-20 17:26 ?2063次閱讀
    使用USB轉TTL<b class='flag-5'>串口</b>板和ST-LINK調試下載器給STM32<b class='flag-5'>單片機</b>下載程序

    瑞薩Cortext-M85內核RA8系列單片機串口輸出實現方法

    串口是最常見的通信方式之一,也是單片機調試最常見的通信接口,也是現在的單片機必備的通信接口,目前(2024-05)最新、最強的Cortext-M85內核的RA8系列單片機也不例外。
    的頭像 發(fā)表于 03-21 09:58 ?1560次閱讀
    瑞薩Cortext-M85內核RA8系列<b class='flag-5'>單片機</b>的<b class='flag-5'>串口</b>輸出實現方法

    什么是單片機的ADC接口

    ,簡稱ADC)接口是單片機中不可或缺的一部分,它負責將模擬信號轉換為數字信號,使得單片機能夠處理來自傳感器、儀表等模擬世界的信號。本文將深入探討單片機的ADC接口技術,包括定義、工作
    的頭像 發(fā)表于 02-03 11:27 ?3741次閱讀

    單片機Debug工具性能對比 單片機調試常用命令

    單片機(Microcontroller Unit, MCU)調試是嵌入式開發(fā)中的一個重要環(huán)節(jié),它幫助開發(fā)者發(fā)現和修復代碼中的錯誤,優(yōu)化程序性能。不同的單片機和開發(fā)環(huán)境可能使用不同的調試工具和命令
    的頭像 發(fā)表于 12-19 09:56 ?2172次閱讀