资源描述:
《通用异步收发器》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
010UART模块通用异步收发器(UniversalAsynchronousReceiver/Transmitters,UART)
1数据通信的基本方式:并行通信与串行通信.1、串行通信基础知识并行通信:指利用多条数据传输线将一个数据的各位同时传送.特点:传输速度快,适用于短距离通信。串行通信:指利用一条传输线将数据一位位地顺序传送。特点:通信线路简单,利用电话或电报线路就可实现通信,降低成本,适用于远距离通信,但传输速度慢。
2常见的串行传输I2CSPIUARTUSB1394ETHERNET
3串行通信:分为同步通信(SYNC)与异步通信(ASYNC)两种方式。通信的双方应该有一个约定,什么时候开始发送,什么时候发送完毕;接收方收到的信息是否正确等,这就是通信协议。主要解决传送速率、信息格式、位同步、字符同步、数据校验等问题。UART通常采用NRZ数据格式(“标准不归零传号/空号数据格式”),“不归零”的最初含义是:用正、负电平表示二进制值,不使用零电平。“mark/space”即“传号/空号”分别是表示两种状态的物理名称,逻辑名称记为“1/0”。1、串行通信基础知识
4异步通信1、串行通信基础知识以字符为单位传输帧的组成:“起止同步式”,起始位,数据位,校验位,停止位.优点:硬件结构简单。缺点:传输速度慢。
5同步通信1、串行通信基础知识在同步通信中,发送方在数据或字符开始处就用同步字符(常约定1~2个字节)指示一帧的开始,由时钟来实现发送端和接收端同步,接收方一旦检测到与规定的同步字符符合,下面就连续按顺序传送若干个数据,最后发校验字节。SYN字符1SYN字符2数据1数据2….数据n连续传送n个数据校验
6数据传输速率比特率(BitRate)每秒传输的二进制位数bps波特率(BaudRate)――每秒传输的离散状态数在一个信道上,如果只有高、低电平两种离散状态(分别代表“1”和“0”),则波特率与比特率刚好一致。如果在某个信道中可以传输多种不同的离散状态,则每个状态可以携带两位或两位以上的二进制数,此时,波特率就不等于比特率。波特率标准值300,600,900,1200,1800,2400,4800,9600,19200,38400,57600,115200…1、串行通信基础知识
7校验ParityCheck校验的意义:检出错误,由软件纠正(请求重发)差错由软件确认,硬件不提供出错信息——无校验(None)添加校验位,该位是“1”或“0”,使得字符的数据位加校验位,“1”的个数是奇数——奇校验(Odd)偶数——偶校验(Even)采用何种校验是通信双方事先规定好的(通信协议)。仍有出错概率。Ethernet采用更加复杂的校验算法.1、串行通信基础知识
8串行通信的传输方式1、串行通信基础知识站A站B单工单工(Simplex):数据传送是单向的,一端为发送端,另一端为接收端。这种传输方式中,除了地线之外,只要一根数据线就可以了。有线广播就是单工的。全双工(Full-duplex):数据传送是双向的,且可以同时接收与发送数据。这种传输方式中,除了地线之外,需要两根数据线。一般情况下,MCU的异步串行通信接口均是全双工的。全双工站A站B
9站A站B半双工在计算机串行通讯中主要使用半双工和全双工方式。半双工(Half-duplex):数据传送也是双向的,但是在这种传输方式中,除了地线之外,一般只有一根数据线。任何一个时刻,只能由一方发送数据,另一方接收数据,不能同时收发。串行通信的传输方式1、串行通信基础知识
10[例1]某异步通信的波特率为4800,8个数据位,无校验位,一个停止位。试估算每个字符传输所需要的时间。解:起始位1位,8位数据位,无校验位,一个停止位,则一个字符的编码为1+8+0+1=10位。波特率为4800,即4800位/秒,传输10位所需要的时间是10/4800≈0.002083秒,即2.083毫秒。UART通信的速度不是很高!
111、串行通信基础知识TTL电平标准的直接通信MCU引脚输入/输出只是(TransistorTransistorLogic)电平,不适合长距离通信。RS-232C(15m@9600bps)美国电子工业协会EIA(ElectronicIndustryAssociation)制订了串行物理接口标准。“1”=-3~-15V;“0”=+3~+15VRS422/RS-485标准(1.2km@9600bps)使用一对线传输:“1”:A=H,B=L;“0”:A=L,B=H差分型接收,不依赖公共地线
129芯串行接口排列RS-232C串行接口引脚功能引脚功能1接收线信号检测(载波检测DCD)6数据通信设备准备就绪(DSR)2接收数据线(RXD)7请求发送(RTS)3发送数据线(TXD)8允许发送(CTS)4数据终端准备就绪(DTR)9振铃指示5信号地(SG)
13TTL电平到RS-232电平转换电路MAX3232或MAX232MAX232引脚
142.UART模块功能串行通信接口的主要功能是:接收时,把外部的单线输入的数据变成一个字节的并行数据送入MCU内部;发送时,把需要发送的一个字节的并行数据转换为单线输出。接受引脚RxD发送引脚TxD发送移位寄存器接受移位寄存器UART数据寄存器MCU内部总线UART控制寄存器UART状态寄存器UART波特率寄存器串行通信接口的功能:接收——串/并转换发送——并/串转换
15K60的UART模块功能K60具有6个相同且独立的UART模块支持ISO7816(智能卡标准)支持LIN总线(CAN的下级总线)IrDA(红外接口)和硬件流量控制。1.外部引脚(未计入Modem引脚)TXDx——发送数据引脚;RXDx——接收数据引脚。x=0~5。2.波特率发生器UART0和UART1时钟源为内核时钟UART2~UART5的时钟源为外设时钟(总线时钟)。波特率由一个13位的模数计数器和一个5位的分数微调计数器共同决定。
16UARTRegisters常用组UARTx_BDH,_BDLUARTx_C1,_C2,_C3,_C4UARTx_S1UARTx_D,_ED高级应用FIFO7个DMA相关1个地址匹配UARTx_MA1,_MA2,_C4红外Infrared1个MODEM相关1个其它…不常用——非典型应用7816智能卡相关9个CEA709.1-B相关25个均为8位,x=0~5,对应6个完全独立、相同的UART端口
17K60的UART模块功能2.波特率发生器UART0和UART1时钟源为内核时钟UART2~UART5的时钟源为外设时钟(总线时钟)。波特率由一个13位的模数计数器和一个5位的分数微调计数器共同决定。UARTbaudrate=UARTmoduleclock/(16×(SBR[12:0]+BRFD))sbr控制UART波特率发生器的预分频数,波特率微调位控制分数微调计数器增加分数延迟到波特率时钟来允许波特率精修以匹配系统波特率sbr=(uint16_t)((sysclk*1000)/(baud*16))brfa=(((sysclk*32000)/(baud*16))-(sbr*32));接收器每个位接收时间为16个时钟周期
18
19
20UARTBaudRateRegistersUARTx_BDHUARTx_BDLUART波特率寄存组由UARTx_BDH[4:0]和UARTx_BDL[7:0]组成,先写UARTx_BDH[4:0],后写UARTx_BDL[7:0];当C2[RE]或者C2[TE]置位时,UART开始工作。UARTbaudrate=UARTmoduleclock/(16×(SBR[12:0]+BRFD))BRFD在UARTx_C4
21UARTControlRegister4(UARTx_C4)位描述4-0BRFABaudRateFineAdjust
22UARTControlRegister1(UARTx_C1)位描述4M9位或8位模式选择位。0:正常模式-起始位+8位数据位(由MSBF决定MSB/LSB优先)+停止位。1:9位模式-起始位+9位数据位+停止位。1PE奇偶校验使能位,当奇偶校验使能时,停止位前会被入一个奇偶校验位。0:奇偶校验功能禁止;1:奇偶校验功能使能。0PT校验类型。0:偶校验;1:奇校验。
23UARTControlRegister2(UARTx_C2)位描述7TIE发送器中断或DMA传送使能位。0:TDRE中断和DMA传送请求禁止。1:TDRE中断或者DMA传送使能。6TCIE传送结束中断使能位。0:TC中断请求禁止。1:TC中断请求使能。5RIE接收器满中断或DMA传送使能位。0:RDRF中断和DMA传送请求禁止。1:RDRF中断或DMA传送请求使能。3TE发送器使能位。0:禁止;1:使能。2RE接收器使能位。0:禁止;1:使能0SBK发送中止位。
24UARTControlRegister3(UARTx_C3)R8ReceivedBit8T8TransmitBit8ORIEOverrunErrorInterruptEnableFEIEFramingErrorInterruptEnablePEIEParityErrorInterruptEnable
25UARTStatusRegister1(UARTx_S1)位描述7TDRE发送数据寄存器空标志位。发送缓冲区中的数据个数<=TWFIFO[TXWATER],TDRE被置位。6TC发送完成标志位。发送完成,TC被置位。5RDRF接收数据寄存器满标志位。接收缓冲区中数据个数>=TWFIFO[TXWATER]时,RDRF被置位。4LDLE空闲线标志位。3OR接收器溢出标志位。0:没有溢出;1:溢出。2NF噪声标志位。1FE帧错误标志位。0PF奇偶校验错误标志位。
26UARTDataRegister(UARTx_D)UARTx_D由两个单独的寄存器组成:只读的接收数据寄存器和只写的发送数据寄存器,对它读时只读接收数据寄存器中的内容,写时只写入到发送数据寄存器。
27SystemClockGatingControlRegister4(SIM_SCGC4)位描述13UART3UART3ClockGateControl,ThisbitcontrolstheclockgatetotheUART3module.0:Clockdisabled;1:Clockenabled12UART20:Clockdisabled;1:Clockenabled11UART10:Clockdisabled;1:Clockenabled10UART00:Clockdisabled;1:Clockenabled
28SystemClockGatingControlRegister1(SIM_SCGC1)位描述11UART5UART5ClockGateControl,ThisbitcontrolstheclockgatetotheUART5module.0:Clockdisabled;1:Clockenabled10UART40:Clockdisabled;1:Clockenabled
29SystemClockGatingControlRegisterFieldModule13UART30:Clockdisabled;1:Clockenabled12UART20:Clockdisabled;1:Clockenabled11UART10:Clockdisabled;1:Clockenabled10UART00:Clockdisabled;1:ClockenabledInSIM_SCGC4InSIM_SCGC1FieldModule11UART50:Clockdisabled;1:Clockenabled10UART40:Clockdisabled;1:Clockenabled
30PinControlRegistern(PORTx_PCRn)alt3是UART功能
31UART5初始化K60SignalMultiplexingandPinAssignments//UARTisalt3functionforthispinPORTE_PCR8=0x03<<8;//PORT_PCR_MUX(0x3);PORTE_PCR9=0x03<<8;//PORT_PCR_MUX(0x3);
32UART5初始化K60SignalMultiplexingandPinAssignments实验用这个模块
33UART初始化流程图
34UART5初始化voidUART5_init(intbaud){registerunsignedintsbr,brfa;unsignedchartemp;//UARTisalt3functionforthispinPORTE_PCR8=0x03<<8;//开引脚串口功能PORTE_PCR9=0x03<<8;SIM_SCGC1|=1<<11;//开UART5时钟;//MakesurethatthetransmitterandreceiveraredisabledUART5_C2&=~(1<<3|1<<2);//ConfiguretheUARTfor8-bitmode,noparityUART5_C1=0;#defineperiph_clk48000000
35UART5初始化(接上页)//Determineifafractionaldividerisneededbrfa=(((periph_clk*32)/(baud*16))-(sbr*32))&0x1F;//SavetheUARTx_C4registerexceptfortheBRFAfieldtemp=UART5_C4&~(0x1F);UART5_C4=temp|brfa;//EnablereceiverandtransmitterUART5_C2|=(1<<3|1<<2);}sbr=(unsignedint)(periph_clk/(baud*16));//SavethecurrentvalueoftheUARTx_BDHexceptfortheSBRfieldtemp=UART5_BDH&~(0x1F);UART5_BDH=temp|((sbr&0x1F00)>>8);UART5_BDL=(unsignedchar)(sbr);
36实现UART收发的两种方式UART实现收发数据功能,有两种方式:(1)查询方式接受数据时,通过查询UART_S1的RDRF位来判断是否接收完毕;发送数据时,通过查询UART_S1的TDRE位来判断是否发送完毕;(2)中断方式
37UART5senddata(查询方式)voidUART5_putchar(charch){/*WaituntilspaceisavailableintheFIFO*/while(!(UART5_S1&UART_S1_TDRE_MASK));/*Sendthecharacter*/UART5_D=(unsignedchar)ch;}voidUART5_putstring(char*str){unsignedinti,len;len=strlen(str);for(i=0;i38UART5receivedatacharUART5_getchar(void){/*Waituntilcharacterhasbeenreceived*/while(!(UART5_S1&UART_S1_RDRF_MASK));/*Returnthe8-bitdatafromthereceiver*/returnUART5_D;}//接收
39例程1简单应用1、新建工程testUART00;基于MK60DN512VMD10,调试工具为OpenSourceJTAG。2、将mcg.c、mcg.h、uart5.c和uart5.h加入工程(拷贝文件)3、main函数中enableGPIOClockGate,初始化MCG、UART54、调用UART5_putstring函数,每隔一段时间从UART5输出“welcometoK60UART!
40”。
41#include"derivative.h"/*includeperipheraldeclarations*/#include"mcg.h"#include"uart5.h”voiddelay(void){unsignedinti,j;for(i=0;i<3000;i++)for(j=0;j<3000;j++);}intmain(void){SIM_SCGC5|=0x1f<<9;pll_init();UART5_init(19200);UART5_putstring("systeminitedok!
42");for(;;){UART5_putstring("welcometoK60UART!
43");delay();}return0;}
44若将接收到的数据从串口发出去…#include"derivative.h"/*includeperipheraldeclarations*/#include"mcg.h"#include"uart5.h”intmain(void){SIM_SCGC5|=0x1f<<9;pll_init();UART5_init(19200);UART5_putstring("systeminitedok!
45");for(;;){UART5_putchar(UART5_getchar());}return0;}