第七周串口控制器原理与编程.ppt
45页单片机原理与应用,上周教学内容回顾,大课 CC2530电源的管理 CC2530系统时钟的编程(难点) 小课 8路流水灯,会看原理图,会接线; GPIO口按键状态的获取,本周教学主要内容,串行通信基础知识 串口控制器的原理与编程,相关SFR在控制器运行过程中所器的作用 CC2530串口控制器编程步骤,教学目标,了解串行通信的基础知识; 掌握CC2530串口的编程步骤; 重点理解相关SFR在控制器运行过程中所器的作用计算机与外界的信息交换称为通信通信的基本方式可分为并行通信和串行通信两种 所谓并行通信是指数据的各位同时在多根数据线上发送或接收 串行通信是数据的各位在同一根数据线上依次逐位发送或接收一、 串行通信基础知识,了解,目前串行通信在单片机双机、多机以及单片机与PC机之间的通信等方面得到了广泛应用了解,,,,,,发 送 方,接 收 方,,8位数据同时传送,8位顺次传送,1.1 异步通信和同步通信,计算机通信按同步方式可分为异步通信和同步通信两种基本通信方式1. 同步通信(Synchronous Communication) 同步通信是一种连续传送数据的通信方式,一次通信传送多个字符数据,称为一帧信息。
数据传输速率较高,通常可达56000bps或更高其缺点是要求发送时钟和接收时钟保持严格同步了解,2. 异步通信(Asynchronous Communication) 在异步通信中,数据通常是以字符或字节为单位组成数据帧进行传送的收、发端各有一套彼此独立,互不同步的通信机构,由于收发数据的帧格式相同,因此可以相互识别接收到的数据信息了解,2. 异步通信(Asynchronous Communication) 异步通信信息帧格式如图4所示了解,(1) 起始位: 在没有数据传送时,通信线上处于逻辑“1”状态当发送端要发送1个字符数据时,首先发送1个逻辑“0”信号,这个低电平便是帧格式的起始位其作用是向接收端表示发送端开始发送一帧数据接收端检测到这个低电平后,就准备接收数据信号2) 数据位: 在起始位之后,发送端发出(或接收端接收)的是数据位,数据的位数没有严格的限制,5~8位均可由低位到高位逐位传送了解,(3) 奇偶校验位: 数据位发送完(接收完)之后,可发送一位用来检验数据在传送过程中是否出错的奇偶校验位奇偶校验是收发双方预先约定好的有限差错检验方式之一有时也可不用奇偶校验4) 停止位: 字符帧格式的最后部分是停止位,逻辑“1”电平有效,它可占1/2位、1位或2位。
停止位表示传送一帧信息的结束,也为发送下一帧信息作好准备了解,1.2 串行通信的波特率,波特率(Baud Rate)是串行通信中一个重要概念,它是指传输码元/信号的速率 比特率的定义是每秒传输二进制数的位数比特率 = 波特率·log2一个码元所携带的信息量,了解,1.3 串行通信的制式,1. 单工制式(Simplex),在串行通信中,数据是在两个站之间传送的按照数据传送方向,分为三种2. 半双工制式(Half duplex),3. 全双工制式(Full duplex),了解,1.4 PC机与单片机间的串行通信,串口:如RS-232C、RS-422、RS-423、RS-485等单片机内是TTL电平,2.4~5V:逻辑1,0~0.5V:逻辑0,只适用于通信距离很短的场合,远距离传输必然会使信号衰减和畸变PC机,其中RS-232C在异步串行通信中应用最广的总线标准,采用负逻辑标准:+3V~+15V表示逻辑0; -3V~-15V表示逻辑1,标准串行总线通信接口,单片机,单片机,单片机,,图5 微机9针D形串口连接器,1.4.1 RS-232C总线标准,RS-232C实际上是串行通信的总线标准,定义了25条信号线,使用25个引脚的连接器,目前在PC机中使用9针的串口。
标准数据传送速率有:50,75,110,150,300,600,1200,2400,4800,9600,19200bit/s工业控制的RS-232 一般只使用 RXD、TXD、GND 三条线1.4.2 RS-232C接口电路,由于RS-232C信号电平与TTL电平不一致,必须进行信号电平转换实现这种电平转换的电路称为RS-232C接口电路一般有两种形式:一种是采用运算放大器、晶体管、光电隔离器等器件组成的电路来实现;另一种是采用专门集成芯片(如MC1488、MC1489、MAX232等)来实现下面介绍由专门集成芯片MAX232构成的接口电路1. MAX232接口电路,MAX232芯片是MAXIM公司生产的具有两路接收器和驱动器的IC芯片,其内部有一个电源电压变换器,可以将输入+5V的电压变换成RS-232C输出电平所需的±12V电压所以采用这种芯片来实现接口电路特别方便,只需单一的+5V电源即可图6 用MAX232实现串行通信接口电路图,2. 串行通信时使用MAX232进行电平转换,图中C1、C2、C3、C4用于电源电压变换,提高抗干扰能力,一般取1.0μF/16VC5的作用是对+5V电源的噪声干扰进行滤波,一般取0.1μF。
发送与接收的对应关系不能接错,否则将不能正常工作二、CC2530 串口控制器,CC2530的串口控制器 USART:universal synchronous/asynchronous receiver and transmitter 通用同步异步收发器 USART0和USART1是串行通信接口,两个USART具有同样的功能,可以分别运行于在两种模式下:,异步UART模式 同步SPI模式 由于异步UART允许发送和接收的时钟不一致,容易实现,我们在讨论串口时经常采用异步UART2.1 串口模式,异步UART模式: UART模式提供异步串行接口,在UART模式中,有2种接口选择方式:2线接口和4线接口2线接口:RXD(接收)、TXD(发送) 4线接口:RXD、TXD、RTS和CTS(硬件流控制),4线接口复杂点,教学上讲解2线接口,,,,,,,,单片机,GND,GND,单片机,TXD,TXD,RXD,RXD,,,,RTS,CTS,CTS,RTS,,,2.1 串口模式,UART模式提供全双工传送,接收器中的位同步不影响发送功能传送一个UART字节包含1个起始位,8个数据位,1个作为可选的第9位数据或者奇偶校验位,再加上1个或者2个停止位,1.控制和状态寄存器UxCSR(见手册P140),2.2 串口控制器的特殊功能寄存器SFR,串口操作由控制和状态寄存器UxCSR以及控制寄存器UxUCR,U0CSR |= 0x80;//设置UART模式 U0CSR |= 0x40;//允许接收,2.控制寄存器UxUCR,2.2 串口控制器的特殊功能寄存器SFR,当收发数据缓冲器UxDBUF写入数据时,该字节发送到输出引脚TXD。
UxDBUF寄存器是双缓冲的 unsigned char temp;//定义一个字符型变量 temp = U0DBUF;//读出U0DBUF中的数据,3.收发数据缓冲器UxDBUF,2.2 串口控制器的特殊功能寄存器SFR,4. UxGCR通用控制寄存器,,2.2 串口控制器的特殊功能寄存器SFR,5.波特率控制寄存器UxBAUD,,2.2 串口控制器的特殊功能寄存器SFR,2.3 波特率产生,当运行UART模式时,内部的波特率发生器设置UART波特率当运行在SPI模式时,内部的波特率发生器设置SPI主时钟频率 波特率由寄存器UxBAUD.BAUD[7:0]和UxGCR.BAUD_E[4:0]定义,该波特率用于UART传送,也用于SPI传送的串行时钟速率F是系统时钟频率,等于16MHzRCOSC或者32MHzXOSC,标准波特率所需的寄存器值,,该表适用于典型的32MHz系统时钟,//设置波特率为57600 U0GCR |= 10; U0BAUD |= 216;,2.4系统时钟设置,,波特率发生器的时钟是从所选的主系统时钟源获得的,主系统时钟源可以是32MHz XOSC或16MHz RCOSC。
通过CLKCONCMD.OSC位可选择主系统时钟源,CLKCONCMD ,1. UART总线资源,数据手册P72 表7-1 外设I/O引脚映射,串口0同步模式:,串口0异步模式:,串口1同步模式:,串口1异步模式:,,,2.5 UART资源,2.相关特殊功能寄存器 (1)PERCFG:设置各设备IO口位置在P0还是P1;,在P0口,在P1口,(2)P2DIR: 当PERCFG所设定的设备IO位置冲突时,由该sfr决定位置到底归属于单个控制器3)PxSEL:置管脚功能为设备模式 (4)UxCSR[7]:设置uart还是spi模式; 以上4个sfr的正确设置可以完成我们的uart的总线初始化;,2.6中断标志位,1.UART发送 当USART 收/发数据缓冲器、寄存器UxDBUF 写入数据时,该字节发送到输出引脚TX当USART 发送缓冲寄存器为空时,准备接收新的发送数据时,就会由硬件置对应的中断标志位UTXxIF为1如果我们要通过串口0发送字符’h’,则该如下操作: void uart0_send_byte(char tmp) { //发送字符tmp while(UTX0IF==0); UTX0IF=0;//可以省掉吗? U0DBUF=tmp; },UART接收 当接收缓冲区UXDBUF接收到一个新的字符时,会由硬件把中断标志位URXxIF置1。
如果我们希望从串口0获取一个字符,代码如下: char uart0_receive_byte() { //从串口接收一个字符 while(URX0IF==0); URX0IF=0; //不可以省掉 return U0DBUF; },2.6中断标志位,1、总线初始化: PERCFG P2DIR PxSEL UxCSR 2、数据链路格式化(数据位、停止位、校验位、波特率) UxUCR UxGCR UxBAUD 注意:设置波特率时,一定要清楚当前的时钟速度 3、读写串口收发寄存器 UxDBUF UTXxIF URXxIF,三、CC2530串口控制器编程步骤,3.1 UART发送过程,1.当字节传送开始时,UxCSR.ACTIVE位变为高电平,而当字节传送结束时为低电平 2.当传送接收结束时,UxCSR.TX_BYTE位设置为1 3.当USART收/发数据缓冲寄存器就绪,准备接收新的发送数据时,就产生了一个中断请求该中断在传送开始之后立刻发生,因此,当字节正在发送时,新的字节能够装入数据缓存器1.当1写入UxCSR.RE位时,数据接收开始 2.UART在输入引脚RXDx中寻找有效起始位,并且设置UxCSR.ACTIVE位为1。
3.当检测出有效起始位时,收到的字节就传入到接收寄存器,UxCSR.RX_BYTE位设置为1该操作完成时,产生接收中断同时UxCSR.ACTIVE变为低电平通过寄存器UxBUF提供收到的数据字节 5.当UxBUF读出时,UxCSR_BYTE位由硬件清零3.2 UART接收过程,3.3 UART硬件流控制,当UxUCR.FLOW位设置为1,硬件流控制使能;硬件流控制适用于“4线接口” 发送数据时仅在RTS线为低电平时可以发送,当可以接收数据时把CTS线置为低电平了解,3.4 UART特征格式,如果寄存器UxUCR中的BIT9和奇偶校验位设置为1,那么奇偶校验产生且使能奇偶校验计算出来,作为第9位来传送 在接收期间,奇偶校验位计算出来而且与收到的第9位进行比较如果奇偶校验位出错,则UxCSR.ERR位设置为1当读取UxCSR时,UxCSR.ERR位清除void initUARTtest(void) { InitClock();//初始化时钟 PERCFG = 0x00;//使用串口备用位置1 P0口 P0SEL = 0。





