哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

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

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

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

怎樣用UART與PC通信

454398 ? 來源:工程師吳畏 ? 2019-07-31 17:12 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

示意圖

怎樣用UART與PC通信

微控制器通信 - 什么是UART?

微控制器經(jīng)常發(fā)現(xiàn)自己處于具有特定功能的專用電路中,例如測量,監(jiān)控和控制。但是,有些情況下將微控制器連接到計算機可能非常有益甚至是必要的(例如,設備配置)。有幾種方法可以實現(xiàn)PC-Microcontroller通信

通過Wi-Fi(如ESP8266模塊)

以太網(wǎng)

USB

雖然這些形式的通信可能允許高數(shù)據(jù)傳輸速率,但它們很難使用,大多數(shù)微控制器都有另外一種類型的通信,稱為UART,它代表通用異步接收器/發(fā)送器。

這是一個簡單的串行連接,可以是用于以低速發(fā)送少量數(shù)據(jù),并且使用和實現(xiàn)極其簡單。使UART更加便捷的是,有USB轉串口轉換器可用于允許微控制器通過USB使用虛擬COM端口與PC通信。

串行概述

使用微控制器和計算機的串行通信可包括許多不同的設置,包括奇偶校驗和停止位。但是,在本教程中,我們將介紹最簡單的串行通信形式,這也是最常見的形式之一。所以我們首先要看的是如何發(fā)送串行數(shù)據(jù)。首先,我們來看看硬件!

微控制器上最簡單形式的串行外設是一個美化的移位寄存器,它使用兩個獨立的I/O引腳來發(fā)送數(shù)據(jù)(TxDn)和接收數(shù)據(jù)(RxDn)

當需要從設備發(fā)送數(shù)據(jù)時,它會將數(shù)據(jù)發(fā)送到其發(fā)送移位寄存器中,然后逐位計時數(shù)據(jù),直到所有數(shù)據(jù)都已發(fā)送完畢。當需要讀取數(shù)據(jù)時,接收器首先需要檢測是否正在接收某些數(shù)據(jù)。

一旦滿足此條件,接收器就會將數(shù)據(jù)移入移位寄存器。完成后,可以從接收移位寄存器中讀取器件,并以其認為合適的任何方式處理數(shù)據(jù)。

UART模塊的簡單框圖

UART模塊中使用的協(xié)議本身(有時稱為RS-232)包含有助于數(shù)據(jù)傳輸/接收的選項和附加功能。下圖顯示了典型的UART傳輸,包括起始位,數(shù)據(jù)本身,奇偶校驗位和停止位。

從ATmega168數(shù)據(jù)表中獲取的圖像

IDLE - 如果沒有發(fā)生傳輸,則傳輸線必須保留邏輯1(5V,3.3V等)

起始位 - UART線上的下降沿表示傳輸即將開始

數(shù)據(jù)位 - 這些是我們的實際數(shù)據(jù)位發(fā)送,并且位首先發(fā)送到最低位(位0,位1 。..位7)

奇偶校驗位 - 此可選位可用作錯誤檢查的基本形式具有等于所有位組合的異或(XOR)的值

停止位 - 這是停止傳輸所必需的并且是邏輯1.有時,可以使用兩個停止位,但通常只使用一個

ATmega上的UART

ATmega168上的UART模塊非常復雜,因為它允許不同的操作模式(包括同步傳輸),但我們將配置UART以使用適用于99%基于UART的項目的最常見設置。

時鐘

我們需要配置的第一件事是UART模塊的時鐘源(這也配置了UART運行的模式) 。由于我們將使用異步傳輸(時鐘不傳輸,只有數(shù)據(jù)),我們將使用“正常異步”。為此,我們在UCSRnC寄存器中將UMSEL位設置為0.

奇偶校驗位和停止位

由于大多數(shù)傳輸不需要奇偶校驗,我們將禁用該位。為此,我們需要將兩個UPM位都設置為0,這可以在UCSR寄存器中找到。

對于停止位,我們只會使用一個停止位,通過清除UCSRnB寄存器中的USBS位來完成。

數(shù)據(jù)大小

UART模塊能夠以不同的位寬發(fā)送數(shù)據(jù),但對于大多數(shù)項目,我們將使用8位數(shù)據(jù)大小,因為我們的微控制器是一個8位器件。為此,我們將寄存器UCSRnB和UCSRnC中的UCSZ位的值設置為011。

波特率

在談到串行通信時,波特率通常是指每秒傳輸?shù)臄?shù)據(jù)位數(shù),可以認為是連接速度。串行通信的典型波特率包括9600,115200和10417.

對于我們的串行設置,我們將使用9600的波特率(非常常見的波特率)。波特率可以使用下面的公式計算,但是,使用第163-165頁上的表格更容易。

由于我們的ATmega168連接到8MHz振蕩器,我們可以查看下表,看看我們將UBRR寄存器設置為什么值。

對于9600波特,我們將使用值51.請注意,您的CLKDIV8位可能已設置,如果是這種情況,那么您的波特率可能比您預期的慢8倍。如果是這種情況,請嘗試使用UBRR值12而將U2X0設置為開,或使用更高的時鐘速度。

啟用接收/傳輸

我們需要設置幾個啟用位,其他啟用位是可選的。我們需要使能的前兩位是RXEN和TXEN,它們使能接收器和發(fā)送器。

我們可以設置兩個中斷使能位,這意味著當我們的UART模塊完成發(fā)送或接收數(shù)據(jù)時,中斷將觸發(fā)(對實時應用程序有用)。

讀/寫UART

有趣的是,AVR UART外設對接收和發(fā)送寄存器使用相同的I/O地址。當寫入UART數(shù)據(jù)寄存器(UDRn)時,數(shù)據(jù)被發(fā)送到UART發(fā)送器移位寄存器,當從UART數(shù)據(jù)寄存器讀取時,返回來自UART接收器的數(shù)據(jù)。

一些有用的控制信號

一個寄存器UCSR0A可以幫助確定UART的狀態(tài)模塊,因為它有幾個狀態(tài)位。

RXC0,第7位,如果接收緩沖區(qū)中有需要讀取的數(shù)據(jù),則為1

TXC0,第6位,一旦傳輸將為1已完成

如果發(fā)送緩沖區(qū)為空,UDRE0,位5將為1

FE0,位4,發(fā)出幀錯誤警告

DOR0,第3位,發(fā)出數(shù)據(jù)溢出警告(當收到的數(shù)據(jù)太多且接收緩沖區(qū)已滿時)

當奇偶校驗時,UPE0,位2將為1在接收到的字節(jié)上檢測到錯誤

一個簡單的UART示例

此示例將介紹如何創(chuàng)建一個echo設備,該設備將等待連接的PC向UART線路發(fā)送一個字節(jié)。一旦檢測到,AVR將立即發(fā)回相同的字節(jié)以回顯消息。

/*

* AVR UART.c

*

* Created: 09/01/2018

* Author : RobinLaptop

*/

// These are really useful macros that help to get rid of unreadable bit masking code

#define setBit(reg, bit) (reg = reg | (1 《《 bit))

#define clearBit(reg, bit) (reg = reg & ~(1 《《 bit))

#define toggleBit(reg, bit) (reg = reg ^ (1 《《 bit))

#define clearFlag(reg, bit) (reg = reg | (1 《《 bit))

#include

int main(void)

{

// Initialize Registers

// Configure register UCSRA

setBit(UCSR0A, U2X0); // Double the BRG speed (since I am using a 8MHz crystal which is divided by 8)

clearBit(UCSR0A, MPCM0); // Normal UART communication

// Configure register UCSRB

clearBit(UCSR0B, RXCIE0); // We will not enable the receiver interrupt

clearBit(UCSR0B, TXCIE0); // We will not enable the transmitter interrupt

clearBit(UCSR0B, UDRIE0); // We will not enable the data register empty interrupt

setBit(UCSR0B, RXEN0); // Enable reception

setBit(UCSR0B, TXEN0); // Enable transmission

clearBit(UCSR0B, UCSZ02); // 8 bit character size

// Configure register UCSRC

clearBit(UCSR0C, UMSEL00); // Normal Asynchronous Mode

clearBit(UCSR0C, UMSEL01);

clearBit(UCSR0C, UPM00); // No Parity Bits

clearBit(UCSR0C, UPM01); // No Parity Bits

clearBit(UCSR0C, USBS0); // Use 1 stop bit

setBit(UCSR0C, UCSZ01); // 8 bit character size

setBit(UCSR0C, UCSZ00);

// Configure the baud rate register (this is a combination of both UBRR0L and UBRR0H)

// Despite using an 8MHz crystal my Fosc is 1MHz since the CLK8DIV fuse bit is dividing the clock

// by 8. When I try to change this fuse the AVR locks me out!

UBRR0 = 12;

while (1)

{

// Wait until data has been received

while(?。║CSR0A & (1 《《 RXC0)));

// Now send the same byte back

UDR0 = UDR0;

// Wait until the Data Transmit Register is empty

while(?。║CSR0A & (1 《《 TXC0)));

}

}

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

    關注

    9

    文章

    2168

    瀏覽量

    159731
  • uart
    +關注

    關注

    22

    文章

    1319

    瀏覽量

    106958
  • ATmega168
    +關注

    關注

    0

    文章

    9

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    是否可以將 UART4 與 Linux tty 設備綁定,并將其用于 EVK 板與主機 PC 以及 UART2 之間的通信?

    其用于 EVK 板與主機 PC 以及 UART2 之間的通信? 我不介意更改設備驅(qū)動程序和 dts 文件等內(nèi)核代碼來實現(xiàn)這一點。 我使用的 i.MX Yocto 配方版本是 lf-6.1.22-2.0.0。
    發(fā)表于 04-10 11:47

    CW32 UART單線半雙工模式

    引腳需要配置為開漏輸出。另外用戶應采取適當?shù)膽脤颖Wo機制,以確保不會出現(xiàn)多主機同時向總線發(fā)送數(shù)據(jù)。 三、UART單線半雙工通信示例 硬件采用CW32L083VxTx StartKit單板,杜邦線
    發(fā)表于 01-05 06:24

    請問CW32 UART用于數(shù)據(jù)收發(fā)的具體過程是怎樣的?

    CW32 UART用于數(shù)據(jù)收發(fā)的具體過程是怎樣的?
    發(fā)表于 12-24 07:42

    使用CW32 MCU來實現(xiàn)UART串口通信與GPIO控制

    的基礎代碼,供大家參考。 首先,我配置了UART串口,用于與PC端進行通信,實現(xiàn)數(shù)據(jù)的收發(fā)。同時,GPIO口用于控制LED的開關狀態(tài),接收串口數(shù)據(jù)后,點亮或熄滅LED。代碼如下: #include
    發(fā)表于 12-04 08:17

    UART 串口通信還能玩出什么花樣?

    還記得打印機、鼠標和調(diào)制解調(diào)器曾經(jīng)使用粗線和笨重連接器嗎?那些必須擰進電腦里的連接器?這些設備很可能使用UART與電腦通信。雖然USB幾乎完全取代了那些老式的線纜和連接器,但UART絕非過時之物。你
    的頭像 發(fā)表于 11-24 19:05 ?557次閱讀
    <b class='flag-5'>UART</b> 串口<b class='flag-5'>通信</b>還能玩出什么花樣?

    UART通信中出現(xiàn)隨機亂碼怎么解決?

    UART 通信中出現(xiàn)隨機亂碼
    發(fā)表于 11-21 07:05

    UART 升級到 USB-C: 串口通信演變史

    在嵌入式開發(fā)里,“串口”幾乎是每個人繞不開的關鍵詞。剛接觸單片機時,我們的就是UART:插上線,打開串口調(diào)試助手,能收發(fā)數(shù)據(jù)就覺得世界都亮了。然而,當你回頭看,現(xiàn)在的桌面電腦幾乎找不到傳統(tǒng)
    的頭像 發(fā)表于 11-17 10:54 ?1711次閱讀
    <b class='flag-5'>UART</b> 升級到 USB-C: 串口<b class='flag-5'>通信</b>演變史

    多路UART數(shù)據(jù)轉發(fā)芯片 支持1主4從UART接口 UART擴展芯片

    -40℃ 至 85℃ 的工業(yè)級溫度范圍,能夠在嚴苛環(huán)境下保持穩(wěn)定通信。該芯片提供 1 個主 UART 和 4 個從 UART,共 5 個獨立接口。主接口最高通信速率可達 460800
    的頭像 發(fā)表于 11-12 10:33 ?539次閱讀

    RVMCU課堂「13」: 手把手教你玩轉RVSTAR—UART通信

    數(shù)據(jù)傳輸速率較慢,但其占用資源少、成本低、實現(xiàn)簡單,因此在嵌入式系統(tǒng)中應用十分廣泛,而UART(通用異步收發(fā)器)則是眾多串行通信協(xié)議中最典型的一種。本期內(nèi)容將通過PC主機與RV-STAR開發(fā)板間的三個
    發(fā)表于 10-31 07:02

    基于FPGA開發(fā)板TSP的串口通信設計

    本文詳細介紹基于Terasic FPGA開發(fā)板TSP(又名C5P和OSK)和其板載CP2102N USB-UART橋接芯片的串口通信系統(tǒng)設計與實現(xiàn)。系統(tǒng)采用Verilog HDL編寫UART收發(fā)控制器,通過CP2102N實現(xiàn)FP
    的頭像 發(fā)表于 10-15 11:05 ?4797次閱讀
    基于FPGA開發(fā)板TSP的串口<b class='flag-5'>通信</b>設計

    如何利用N9H20 UART模塊接收來自PC/NB的消息?

    利用N9H20 UART模塊接收來自PC/NB的消息
    發(fā)表于 09-05 06:20

    UART 擴展芯片 數(shù)據(jù)轉發(fā)多串口擴展 1主4從,高效通信

    uart
    穩(wěn)控自動化
    發(fā)布于 :2025年08月11日 14:20:36

    求助,6832S做UART通信失敗

    如圖1,我使用到RXD2S和TXD2S兩個引腳通信。 如圖2,這是初始化,我覺得問題就出在初始化這里,第一行語句是把P3.6、P3.7 復用為 RXD2、TXD2 并使能 UART,但是我把這一
    發(fā)表于 06-14 19:03

    芯知識|廣州唯創(chuàng)電子語音芯片UART通信協(xié)議解析:發(fā)碼長度與校驗碼計算

    一、UART通信協(xié)議概述UART(通用異步收發(fā)器)是一種廣泛應用于嵌入式系統(tǒng)的串行通信協(xié)議,其核心特點為無需時鐘同步,通過起始位、數(shù)據(jù)位、校驗位和停止位構成數(shù)據(jù)幀。在語音芯片應用中,
    的頭像 發(fā)表于 05-27 08:48 ?882次閱讀
    芯知識|廣州唯創(chuàng)電子語音芯片<b class='flag-5'>UART</b><b class='flag-5'>通信</b>協(xié)議解析:發(fā)碼長度與校驗碼計算

    MAX3100 SPI/MICROWIRE兼容UART技術手冊

    MAX3100通異步接收器/發(fā)射器(UART)是專為基于微控制器的小型系統(tǒng)優(yōu)化的較早UART。MAX3100采用SPI?/MICROWIRE?接口與主機微控制器(μC)通信,采用緊湊
    的頭像 發(fā)表于 05-26 14:31 ?1284次閱讀
    MAX3100 SPI/MICROWIRE兼容<b class='flag-5'>UART</b>技術手冊
    喀什市| 东源县| 台山市| 昭觉县| 旺苍县| 龙川县| 鹰潭市| 枞阳县| 任丘市| 镇巴县| 姚安县| 济阳县| 神池县| 清水县| 孟州市| 宁波市| 柯坪县| 竹溪县| 凌源市| 淳化县| 长垣县| 曲阳县| 桂阳县| 万全县| 鹤山市| 神池县| 罗田县| 民丰县| 胶南市| 永平县| 邵武市| 类乌齐县| 罗田县| 台南县| 石门县| 达拉特旗| 炉霍县| 中阳县| 溆浦县| 定结县| 灵丘县|