版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、异步串行通信异步串行通信内容提要内容提要通信的基本知识通信的基本知识UART通信通信UART应用应用IrDA通信通信一、概述一、概述 分为同步通信与异步通信分为同步通信与异步通信异步通信:通信双方按照事先约定好的时钟速率来异步通信:通信双方按照事先约定好的时钟速率来进行通信,没有公共的时钟线。进行通信,没有公共的时钟线。同步通信:双方拥有公共时钟,按时钟信号来更新同步通信:双方拥有公共时钟,按时钟信号来更新数据。数据。分为单工、全双工、半双工分为单工、全双工、半双工发送器发送器接收器接收器AB发送器发送器发送器发送器接收器接收器接收器接收器需要两根数据线需要两根数据线单工方式单工方式全双工方式
2、全双工方式发送器发送器接收器接收器接收器接收器发送器发送器发送器发送器接收器接收器接收器接收器发送器发送器半双工方式半双工方式并行通信的数据线并行通信的数据线 n时钟时钟CLKn数据数据D0-D7n读写控制位读写控制位R/Wn数据地址控制位数据地址控制位串行通信的数据线(串行通信的数据线(3 3线通信)线通信) n1根时钟线根时钟线n1根发送线根发送线n1根接收线根接收线1.UART1.UART两线:异步两线:异步+ +全双工全双工 = = 慢慢+ +可以多主机可以多主机2.SPI2.SPI三线:同步三线:同步+ +全双工全双工 = = 快快+ +不能多主机(再加数不能多主机(再加数据线才行)
3、据线才行)3.I2C3.I2C两线:同步两线:同步+ +半双工半双工 = = 慢慢+ +可以多主机可以多主机串行通信协议的分类串行通信协议的分类 SPI:高速同步串行口。:高速同步串行口。34线接口,收发独立、可同步进行线接口,收发独立、可同步进行UART:通用异步串行口。按照标准波特率完成双向通讯,速度慢:通用异步串行口。按照标准波特率完成双向通讯,速度慢UART是用于控制计算机与串行设备的芯片。有一点要注意的是,它是用于控制计算机与串行设备的芯片。有一点要注意的是,它提供了提供了RS-232C数据终端设备接口,这样计算机就可以和调制解调器数据终端设备接口,这样计算机就可以和调制解调器或其它
4、使用或其它使用RS-232C接口的串行设备通信了。接口的串行设备通信了。UART还提供以下功能:还提供以下功能:将由计算机内部传送过来的并行数据转换为输出的串行数据流。将计将由计算机内部传送过来的并行数据转换为输出的串行数据流。将计算机外部来的串行数据转换为字节,供计算机内部使用并行数据的器算机外部来的串行数据转换为字节,供计算机内部使用并行数据的器件使用。件使用。I2C: 能用于替代标准的并行总线,能连接的各种集成电路和功能模块。能用于替代标准的并行总线,能连接的各种集成电路和功能模块。I2C是多主控总线,所以任何一个设备都能像主控器一样工作,并控是多主控总线,所以任何一个设备都能像主控器一
5、样工作,并控制总线。总线上每一个设备都有一个独一无二的地址,根据设备它们制总线。总线上每一个设备都有一个独一无二的地址,根据设备它们自己的能力,它们可以作为发射器或接收器工作。多路微控制器能在自己的能力,它们可以作为发射器或接收器工作。多路微控制器能在同一个同一个I2C总线上共存。总线上共存。IEEE488定义并行通行状态时,规定设备线总常不得超过定义并行通行状态时,规定设备线总常不得超过20米,并且米,并且任意两个设备间的长度不得超过任意两个设备间的长度不得超过2米;而对于串口而言,长度可达米;而对于串口而言,长度可达1200米。米。I2C线更少,比线更少,比UART、SPI更为强大,但是技
6、术上也更加麻烦些,更为强大,但是技术上也更加麻烦些,因为因为I2C需要有双向需要有双向IO的支持,而且使用上拉电阻,抗干扰能力较的支持,而且使用上拉电阻,抗干扰能力较弱,一般用于同一板卡上芯片之间的通信,较少用于远距离通信。弱,一般用于同一板卡上芯片之间的通信,较少用于远距离通信。SPI实现要简单一些,实现要简单一些,UART需要固定的波特率,就是说两位数据的需要固定的波特率,就是说两位数据的间隔要相等,而间隔要相等,而SPI则无所谓,因为它是有时钟的协议。则无所谓,因为它是有时钟的协议。I2C的速度比的速度比SPI慢一点,协议比慢一点,协议比SPI复杂一点,但是连线也比标准复杂一点,但是连线
7、也比标准的的SPI要少。要少。牛人的建议:牛人的建议:UART:UART:通用异步收发器的缩写,一般简称为串口。通用异步收发器的缩写,一般简称为串口。 Universal Asynchronous Receive/Transmit有两根数据线:发送有两根数据线:发送TxTx和接收和接收RxRx。不需要时钟线,全双工工作。不需要时钟线,全双工工作。二、二、UART原理原理 UARTUART双机通信双机通信UARTUART多机通信多机通信波特率是指:单片机或计算机在串口通信时的速率。波特率是指:单片机或计算机在串口通信时的速率。指的是信号被调制以后在单位时间内的变化,即单位时间内载波参数指的是信号
8、被调制以后在单位时间内的变化,即单位时间内载波参数变化的次数。变化的次数。如每秒钟传送如每秒钟传送240240个字符,而每个字符格式包含个字符,而每个字符格式包含1010位(位(1 1个起始位,个起始位,1 1个个停止位,停止位,8 8个数据位),这时的波特率为个数据位),这时的波特率为240Bd240Bd,比特率为比特率为1010位位* *240240个个/ /秒秒=2400bps=2400bps。又比如每秒钟传送又比如每秒钟传送240240个二进制位,这时的波特率为个二进制位,这时的波特率为240Bd240Bd,比特率也是比特率也是240bps240bps。波特率,可以通俗的理解为波特率,
9、可以通俗的理解为一个设备在一秒钟内发送(或接收)了一个设备在一秒钟内发送(或接收)了多少码元的数据多少码元的数据。它是对符号传输速率的一种度量,它是对符号传输速率的一种度量,1 1波特即指每秒传输波特即指每秒传输1 1个码元符号个码元符号(通过不同的调制方式,可以在一个码元符号上负载多个(通过不同的调制方式,可以在一个码元符号上负载多个bitbit位信息),位信息),1 1比特每秒是指每秒传输比特每秒是指每秒传输1 1比特(比特(bitbit)。波特率和比特率:波特率和比特率:波特率的计算波特率的计算1.1.设置波特率时要选择合适的时钟源设置波特率时要选择合适的时钟源较低的波特率,一般是小于等
10、于较低的波特率,一般是小于等于96009600,可选择,可选择ACLKACLK大于大于96009600,要选用,要选用SMCLKSMCLK。(因为波特率发生器分频系数要求大于(因为波特率发生器分频系数要求大于3 3)2.2.UCAxBRUCAxBR1 1和和UCAxBR0UCAxBR0、UCAxMCTLUCAxMCTL的设置的设置 N = fBRCLK/Baudrate N = fBRCLK/Baudrate如果如果N N等于或大于等于或大于1616,可以设置,可以设置UCOS16UCOS16=1=1为高频模式为高频模式在低频模式下:在低频模式下: UCBRx = INT(N) UCBRx =
11、 INT(N) UCBRSx = round( ( N INT(N) ) UCBRSx = round( ( N INT(N) ) 8 ) 8 ) UCAxMCTL:UCAxMCTL:例例1 1:1048576Hz1048576Hz频率下驱动以频率下驱动以115200115200波特率异步通讯波特率异步通讯( (ACLK = 32768Hz, MCLK = SMCLK = 1048576HzACLK = 32768Hz, MCLK = SMCLK = 1048576Hz。) ) N = 1048576/115200 = 9.10 UCBRx = INT(N) = INT(9.10) = 9 U
12、CBRSx = round(NINT(N)8) = round(9.109) 8)=round(0.8)=1 UCA0CTL1 |= UCSSEL_2;/ 选选SMCLK为时钟为时钟 UCAxBR0 = 9; UCAxBR1 = 0; UCAxMCTL| = UCBRS_1; 例例2 2:32768Hz32768Hz频率下驱动以频率下驱动以24002400波特率异步通信。波特率异步通信。 ACLK=32768Hz, MCLK = SMCLK = 1.045MHz ACLK=32768Hz, MCLK = SMCLK = 1.045MHz N = 32768/2400 = 13.65 UCBRx
13、 = INT(N) = INT(13.65) = 13 UCBRSx = round( ( NINT(N) )8 ) =round(13.6513) 8)=round(5.2)=5 UCA0CTL1 |= UCSSEL_1; / 选选ACLK为时钟为时钟UCAxBR0 = 13;UCAxBR1 = 0 ;UCAxMCTL| = UCBRS_5; 在过采样下在过采样下( (Oversampling Baud Rate ModeOversampling Baud Rate Mode) ): UCBRx = INT(N UCBRx = INT(N/16/16) ) UCBRFx = round( (
14、 (N/16) INT(N/16) ) UCBRFx = round( ( (N/16) INT(N/16) ) 16 ) 16 ) UCAxMCTL:UCAxMCTL:例例3 3:1048576Hz:1048576Hz频率下驱动以频率下驱动以96009600波特率异步通讯波特率异步通讯 UCBRx = INT(N/16)=INT(fBRCLK/Baudrate/16) UCBRx = INT(1048576Hz/(16*9600) = INT(6.8) UCBRFx = round( ( (N/16) INT(N/16) ) 16 ) = round( ( 6.8 6 ) 16 )=13 U
15、CAxCTL1 |= UCSSEL_2; / 选选SMCLK为时钟为时钟 UCAxBR0 = 6; / 1MHz 9600 UCAxBR1 = 0; / 1MHz 9600 UCAxMCTL |= UCBRF_13 + UCOS16; /7-4:UCBRFx,3-1:UCBRSx,0:UCOS161.USCI_A1.USCI_A模块模块 UARTUART、LINLIN、IrDAIrDA、SPISPI模式模式2.USCI_B2.USCI_B模块模块 SPISPI、I2CI2C模式模式三、三、MSP430G2553UART USCIUSCI模块初始化模块初始化1.设置设置UCSWRST=12.初始
16、化所有的初始化所有的USCI寄存器寄存器3.配置端口配置端口4.软件清除软件清除UCSWRST5.设置设置UCRXIE或或UCTXIE 使能中断使能中断void USCI_A0_graceInit(void) UCA0CTL1 |= UCSWRST; UCA0CTL1 = UCSSEL_2;/设时钟设时钟 UCA0MCTL = UCBRF_0 + UCBRS_1;/配置波特率配置波特率 UCA0BR0 = 104; /配置波特率配置波特率 UCA0CTL1 &= UCSWRST; 1.1.用用GraceGrace将将USCI_A0USCI_A0模块配置为模块配置为UARTUART模式,并模式,
17、并初始化。初始化。2.2.向向UCA0TXBUFUCA0TXBUF里扔数据,自动将数据发送出去。里扔数据,自动将数据发送出去。当当UCA0TXBUFUCA0TXBUF为空时,触发为空时,触发UCA0TXIFGUCA0TXIFG中断标中断标志位,表明可以向志位,表明可以向UCA0TXBUFUCA0TXBUF里扔下一个数据。里扔下一个数据。3.UCA0RXBUF3.UCA0RXBUF接收到完整数据后,触发接收到完整数据后,触发UCA0RXIFGUCA0RXIFG中断标志位,表明中断标志位,表明CPUCPU应尽快将应尽快将UCA0RXBUFUCA0RXBUF里的数据里的数据“取走取走”。UARTUA
18、RT工作过程工作过程 MSP430G2xx3 /| XIN|- | | | -|RST XOUT|- | | | P1.2/UCA0TXD|- | | 9600 - 8N1 | P1.1/UCA0RXD|-四、四、UART应用应用 #include void main( ) WDTCTL = WDTPW + WDTHOLD; UCA0CTL1 |= UCSWRST; P1SEL |= BIT1 + BIT2 ; / P1.1 = RXD, P1.2=TXD P1SEL2 |= BIT1 + BIT2 ; / P1.1 = RXD, P1.2=TXD UCA0CTL1 |= UCSSEL_2;
19、/ SMCLK UCA0BR0 = 104; / 1MHz 9600 UCA0BR1 = 0; / 1MHz 9600 UCA0MCTL = UCBRS_1; / Modulation UCBRSx = 1 UCA0CTL1 &= UCSWRST; / *Initialize USCI state machine* IE2 |= UCA0RXIE; / Enable USCI_A0 RX interrupt _bis_SR_register(LPM0_bits + GIE); / Enter LPM0, interrupts enabled#pragma vector=USCIAB0RX_VE
20、CTOR_interrupt void USCI0RX_ISR(void) while (!(IFG2&UCA0TXIFG); / USCI_A0 TX buffer ready? UCA0TXBUF = UCA0RXBUF; / TX - RXed characterMSP430G2553中断向量有:中断向量有:串口中断向量:串口中断向量:USCIAB0RX_VECTOR USCIAB0TX_VECTOR外部中断向量:外部中断向量:PORT1_VECTOR PORT2_VECTOR定时器中断向量:定时器中断向量:TIMER0_A1_VECTOR TIMER0_A0_VECTORTIMER1_
21、A1_VECTORTIMER1_A0_VECTORMSP430F6638中断向量有:中断向量有:串口中断向量:串口中断向量:USCI_A0_VECTOR USCI_A1_VECTOR USCI_B0_VECTOR USCI_B1_VECTOR外部中断向量:外部中断向量:PORT1_VECTOR PORT2_VECTOR定时器中断向量:定时器中断向量:TIMER0_A1_VECTORTIMER0_B1_VECTOR TIMER0_A0_VECTORTIMER0_B0_VECTORTIMER1_A1_VECTORTIMER2_A1_VECTORTIMER1_A0_VECTORTIMER2_A0_V
22、ECTORMSP430G2xx3 /| XIN|- | | | 32kHz -|RST XOUT|- | | | P1.2/UCA0TXD|- | | 9600 - 8N1 | P1.1/UCA0RXD|-#include const char string1 = Hello Worldrn ;unsigned int i;int main(void) WDTCTL = WDTPW + WDTHOLD; / Stop WDT UCA0CTL1 |= UCSWRST; P1SEL = BIT1 + BIT2 ; / P1.1 = RXD, P1.2=TXD P1SEL2 = BIT1 + BIT
23、2 ; / P1.1 = RXD, P1.2=TXD UCA0CTL1 |= UCSSEL_1; / CLK = ACLK UCA0BR0 = 0 x03; / 32kHz/9600 = 3.41 UCA0BR1 = 0 x00; UCA0MCTL = UCBRS_3; / Modulation UCBRSx = 3 UCA0CTL1 &= UCSWRST; / *Initialize USCI state machine* IE2 |= UCA0RXIE; / Enable USCI_A0 RX interrupt _bis_SR_register(LPM3_bits + GIE); / E
24、nter LPM3 w/ int until Byte RXed#pragma vector=USCIAB0TX_VECTOR_interrupt void USCI0TX_ISR(void) UCA0TXBUF = string1i+; / TX next character if (i = sizeof string1 - 1) / TX over? IE2 &= UCA0TXIE; / Disable USCI_A0 TX interrupt#pragma vector=USCIAB0RX_VECTOR_interrupt void USCI0RX_ISR(void) if (UCA0R
25、XBUF = u) / u received? i = 0; IE2 |= UCA0TXIE; / Enable USCI_A0 TX interrupt UCA0TXBUF = string1i+; MSP430G2xx3 MSP430G2xx3 | XIN|- /| XIN|- | | 32kHz | | | 32kHz | XOUT|- -|RST XOUT|- | | /| | | | RST|- | | | | | | -|P1.3 | | P1.0|- LED -|P1.4 | | P1.6|- LEDLED -|P1.0 | | P1.3|-LED -|P1.6 | | P1.4
26、|P1.1 | | | 9600 | | | UCA0RXD/P1.1|- |P1.2 |#include void main( ) WDTCTL = WDTPW + WDTHOLD; / Stop watchdog timer P1DIR = BIT0 + BIT6; / P1.0/6 setup for LED output P1OUT & = BIT0 + BIT6; UCA0CTL1 |= UCSWRST; P1SEL = BIT1 + BIT2 ; / P1.1 = RXD, P1.2=TXD P1SEL2 = BIT1 + BIT2; UCA0CTL1 |= UCSSEL_1; /
27、 CLK = ACLK UCA0BR0 = 3; / 32kHz/9600 = 3.41 UCA0BR1 = 0; UCA0MCTL = UCBRS_3; / Modulation UCBRSx = 3 UCA0CTL1 &= UCSWRST; / *Initialize USCI state machine* IE2 |= UCA0RXIE + UCA0TXIE; / Enable USCI_A0 TX/RX interrupt _bis_SR_register(LPM3_bits + GIE); / Enter LPM3 w/ interrupts enabled/ USCI A0/B0
28、Transmit ISR#pragma vector=USCIAB0TX_VECTOR_interrupt void USCI0TX_ISR(void) unsigned char TxByte=0; if (P1IN & BIT3) TxByte |= BIT6; if (P1IN & BIT4) TxByte |= BIT0; UCA0TXBUF = TxByte; / Read, justify, and transmit/ USCI A0/B0 Receive ISR#pragma vector=USCIAB0RX_VECTOR_interrupt void USCI0RX_ISR(v
29、oid) P1OUT = UCA0RXBUF; / Display RXed charater串行通信模式串行通信模式MSP430单片机的串行通信模式有单片机的串行通信模式有4种种:由由UCMODE控制选择。控制选择。UART普通模式普通模式这是最普遍采用的工作模式,也是最为简这是最普遍采用的工作模式,也是最为简单的工作模式。单的工作模式。示例:示例:回应接收的字符,开启接收中断,每接收到一个字符,就进入中断处理函数,将接收缓冲回应接收的字符,开启接收中断,每接收到一个字符,就进入中断处理函数,将接收缓冲寄存器的值赋给发送缓冲寄存器,波特率为寄存器的值赋给发送缓冲寄存器,波特率为9600,AC
30、LK = 32768Hz crystal, MCLK = SMCLK = DCO 1.045MHz,波特率配置计算方法:波特率配置计算方法:ACLK / Baud = 32768Hz 9600 = 3.41UCA1BR0 = 3; UCA1BR1 = 0; round(N-INT(N)16 = 3波特率控制寄存器波特率控制寄存器 UCAxBR0和和UCAxBR1UCAxBR0是波特率发生器的低是波特率发生器的低8位位;UCAxBR1是波特率发生器的高是波特率发生器的高8位位.串口中断允许寄存器串口中断允许寄存器UCAxIE0: 发送中断禁止发送中断禁止1: 发送中断允许发送中断允许0: 接收中
31、断禁止接收中断禁止1: 接收中断允许接收中断允许串口中断标志寄存器串口中断标志寄存器 UCAxIFG发送中断标志位,当发送中断标志位,当UCA0TXBUF为空时,为为空时,为1当当UCA0RXBUF已经接收到完整的字符已经接收到完整的字符时,为时,为1空闲线路多处理机模式空闲线路多处理机模式发送空闲帧:发送空闲帧:1.置位置位UCTXADDR,然后把地址字符写入发送缓冲,然后把地址字符写入发送缓冲UCAxTXBUF。对新数。对新数据来说,据来说,UCAxTXBUF必须是准备好的(必须是准备好的(UCTXIFG=1)。这会产生一个)。这会产生一个11位的空闲周期,随后发送地址字符。当地址字符从发
32、送缓冲位的空闲周期,随后发送地址字符。当地址字符从发送缓冲UCAxTXBUF进进入移位寄存器时入移位寄存器时UCTXADDR会自动复位。会自动复位。2.把要发送的数据字符写入发送缓存把要发送的数据字符写入发送缓存UCAxTXBUF。对新数据来说,。对新数据来说,UCAxTXBUF必须是准备好的(必须是准备好的(UCTXIFG=1)。对新数据来说,只要移位)。对新数据来说,只要移位寄存器是准备好状态,写入发送缓存寄存器是准备好状态,写入发送缓存UCAxTXBUF的数据被传送到移位寄存的数据被传送到移位寄存器并被发送出去。在发送的地址和数据之间或在发送的数据之间空闲线路时器并被发送出去。在发送的地
33、址和数据之间或在发送的数据之间空闲线路时间不能忽略,否则,发送的数据将被误解为地址。间不能忽略,否则,发送的数据将被误解为地址。块的起始信号:块的起始信号:方法方法1:特意在前后两个数据块之间增加:特意在前后两个数据块之间增加IO位或更多位的空闲时间。位或更多位的空闲时间。方法方法2:在写:在写SCITXBUF寄存器之前,寄存器之前,SCI口首先将口首先将TXWAKE位置位置1,这样就会,这样就会自动发送自动发送11位的空闲时间。在这种模式下,除非必要,否则串行通信线路不会位的空闲时间。在这种模式下,除非必要,否则串行通信线路不会空闲。在设置空闲。在设置TXWAKE后发送地址数据前,要向后发送
34、地址数据前,要向SCITXBUF写入一个无关的数写入一个无关的数据,以保障能够发送空闲时间。据,以保障能够发送空闲时间。在一个空闲周期之后接收的第一个字符是地址字符。在一个空闲周期之后接收的第一个字符是地址字符。UCIDIL被用作每个字符被用作每个字符块的地址标签。在线路空闲多机模式下,当接收的字符是地址时块的地址标签。在线路空闲多机模式下,当接收的字符是地址时UCIDIL就会就会被置位。被置位。UCDORM被用于在多机模式下控制数据接收。当被用于在多机模式下控制数据接收。当UCDORM=1时,所有的非地时,所有的非地址字符被拼装起来但不会将该字符移送到接收缓冲址字符被拼装起来但不会将该字符移送到接收缓冲UCAxRXBUF,同时产生中同时产生中断标志断标志UCRXIFG=1.当当UCRXEIE=1时,任何可用的错误标志被置位。当时,任何可用的错误标志被置位。当UCRXEIE=0并且接收到地址字符,但传输字符发生了帧错误或奇偶错误,字并且接收到地址字符,但传输字符发生了帧
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 辽阳职业技术学院《化工CAD制图》2023-2024学年第一学期期末试卷
- 五年级数学下册应用题-分数应用题
- 廊坊燕京职业技术学院《信息系统审计》2023-2024学年第一学期期末试卷
- 江西师范高等专科学校《新媒体网络营销划写作》2023-2024学年第一学期期末试卷
- 嘉应学院《奥尔夫音乐教学法》2023-2024学年第一学期期末试卷
- 湖州学院《传感器技术与应用》2023-2024学年第一学期期末试卷
- 湖南国防工业职业技术学院《电子学二》2023-2024学年第一学期期末试卷
- 红河卫生职业学院《传播学原理与技能》2023-2024学年第一学期期末试卷
- 淄博师范高等专科学校《现代数值仿真技术》2023-2024学年第一学期期末试卷
- 周口理工职业学院《热工材料基础》2023-2024学年第一学期期末试卷
- 保险公估作业指导书x
- 新人教版八年级数学下册 第18章平行四边形 导学案
- 《生理心理学实验实训》指导书-
- 教练技术三阶段讲义
- GB/T 23799-2021车用甲醇汽油(M85)
- 车工工艺课件(绪论、一章)
- 催收服务工作手册方案
- 信息化系统数据恢复应急演练方案
- 常用有机溶剂性质
- 公司没有出审计报告情况说明解释
- (完整word版)高考英语作文练习纸(标准答题卡)
评论
0/150
提交评论