日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 電子電路開發(fā)學習
[導讀]前言好久沒更新文章了,這篇文章寫寫停停,用了近一周的時間,終于寫完了,謝謝大家的關(guān)注。本篇文章介紹,串口協(xié)議數(shù)據(jù)幀格式、串行通信的工作方式、電平標準、編碼方式及Verilog實現(xiàn)串口發(fā)送一個字節(jié)數(shù)據(jù)和接收一個字節(jié)數(shù)據(jù)。對于MCU串口的發(fā)送接收,可能就是1行代碼就能實現(xiàn)串口的發(fā)送和...



前言

好久沒更新文章了,這篇文章寫寫停停,用了近一周的時間,終于寫完了,謝謝大家的關(guān)注。本篇文章介紹,串口協(xié)議數(shù)據(jù)幀格式、串行通信的工作方式、電平標準、編碼方式及Verilog實現(xiàn)串口發(fā)送一個字節(jié)數(shù)據(jù)和接收一個字節(jié)數(shù)據(jù)。

對于MCU串口的發(fā)送接收,可能就是1行代碼就能實現(xiàn)串口的發(fā)送和接收:

STM32的串口接收和發(fā)送

  1. //STM32發(fā)送1個字節(jié)

  2. USART_SendData(USART1, 'A');

  3. while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_TXE) == RESET);


  4. //STM32接收1個字節(jié):

  5. uint8_t Res;

  6. while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);

  7. Res = USART_ReceiveData(USART1);

51單片機的發(fā)送和接收

  1. //51單片機發(fā)送1個字節(jié)

  2. SBUF = 'A;

  3. while(!TI);

  4. TI=0;



  5. //51單片機接收1個字節(jié):

  6. char Res;

  7. if(RI)

  8. {

  9. Res = SBUF;

  10. RI = 0;

  11. }

更方便一點的,通過重寫C庫fput函數(shù)和fgetc函數(shù),還可以實現(xiàn)printf直接重定向到串口,用來輸出一些調(diào)試信息再方便不過了。

STM32實現(xiàn)輸入輸出重定向到串口發(fā)送接收

  1. //可重定向printf函數(shù)

  2. int fputc(int ch, FILE *f)

  3. {

  4. USART_SendData(DEBUG_USARTx, (uint8_t) ch);

  5. while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_TXE) == RESET);

  6. return (ch);

  7. }

  8. //可重定向scanf函數(shù)

  9. int fgetc(FILE *f)

  10. {

  11. while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_RXNE) == RESET);

  12. return (int)USART_ReceiveData(DEBUG_USARTx);

  13. }

而MCU上的串口是半導體廠商預(yù)先設(shè)計好的,幾乎是MCU的標配,高度集成,使用起來十分方便,但是串口的引腳基本上是固定的,不可以更改。對于硬件橡皮泥——FPGA來說,需要使用HDL從底層串口數(shù)據(jù)幀來實現(xiàn),可以直接在任意一個引腳實現(xiàn)串口功能。為了用Verilog HDL實現(xiàn)標準的串口通訊協(xié)議,我們有必要先來詳細了解一下串口通訊協(xié)議。

串口數(shù)據(jù)幀格式

波特率

波特率,即比特率(Baud rate),即通信雙方“溝通的語言”,通信雙方要設(shè)置為一樣的波特率才可以正常通信。表示每秒發(fā)送的二進制位數(shù),即傳輸1位的時間是:1/波特率 秒,如,波特率9600bps,即每秒傳輸9600bit,那么每一位的時間為:1/9600 s = 104.1666us,常用的波特率有:4800/9600/115200/12800等等,也可以根據(jù)需要自定義波特率大小,如1M或者3M,但是有的PC或者USB-TTL模塊不支持太高速度的波特率,常用的USB-TTL芯片有:CH340,CP2102,PL2103,F(xiàn)T232等,其中FT232HL芯片最大支持12M的波特率,當然價格也比其他芯片高一些。

起始位和停止位

數(shù)據(jù)幀從起始位開始,到停止位結(jié)束。起始信號用邏輯0表示,而停止位是用邏輯1表示,一般有0.5位、1位、1.5位或2位停止位,常用的一般是1位停止位,只要通信雙方約定一致即可。

數(shù)據(jù)位

起始位之后,緊跟著的是數(shù)據(jù)位,低位(LSB)在前,高位(MSB)在后,一般有5位、6位、7位和8位數(shù)據(jù)位,常用的是8位數(shù)據(jù)位,因為一個字節(jié)正好是8位。

校驗位

校驗位一般用來判斷接收的數(shù)據(jù)位有無錯誤,校驗方法有:奇校驗(odd)、偶校驗(even)、0校驗(space)、1校驗(mark)及無校驗(noparity)。奇校驗要求有效數(shù)據(jù)和校驗位中“1”的個數(shù)為奇數(shù),比如一個8位長的有效數(shù)據(jù)為:01101001,此時共有4個“1”,為達到奇數(shù)個"1"的效果,校驗位為“1”,讓“1”的個數(shù)變成5個(奇數(shù))。偶校驗剛好相反,要求有效數(shù)據(jù)和校驗位的“1”數(shù)量為偶數(shù),則此時為達到偶校驗效果,校驗位為“0”。而0校驗,即校驗位總是為“0”,1校驗校驗位總是為“1”。奇偶校驗邏輯相反,01校驗邏輯相反。一般是奇偶校驗或者是無校驗位。

奇偶校驗的Verilog實現(xiàn)

在Verilog中奇偶校驗的計算非常簡單,根據(jù)奇偶校驗的原理,偶校驗為數(shù)據(jù)位各位異或,奇校驗是偶校驗取反,通過使用單目運算符的縮減功能,可以非常簡單的計算奇偶校驗位:

  1. input [7:0] data_in, //需要發(fā)送的8位數(shù)據(jù)


  2. wire even_bit; //偶校驗位 = 各位異或

  3. wire odd_bit; //奇校驗位 = ~偶校驗位


  4. assign even_bit = ^data_in; //一元約簡運算符,等效于data_in[0] ^ data_in[1] ^ .....

  5. assign odd_bit = ~even_bit;


  6. wire POLARITY_BIT = even_bit; //偶校驗

關(guān)于波特率允許的誤差

經(jīng)過我的實際測試,波特率是有一定的容錯范圍的,例如,STM32配置成115200波特率,每10ms發(fā)送一個30字節(jié)的字符串,串口芯片用的CH340,上位機波特率設(shè)置成113000-121000也可以接收,無亂碼,差不多正負2000的波特率,這容錯范圍也太大了,當然如果發(fā)送頻率太快,數(shù)據(jù)量太大,誤碼率肯定會大大增加,所以還是建議通信雙方使用同樣的波特率以減少誤差。

串口數(shù)據(jù)的實際波形

使用串口上位機連接USB-TTL模塊,發(fā)送一個字節(jié)數(shù)據(jù):1位停止位 8位數(shù)據(jù)位 1位奇校驗位 1位停止位,使用示波器的單次觸發(fā)功能,可以在USB-TTL模塊的TX引腳測得串口協(xié)議數(shù)據(jù)的實際波形,你知道這發(fā)送的是什么字符嗎?

一個字符的實際波形

兩個字符的實際波形

單工、半雙工、全雙工、異步和同步的區(qū)別

在介紹串口的電平標準之前,先來了解一下串行通信的工作方式,即單工、半雙工、全雙工,異步和同步的區(qū)別。

單工

單工,即數(shù)據(jù)傳輸只在一個方向上傳輸,只能你給我發(fā)送或者我給你發(fā)送,方向是固定的,不能實現(xiàn)雙向通信,如:室外天線電視、調(diào)頻廣播等。

半雙工

半雙工比單工先進一點,傳輸方向可以切換,允許數(shù)據(jù)在兩個方向上傳輸,但是某個時刻,只允許數(shù)據(jù)在一個方向上傳輸,可以基本雙向通信,如:對講機,IIC通信。

全雙工

比半雙工更先進的是全雙工,允許數(shù)據(jù)同時在兩個方向傳輸。發(fā)送和接收完全獨立,在發(fā)送的同時可以接收信號,或者在接收的同時可以發(fā)送。它要求發(fā)送和接收設(shè)備都要有獨立的發(fā)送和接收能力,如:電話通信,SPI通信,串口通信。

同步和異步的區(qū)別

串行通信可以分為兩種類型,一種叫同步通信,另一種叫異步通信。

簡單的說,就是同步通信需要時鐘信號,而異步通信不需要時鐘信號。

  • 同步:發(fā)送方發(fā)出數(shù)據(jù)后,等接收方發(fā)回響應(yīng)以后才發(fā)下一個數(shù)據(jù)包的通訊方式。

  • 異步:發(fā)送方發(fā)出數(shù)據(jù)后,不等接收方發(fā)回響應(yīng),接著發(fā)送下個數(shù)據(jù)包的通訊方式。

SPI和IIC為同步通信,UART為異步通信,而USART為同步
本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉