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



前言

好久沒更新文章了,這篇文章寫寫停停,用了近一周的時間,終于寫完了,謝謝大家的關(guān)注。本篇文章介紹,串口協(xié)議數(shù)據(jù)幀格式、串行通信的工作方式、電平標(biāo)準(zhǔn)、編碼方式及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單片機(jī)的發(fā)送和接收

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

  2. SBUF = 'A;

  3. while(!TI);

  4. TI=0;



  5. //51單片機(jī)接收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上的串口是半導(dǎo)體廠商預(yù)先設(shè)計好的,幾乎是MCU的標(biāo)配,高度集成,使用起來十分方便,但是串口的引腳基本上是固定的,不可以更改。對于硬件橡皮泥——FPGA來說,需要使用HDL從底層串口數(shù)據(jù)幀來實現(xiàn),可以直接在任意一個引腳實現(xiàn)串口功能。為了用Verilog HDL實現(xiàn)標(biāo)準(zhǔn)的串口通訊協(xié)議,我們有必要先來詳細(xì)了解一下串口通訊協(xié)議。

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

波特率

波特率,即比特率(Baud rate),即通信雙方“溝通的語言”,通信雙方要設(shè)置為一樣的波特率才可以正常通信。表示每秒發(fā)送的二進(jìn)制位數(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的波特率,當(dāng)然價格也比其他芯片高一些。

起始位和停止位

數(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”,為達(dá)到奇數(shù)個"1"的效果,校驗位為“1”,讓“1”的個數(shù)變成5個(奇數(shù))。偶校驗剛好相反,要求有效數(shù)據(jù)和校驗位的“1”數(shù)量為偶數(shù),則此時為達(dá)到偶校驗效果,校驗位為“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,上位機(jī)波特率設(shè)置成113000-121000也可以接收,無亂碼,差不多正負(fù)2000的波特率,這容錯范圍也太大了,當(dāng)然如果發(fā)送頻率太快,數(shù)據(jù)量太大,誤碼率肯定會大大增加,所以還是建議通信雙方使用同樣的波特率以減少誤差。

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

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

一個字符的實際波形

兩個字符的實際波形

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

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

單工

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

半雙工

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

全雙工

比半雙工更先進(jìn)的是全雙工,允許數(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)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉