UART(串口)收發模塊設計

2020-12-23 電子發燒友

UART(串口)收發模塊設計- 02

整體架構回顧

整體結構如下圖,整個UART有兩個大模塊,一個接收模塊,一個發送模塊。具體大家可以回顧文章《UART(串口)收發模塊設計- 01》。

波特率時鐘產生模塊

收發模塊裡面都有一個波特率時鐘產生模塊BuadRate_set,用於將系統時鐘clk進行分頻,得到波特率時鐘Buad_clk,以控制數據的收發。

埠如下,通過CLK_Period指定當前的clk時鐘頻率,比如50M,則為50000000。Buad_Rate為設定的波特率。

主要設計代碼如下,通過localparam DIV_PEREM指定分頻計數值。分頻計數器為cnt,當enable為高時,cnt開始循環的從0遞增到DIV_PEREM。Buad_clk在每次cnt==DIV_PEREM的時候就翻轉一次,從而得到clk時鐘的CLK_Period/Buad_Rate倍分頻。

數據接收模塊

狀態機:數據接收模塊通過一個狀態機來控制。狀態機的跳轉由波特率時鐘下降沿控制。波特率時鐘Buad_clk起始為高電平。

IDLE:  其中IDLE為空閒狀態,只有當檢測到起始位的時候,才進入GET_DATA。

GET_DATA: 在GET_DATA狀態下獲得8位數據位數據,通過一個計數器來計數接收到的數據位數。當cnt為『d7時表明接收到了8位數據,便跳到最後一個狀態END_BIT。

END_BIT: 等待停止位的到來,然後回到IDLE狀態,完成數據的接收。

起始位的檢測:其實就是在IDLE狀態下,檢測uart_rx的下降沿,如下代碼所示。將uart_rx通過一個6bit的移位寄存器get_start_bit(uart_rx從低bit往高bit移動),那麼當get_start_bit的,高3bit都為1,低3bit為0時,表明uart_rx出現了下降沿,此時將start拉高,以便啟動狀態機和波特率時鐘產生模塊BuadRate_set。

數據的接收:在GET_DATA狀態下,由波特率時鐘的下降沿控制,將uart_rx往一個8bit的移位寄存器送,uart_rx從高bit向低bit流動(由於串口發送是先發低位數據)。

數據發送模塊

狀態機:數據接收模塊通過一個狀態機來控制。狀態機的跳轉由clk時鐘上升沿控制。

IDLE:IDLE為空閒狀態,當檢測到tx_en(發送使能信號)為高,則進入EN_TX模塊。

EN_TX:在EN_TX模塊發送10bit數據(起始位,數據位,停止位)。數據的發送由波特率時鐘Buad_clk上升沿控制。如下代碼,在cnt為0時將tx_data(待發送的數據位)與起始位(0),裝載到data_to_send中,然後對data_to_send做從高位向低位的移位操作,高位填1。將data_to_send的最低位接uart_tx,發送出去。利用cnt計數發送的位數。

上板實測

這裡設計了一個實測設計(UART_TEST),功能如下:

上電復位後,通過串口向上位機發送數據8'h34,然後只要收到上位機發送過來的數據,就將其返回給上位機。

大家可以把源碼下下來,自己新建工程,結合開發板上板測試一下。

文件裡面提供了一個PC端串口調試上位機SSCOM。大家在上板測試時,需要一個USB轉串口器(有的開發板上集成了這個),使得板子的串口可以通過USB埠與PC上位機通信。

打開APP閱讀更多精彩內容

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

相關焦點

  • 淺談UART通信協議 UART接收數據時序設計
    淺談UART通信協議 UART接收數據時序設計 工程師3 發表於 2018-05-05 10:12:00 串口通信也是一個基礎實驗,是FPGA與電腦、單片機、DSP
  • UART
    UARTRS232 RS485 RS422區別RS232物理接口RS485物理接口RS422物理接口UART通信協議UART設計波特率產生模塊發送模塊接收模塊頂層模塊串口驅動下載UART通用異步收發傳輸器(Universal Asynchronous Receiver/Transmitter),通常稱作UART。
  • STM32與LD3320語音識別模塊串口交互,實現語音控制繼電器
    實現目標LD3320模塊將識別結果通過串口發送至STM32;我們繼續在上文口令模式的Demo示例程序基礎上,實現本文的目標。STC單片機更新程序的方法參考網文:STC單片機開發環境建立及更新LD3320模塊程序修改STM32工程硬體連接LD3320模塊與STM32F103的串口4相連
  • S3C2440驅動簡析——串口驅動
    s3c2440_uart_inf={//串口設備環境信息和提供的操作函數{//退出模塊");本文引用地址:http://www.eepw.com.cn/article/201611/319506.htm幾個問題需要我們注意:1.設備如何註冊、註銷串口驅動被作為一個單獨的模塊被加載進內核,在模塊的加載和卸載函數中
  • 簡單介紹兩款UART接口的WiFi模塊
    採用UART接口,WiFi模塊支持串口透明數據傳輸模式,並且具有多模安全能力。內置TCP/IP協議棧和IEEE802.11協議棧,能夠實現用戶串口到無線網絡之間的轉換。UART接口WiFi模塊UART接口WiFi模塊是基於UART接口的符合WiFi無線網絡標準的嵌入式模塊,內置無線網絡協議IEEE802.11協議棧以及TCP/IP協議棧,能夠實現用戶串口或TTL電平數據到無線網絡之間的轉換。
  • S3C6410裸機UART驅動(將printf重定義到串口)
    要確保S3C6410已經初始化,一般是使用UBOOT初始化本文引用地址:http://www.eepw.com.cn/article/201808/385226.htm//串口寄存器//UART0#defineULCON0 *((vu32*)0x7F005000) //UART通道0 行控制寄存器
  • RS232、RS485、UART、TTL這麼多串口你都弄明白了嗎?
    可以說UART不是接口,而是實現串口收發的邏輯電路,這部分可以獨立成晶片,也可以作為模塊嵌入到其他晶片裡,單片機、SOC、PC裡都會有UART模塊。串口可以算是一個泛稱,一般指代的是串口時序標準。UART、RS232、RS485、TTL都遵循著類似的通信時序協議,因此都被通稱為串口。
  • 基於CPLD的ST-BUS總線收發模塊設計與實現
    考慮到專用接口晶片針對某一種或幾種標準接口而設計,已無法滿足所有接口標準(尤其是新型接口標準)要求。為使各種接口都能與電信線路進行數據交換,且系統配置能更加靈活,文中所述模塊的電路設計採用了先進的可編程器件來實現,便於多種接口的混合接入。鑑於接口種類及標準繁多,文中主要討論外部接口與ST-BUS總線通信所需公共模塊(即ST-BUS收發模塊)的設計與驗證。
  • STM32如何高效接收串口數據?
    的基本配置環形隊列接收數據函數原型參考用例總結硬體:stm32f103cbt6軟體:STM32F10x_StdPeriph_Lib_V3.5.0DMA,直接內存存取,可以用它的雙手釋放CPU的靈魂,所以,本文通過USART3進行串口收發
  • tty初探 — uart驅動框架分析
    整個uart 框架大概如上圖所示,簡單來分的話可以說成兩層,一層是下層我們的串口驅動層,它直接與硬體接觸,我們需要填充一個 struct uart_ops 的結構體,另一層是上層 tty 層,包括 tty 核心以及線路規程,
  • 門鎖低功耗WiFi方案_SKYLAB串口WiFi模塊
    本篇SKYLAB君以低功耗串口WiFi模塊為切入點,帶大家了解基於WiFi模塊的智能門鎖低功耗WiFi方案。符合802.11b / g / n 無線模塊標準,支持UART-WiFi -乙太網數據傳輸。專為行動裝置和物聯網應用設計,可將用戶的物理設備連接到WiFi無線網絡上,進行網際網路或區域網通信,實現聯網功能。另外串口WiFi模塊僅需要通過串口使用AT指令控制,就能滿足大部分的網絡功能需求。
  • 從串口驅動到Linux驅動模型,想轉Linux的必會!
    為獲得較高的可移植性,在設計過程中常採用通用的程序設計語言和運行支撐環境。儘量不用與系統的底層相關性強的語言。可移植性是軟體質量之一,良好的可移植性可以提高軟體的生命周期。代碼的可移植性主題是軟體;可移植性是軟體產品的一種能力屬性,其行為表現為一種程度,而表現出來的程度與環境密切相關。一個作業系統的可移植性往往表現在它能在運行在不同的體系結構上。
  • 嵌入式硬體通信接口協議-UART(四)設計起止式的應用層協議
    是的,沒錯,這就是本節要講的在串口通信中發揮重要作用的起止式協議!  UART的時序本身就是起止式協議,具體可參考《嵌入式硬體通信接口協議-UART(一)協議基礎》這一篇內容的介紹。  事實上串口實現了數據通信過程中的傳輸層,而應用層就系統功能的業務邏輯,應用層控制需要收發的各種數據內容。
  • 串口、COM口、UART、TTL、USB、RS-232、RS-485、I2C、SPI、CAN、1...
    七、IIC 八、SPI 九、CAN 十、1-WIRE 一、串口 1、串口概述   串行接口簡稱為串口,也叫串行通信接口,一般也叫COM口,這是一個統稱,採用串行通信的接口都叫作串口,串口是一個硬體接口。
  • Arduino學習第五彈——串口的應用:藍牙模塊
    常說的Arduino串口通信,是指異步串行通信方式,數據以字節為單位一幀一幀的發送和接收,無需同步時鐘,節省了設備的開銷。       本次學習我們利用串口的目的是建立Arduino和HC-06藍牙模塊的通信,使藍牙模塊能在專用的AT指令下正常工作。
  • 音頻總線I2S協議:I2S收發模塊FPGA的仿真設計
    音頻總線I2S協議:I2S收發模塊FPGA的仿真設計 FPGA開源工作室 發表於 2020-12-14 17:34:59 1 概述
  • 利用A3972驅動晶片實現步進電機的驅動模塊的系統設計
    利用A3972驅動晶片實現步進電機的驅動模塊的系統設計 電子設計 發表於 2019-09-11 07:52:00 步進電機作為執行器件,廣泛用於各種類型的自動控制系統
  • 一分四串口UART擴展晶片的特性
    在某些產品中,有時可能需要多個串口,控制多個設備。矛盾的是,CPU通常不會有那麼多串口,所以這個時候就需要通過合適的方式進行串口擴展,或者通過Local Bus,或者SPI,或者USB接口。在本文中我想為讀者介紹兩款比較實用的串口(UART)擴展晶片,一種是SPI轉UART,一種是USB轉UART,都是一分四的。
  • MSP430G2553單片機使用printf函數進行串口列印輸出
    keil裡面的putchar函數是默認用串行口輸出信息的,我們可以自由定義成另外的輸出模塊,比如自定義IO向1602液晶輸出信息。keil的printf函數大致搞明白了,回頭再研究下IAR for MSP430,可惜,我沒有能夠查看該軟體標準函數庫裡的printf.c 和 putchar.c,不過我覺得程序沒有通過串口向電腦列印輸出信息,是因為底層的putchar函數沒有定義為通過MSP430G2553的UART進行輸出,那如果我自己重定向一個putchar函數,覆蓋掉標準函數庫裡面的putchar,是不是就能夠輸出了呢
  • 凔海筆記之FPGA(八):Verilog描述RS232 UART
    記得剛用單片機學習串口通訊的時候,我以為串口通訊=uart=RS232。o(╯□╰)o直到最近我才明白    串口通訊(Serial Communication):是指外設和計算機間,通過數據信號線 、地線、控制線等,按位進行傳輸數據的一種通訊方式,就是一類通訊方式。