一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

怎樣用UART與PC通信

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

掃碼添加小助手

加入工程師交流群

示意圖

怎樣用UART與PC通信

微控制器通信 - 什么是UART

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

通過Wi-Fi(如ESP8266模塊)

以太網(wǎng)

USB

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

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

串行概述

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

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

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

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

UART模塊的簡(jiǎn)單框圖

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

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

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

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

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

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

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

ATmega上的UART

ATmega168上的UART模塊非常復(fù)雜,因?yàn)樗试S不同的操作模式(包括同步傳輸),但我們將配置UART以使用適用于99%基于UART的項(xiàng)目的最常見設(shè)置。

時(shí)鐘

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

奇偶校驗(yàn)位和停止位

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

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

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

UART模塊能夠以不同的位寬發(fā)送數(shù)據(jù),但對(duì)于大多數(shù)項(xiàng)目,我們將使用8位數(shù)據(jù)大小,因?yàn)槲覀兊奈⒖刂破魇且粋€(gè)8位器件。為此,我們將寄存器UCSRnB和UCSRnC中的UCSZ位的值設(shè)置為011。

波特率

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

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

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

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

啟用接收/傳輸

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

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

讀/寫UART

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

一些有用的控制信號(hào)

一個(gè)寄存器UCSR0A可以幫助確定UART的狀態(tài)模塊,因?yàn)樗袔讉€(gè)狀態(tài)位。

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

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

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

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

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

當(dāng)奇偶校驗(yàn)時(shí),UPE0,位2將為1在接收到的字節(jié)上檢測(cè)到錯(cuò)誤

一個(gè)簡(jiǎn)單的UART示例

此示例將介紹如何創(chuàng)建一個(gè)echo設(shè)備,該設(shè)備將等待連接的PC向UART線路發(fā)送一個(gè)字節(jié)。一旦檢測(cè)到,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(!(UCSR0A & (1 《《 TXC0)));

}

}

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

    關(guān)注

    9

    文章

    2149

    瀏覽量

    156432
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1275

    瀏覽量

    103803
  • ATmega168
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    WTVxxxx系列語音芯片UART通信說明書V1

    WTVxxxx系列語音芯片UART通信說明書V1
    發(fā)表于 03-06 08:26 ?0次下載

    開源直接!UDP-UART數(shù)據(jù)透?jìng)鱽砹?/a>

    今天就來分享一下UDP-UART透?jìng)魇纠?,源碼開放,可根據(jù)實(shí)際需求靈活應(yīng)用。 一、UDP-UART透?jìng)骱?jiǎn)介 UDP-UART透?jìng)魇且环N將UDP數(shù)據(jù)流直接傳輸?shù)?b class='flag-5'>UART接口的
    的頭像 發(fā)表于 02-05 17:14 ?327次閱讀
    開源直接<b class='flag-5'>用</b>!UDP-<b class='flag-5'>UART</b>數(shù)據(jù)透?jìng)鱽砹? />    </a>
</div>                              <div   id=

    UC-006:4線UARTPC接口

    電子發(fā)燒友網(wǎng)站提供《UC-006:4線UARTPC接口.pdf》資料免費(fèi)下載
    發(fā)表于 01-14 16:30 ?0次下載
    UC-006:4線<b class='flag-5'>UART</b>至<b class='flag-5'>PC</b>接口

    USB/UART橋接器的應(yīng)用優(yōu)勢(shì)

    這一切都要?dú)w功于USB/UART橋接器——它們是嵌入式系統(tǒng)中的強(qiáng)大工具。無論您是從事調(diào)試、物聯(lián)網(wǎng)還是工業(yè)應(yīng)用,了解此橋接器都可以簡(jiǎn)化硬件集成并提高通信可靠性。以下是USB/UART橋接如何簡(jiǎn)化這些連接以及一些現(xiàn)實(shí)用例的說明(見下
    的頭像 發(fā)表于 12-03 13:52 ?787次閱讀
    USB/<b class='flag-5'>UART</b>橋接器的應(yīng)用優(yōu)勢(shì)

    通信技術(shù):UART串口通信開源代碼實(shí)操!

    今天我們分享的是關(guān)于UART串口通信示例,歡迎大家探討
    的頭像 發(fā)表于 11-05 11:56 ?3919次閱讀
    <b class='flag-5'>通信</b>技術(shù):<b class='flag-5'>UART</b>串口<b class='flag-5'>通信</b>開源代碼實(shí)操!

    UART串口通信示例:開啟通信寶藏之門的定位模組LuatOS入門

    今天我們要講解的是UART串口通信示例,關(guān)于Air201資產(chǎn)定位模組LuatOS入門,我會(huì)從搭建環(huán)境、代碼燒錄、示例效果等來細(xì)說:
    的頭像 發(fā)表于 11-03 19:55 ?1462次閱讀
    <b class='flag-5'>UART</b>串口<b class='flag-5'>通信</b>示例:開啟<b class='flag-5'>通信</b>寶藏之門的定位模組LuatOS入門

    UART通信協(xié)議介紹和數(shù)據(jù)傳輸工作流程

    UART是一種通用串行數(shù)據(jù)總線,用于異步通信。該總線雙向通信,可實(shí)現(xiàn)全雙工傳輸和接收。UART通常用來實(shí)現(xiàn)與PC之間數(shù)據(jù)
    的頭像 發(fā)表于 10-24 14:20 ?2206次閱讀
    <b class='flag-5'>UART</b><b class='flag-5'>通信</b>協(xié)議介紹和數(shù)據(jù)傳輸工作流程

    多個(gè)TLV320AIC3254一路I2C總線對(duì)其配置可行嗎?

    一片CPU3片TLV320AIC3254做音頻處理,想用一路I2C總線對(duì)其配置可行嗎? 地址好像是唯一的 0011000沒法設(shè)置,手冊(cè)中又提到可使用10位地址但是沒找到說明怎樣用,哪位大俠用過
    發(fā)表于 10-22 07:54

    如何實(shí)現(xiàn)51單片機(jī)與PC機(jī)的串行通信

    51單片機(jī)與PC機(jī)的串行通信是一種常見的通信方式,它允許單片機(jī)通過串行接口與PC機(jī)進(jìn)行數(shù)據(jù)交換。這種通信方式在嵌入式系統(tǒng)、工業(yè)控制、物聯(lián)網(wǎng)等
    的頭像 發(fā)表于 10-21 11:35 ?2644次閱讀

    uart波特率和傳輸頻率的關(guān)系 UART串口的常用波特率為多少

    UART(Universal Asynchronous Receiver/Transmitter)是一種廣泛使用的異步串行通信技術(shù),它允許兩臺(tái)設(shè)備之間進(jìn)行雙向數(shù)據(jù)傳輸。在UART通信
    的頭像 發(fā)表于 10-06 16:12 ?6888次閱讀
    <b class='flag-5'>uart</b>波特率和傳輸頻率的關(guān)系 <b class='flag-5'>UART</b>串口的常用波特率為多少

    MSPM0 UART通信中DMA和Ring Buffer環(huán)形緩沖的應(yīng)用

    電子發(fā)燒友網(wǎng)站提供《MSPM0 UART通信中DMA和Ring Buffer環(huán)形緩沖的應(yīng)用.pdf》資料免費(fèi)下載
    發(fā)表于 09-05 11:01 ?0次下載
    MSPM0 <b class='flag-5'>UART</b><b class='flag-5'>通信</b>中DMA和Ring Buffer環(huán)形緩沖的應(yīng)用

    怎樣用THS3201實(shí)現(xiàn)輸出功率可調(diào)?

    怎樣用THS3201實(shí)現(xiàn)輸出功率可調(diào)?
    發(fā)表于 08-26 08:28

    OPA735加OPA333,怎樣用TINA TI去仿真?

    當(dāng)輸入信號(hào)VG1從7.06V慢慢變化到7.22V時(shí)。 輸出電壓Vout的變化必須是接近線性變化的。我想知道我該怎樣用TINA TI去仿真?怎樣設(shè)置那個(gè)輸入信號(hào)VG1才能達(dá)到我的目的。因?yàn)檫@個(gè)電壓源好像
    發(fā)表于 08-02 08:39

    怎樣用表測(cè)穩(wěn)壓管穩(wěn)壓值

    表是一種常用的電子測(cè)量工具,可以用來測(cè)量電壓、電流、電阻等多種參數(shù)。在測(cè)量穩(wěn)壓管的穩(wěn)壓值時(shí),我們可以使用萬表的直流電壓測(cè)量功能。以下是步驟和注意事項(xiàng): 準(zhǔn)備工具和材料 萬表 穩(wěn)壓管 電源
    的頭像 發(fā)表于 07-31 14:26 ?3091次閱讀

    簡(jiǎn)單認(rèn)識(shí)UART通信協(xié)議

    UART(Universal Asynchronous Receiver/Transmitter,通用異步收發(fā)傳輸器)通信協(xié)議是一種常見的串行通信協(xié)議,廣泛應(yīng)用于計(jì)算機(jī)、嵌入式系統(tǒng)、傳感器、無線
    的頭像 發(fā)表于 07-25 18:07 ?2113次閱讀