女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

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

掃碼添加小助手

加入工程師交流群

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

導(dǎo)讀

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

啥是串口?

首先這玩意兒分兩種:

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

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

數(shù)據(jù)格式

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

起始位:總是 1 位

數(shù)據(jù)位:常見的有 8 位或 9 位。

校驗位

奇校驗

偶校驗

無校驗

停止位:

1 位

2 位

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

這里須注意的要點:

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

位數(shù)波特率

比如 9600 下,1 位起始位,8 位數(shù)據(jù)位,奇校驗,1 位停止位,則

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

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

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

應(yīng)用電路設(shè)計的時候 RX-TX 相連,很多初學(xué)者容易在這里踩坑!

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

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

啥是 UART?

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

啥是 USART?

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

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

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

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

編程策略

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

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

收發(fā)中斷模式

DMA 模式

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

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

/*查詢發(fā)送字節(jié)*/  
voiduart_send_byte(uint8ch)  
{  
/*如果當(dāng)前串口狀態(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;  
/*異常參數(shù)處理*/  
if(pBuf==NULL)  
return;  
  
for(i=0;i

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

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

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

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

如何保證幀的完整性,一般會在報文尾部加校驗,比較常用的校驗?zāi)J接?CRC 校驗算法

不同的單片機(jī)開發(fā)環(huán)境對于中斷向量的處理方式略有不同,需要根據(jù)各自芯片的特點進(jìn)行處理。比如 51 單片機(jī),其發(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é),進(jìn)入連續(xù)發(fā)送模式*/  
ENABLE_TX_INT=1;  
UART_TX_REG=tx_buffer[tx_index++];  
}  
  
voiduart_tx_isr(void)  
{  
if(tx_index

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

溢出錯誤

噪聲檢測

幀錯誤

奇偶校驗錯誤

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

DMA 模式

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

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

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

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

啟動 DMA 傳輸,剩下傳輸完成就會進(jìn)入傳輸結(jié)束中斷處理函數(shù)。

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

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

中斷處理函數(shù)中標(biāo)記接收到幀,對于使用 RTOS 而言,還可以使用的機(jī)制是利用 RTOS 的事件機(jī)制、消息機(jī)制進(jìn)行通知有新的幀接收到了。

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

總結(jié)一下

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

對于一些技術(shù)點盡量學(xué)會將其共性的東西剝離總結(jié)出來。

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

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

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

審核編輯 黃昊宇

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

    關(guān)注

    6067

    文章

    44991

    瀏覽量

    650406
  • 串口
    +關(guān)注

    關(guān)注

    15

    文章

    1588

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    使用USB轉(zhuǎn)TTL串口板和ST-LINK調(diào)試下載器給STM32單片機(jī)下載程序

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

    瑞薩Cortext-M85內(nèi)核RA8系列單片機(jī)串口輸出實現(xiàn)方法

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

    什么是單片機(jī)的ADC接口

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

    LabVIEW與單片機(jī)無法串口通信 提示串口打開錯誤 端口設(shè)置有問題嗎?

    0xBFFF0000) 未知系統(tǒng)錯誤(其它錯誤)。 重啟計算機(jī)也無法解決這個錯誤。 通過虛擬串口,LabVIEW與串口助手通信正常, 單片機(jī)串口助手通信也正常, 但LabVIEW與
    發(fā)表于 12-06 22:28

    51單片機(jī)中為什么很少出現(xiàn)printf的身影

    流,他能跟外部交互的,只有串口。 51單片機(jī)用的開發(fā)語言是C語言,雖然跟標(biāo)準(zhǔn)C有點區(qū)別,但是 printf 函數(shù)還是可以用的,只要修改 printf 的輸
    的頭像 發(fā)表于 12-03 10:46 ?1390次閱讀
    51<b class='flag-5'>單片機(jī)</b>中為什么很少出現(xiàn)printf的身影

    如何優(yōu)化單片機(jī)項目的功耗

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

    基于51單片機(jī)的多路溫度檢測調(diào)節(jié)及串口顯示

    ,利用虛擬串口模塊實時將平均溫度值實現(xiàn)串口顯示。仿真演示視頻:基于51單片機(jī)的多路溫度檢測調(diào)節(jié)及串口顯示-仿真視頻設(shè)計介紹 51單片機(jī)
    的頭像 發(fā)表于 10-22 14:13 ?865次閱讀
    基于51<b class='flag-5'>單片機(jī)</b>的多路溫度檢測調(diào)節(jié)及<b class='flag-5'>串口</b>顯示

    基于51單片機(jī)的溫濕度檢測報警及串口傳輸系統(tǒng)

    具體實現(xiàn)功能由51單片機(jī)+DHT11溫濕度傳感器+獨立按鍵+LCD1602液晶+蜂鳴器+串口模塊構(gòu)成。具體功能:(1)DHT11溫濕度傳感器實時檢測溫濕度值并顯示; (2)可以通過按鍵設(shè)定
    的頭像 發(fā)表于 10-22 14:12 ?712次閱讀
    基于51<b class='flag-5'>單片機(jī)</b>的溫濕度檢測報警及<b class='flag-5'>串口</b>傳輸系統(tǒng)

    單片機(jī)怎么寫入程序

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

    單片機(jī)的中斷機(jī)制

    單片機(jī)的中斷機(jī)制是一種重要的處理方式,它允許單片機(jī)在執(zhí)行主程序的過程中,能夠暫停當(dāng)前任務(wù),轉(zhuǎn)而處理外部或內(nèi)部緊急事件。這種機(jī)制極大地提高了系統(tǒng)的響應(yīng)速度和處理能力,使得單片機(jī)在各種應(yīng)用領(lǐng)域中得到廣泛應(yīng)用。以下是對
    的頭像 發(fā)表于 10-17 18:03 ?1972次閱讀

    單片機(jī)燒錄程序用什么軟件

    單片機(jī)燒錄程序是單片機(jī)開發(fā)過程中的一個重要環(huán)節(jié),涉及到將編寫好的程序代碼通過燒錄器寫入單片機(jī)的ROM中,以實現(xiàn)對單片機(jī)的控制。 燒錄器的類型 燒錄器是用于將程序代碼寫入
    的頭像 發(fā)表于 09-02 10:05 ?3436次閱讀

    單片機(jī)燒錄程序的串口線怎么連接

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

    單片機(jī)燒錄程序的基本步驟是什么

    單片機(jī)燒錄程序是單片機(jī)開發(fā)過程中非常重要的一步,它涉及到將編寫好的程序代碼通過一定的方式傳輸?shù)?b class='flag-5'>單片機(jī)內(nèi)部的存儲器中,使單片機(jī)能夠按照預(yù)定的邏輯執(zhí)行任務(wù)。 一、硬件準(zhǔn)備
    的頭像 發(fā)表于 09-02 09:47 ?2758次閱讀

    單片機(jī)引腳懸空是什么電平

    電平狀態(tài)通常有兩種可能:高電平或低電平。具體取決于單片機(jī)的內(nèi)部結(jié)構(gòu)和外部環(huán)境因素。 1.1 內(nèi)部結(jié)構(gòu)因素 單片機(jī)的I/O引腳內(nèi)部結(jié)構(gòu)通常包括一個上拉電阻和一個下拉電阻。上拉電阻連接到VCC(電源電壓),下拉電阻連接到GND(
    的頭像 發(fā)表于 08-28 09:51 ?4845次閱讀

    藍(lán)牙模塊如何實現(xiàn)單片機(jī)和手機(jī)端數(shù)據(jù)互傳

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