《物联网系统设计与应用开发》课件3-4 任务4 串口通信_第1页
《物联网系统设计与应用开发》课件3-4 任务4 串口通信_第2页
《物联网系统设计与应用开发》课件3-4 任务4 串口通信_第3页
《物联网系统设计与应用开发》课件3-4 任务4 串口通信_第4页
《物联网系统设计与应用开发》课件3-4 任务4 串口通信_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

并行通信和串行通信01CC2530串口通信03目录任务:串口通信04异步通信和同步通信02并行通信和串行通信通信方式串行通信并行通信

微控制器与外设之间的数据通信方式,根据连线结构和传送方式的不同,可以分为两种:并行通信和串行通信。并行通信和串行通信ReceiverReceiverTransmitter并行通信串行通信并行接口是8车道大型高速公路,而串行接口更像是一条单车道乡村小路。

并行通信:数据的各位(比特)同时由多根数据线传送,传输数据速度快。

串行通信:在单根数据线上将数据一位(比特)一位(比特)地依次传送。例如:要传输一个字节8bits的数据,并行通信用8根线,在1s中之内传完。串行通信用一根线,在8s之内传完。串行和并行通信之间的区别串行通信并行通信逐位发送数据,一次发送一位一次传输1个字节,8位同时发送需要1根数据线需要8根数据线通信速度慢通信速度快安装成本低安装成本高干扰低,优选用于长途通信抗干扰能力差,用于短距离通信示例:计算机到计算机计算机到多功能打印机并行通信应用场合:例如主机和打印机、复印机的通信,加快数据传输速度。并行通信和串行通信单片机、嵌入式系统等微处理器成本较低,支持较少量的输入/输出引脚,并且长距离传输数据,一般选择串行通信。串行通信有两种基本形式:同步和异步通信(1)同步通信①收发双方在时钟信号的控制下同步进行。②数据传送是以数据块(一组字符,字符串)为单位,字符与字符之间、字符内部的位与位之间都同步。③在一个数据块内,字符与字符间无间隔。应用场合:电路实现相对复杂,通信网中,有大批量数据需要传输。同步通信和异步通信异步通信:是指数据传送以字符为单位,字符与字符间的传送是完全异步的(无时钟信号)。①以字符为单位传送信息,一次发送一个字符。②相邻两字符间的间隔是任意长。③异步传输的时候要加上起始位和结束位,否则接收方就不知道什么时候开始接收数据什么时候结束。应用场合:因为每个字符都需补加专门的同步信息,传输字符的辅助开销多。异步方式适用于短距离、速率不高的情况。实现简单,但传输速率较低。

同步通信和异步通信单片机主要使用异步通信模式串口什么是串口?串口是串行通信接口的简称,COM(clustercommunicationport)接口。是微控制器与其它设备传送信息的一种标准接接口。电脑上RS232接口,DB9的物理接口,就是一种常见的串口。DB9每种接头都有公头和母头之分,其中带针状的接头是公头,而带孔状的接头是母头DB9这种接口基本已被淘汰,慢慢用USB转UART取代了RS232接口。USB转TTL串口的小板,可以用USB扩展出一个串口。通过转串口芯片模仿串口输出,芯片为PL2303,需要安装驱动。串口PL2303CC2530串口通信CC2530有两个串口USART0和USART1;两个USART

具有同样的功能,可分别运行于异步模式(UART)和同步模式(SPI)。串口USART异步模式UART同步模式SPI使用同一时钟使用各自的时钟(UniversalSynchronous/AsynchronousReceiver/TransmitterUniversalAsynchronousReceiver/Transmitter(SerialPeripheralInterface)CC2530串口通信UART连接方式发送方接收方(2)UxGCR:USARTx通用控制寄存器(设置波特率用)(3)UxBAUD:USARTx波特率控制寄存器(设置波特率用)(2)CLKCONCMD:时钟控制寄存器,设置系统时钟频率32MHz还是16MHz(设置波特率用)CC2530串口相关寄存器(1)PERCFG外设寄存器:选择外设的I/O位置(4)UxCSR:USARTx控制和状态寄存器

主要用于设置是是UART工作模式还是SPI工作模式(5)UxDBUF:USARTx接收/发送数据缓冲寄存器

用于存放发送和接收的数据(6)中断标志:UTXxIF、URXxIF对于CC2530的串口通信,有如下几个寄存器(x是USART的编号,为0或者1USART、定时器和ADC这样的外设同样也需要I/O口实现其功能,对于USART、定时器具有两个可以选择的位置对应它们的I/O引脚,如表所示。通过PERCFG寄存器可以设置两个USART接口对应外部I/O引脚的映射关系:

位置1:RX0

---P0_2

TX0

---P0_3

RX1

---P0_5

TX1

---P0_4

位置2:RX0

---P1_4

TX0

---P1_5

RX1

---P1_7

TX1

---P1_6CC2530串口外设映射外设/功能P0P17654321076543210USART0UART

RTCTTXRX

Alt.2

RXTXRTCT

USART1UART

RXTXRTCT

Alt.2

RXTXRTCT

位置1位置2位置1位置2PERCFG外设控制寄存器:串口相关寄存器用以设置外设的I/O位置。0为备用位置11为备用位置2例如:使用备用位置1PERCFG=0x00;//外设控制寄存器USART0的IO位置:0为P0口位置1P0SEL|=0x0c;//P0_2,P0_3用作串口(外设功能)流控制说明数据在两个串口之间传输时,常常会出现丢失数据的现象,如接收端数据缓冲区已满,则此时继续发送来的数据就会丢失。流控制能解决这个问题,当接收端数据处理不过来时,就会发出“不在接收”的信号,发送到就停止发送,直到收到“可以继续发送”的信号在发送数据。注意:如果只有两根线传送数据的时候要关闭流控制。CC2530串口通信波特率

:指单位时间内传送二进制数据的位数,以位/秒为单位,它是衡量串口传送速度快慢的重要参数。

例如:假如数据传送速率是120位/秒,则传送的波特率为:120

注意:异步通信的传送速度一般在50波特--19200波特之间。时钟设置CC2530时钟设置:用命令寄存器(CLKCONCMD)来改变系统时钟源,用状态寄存器(CLKCONSTA)来判断改变后的寄存器是否稳定了。

CLKCONCMD&=~0x40;//设置系统时钟源为32MHZ晶振

while(CLKCONSTA&0x40);//等待晶振稳定为32MCLKCONCMD&=~0x47;//设置系统主时钟频率为32MHZ波特率的计算

CC2530的波特率由BAUD_M和BAUD_E共同决定:

公式中的F为微控制器的系统时钟频率:16MHz或32MHz。

波特率设置设置波特率为115200时的参数值:U0BAUD=216;U0GCR=11;不同系统时钟下各常用波特率的参数值(5)UxDBUF:USARTx接收/发送数据缓冲寄存器

用于存放发送和接收的数据串口相关寄存器注意:数据发送是以字符(即1个字节)为单位发送

当USART的发送/接收数据缓冲寄存器UxDBUF被写入数据时,该字节就会发送到TXD引脚,开始数据的传输。由于UxDBUF是双缓冲的,所以在发送开始后会立即触发TX完成中断标志UTX0IF,并且数据缓冲器被卸载,也就是说,当字节正在发送时,新的字节能够装入数据缓冲器UxDBUF。

在单字节的发送函数中,把要发送的数据写入UxDBUF后,查询TX完成标志UTX0IF,当该标志被置1时,表示数据发送完成,然后清除该标志。(6)中断标志:UTXxIF、URXxIF串口初始化CC2530串口初始化的一般步骤:(1)时钟初始化;(2)选择外设引脚备用位置PERCFG=0x00(3)将相应IO口配置为外设功能。此处配置P0_2和P0_3用作串口UART0。

P0SEL=0x3C(4)选择USART模式:UART或SPI。U0CSR=0x80(5)设置波特率

(信号传输的速率)

串口初始化代码如下:PERCFG=0x00//位置1P0口P0SEL|=0x0c;//P0_2,P0_3用作串口(外部设备功能)U0CSR|=0x80;//设置为UART方式

U0GCR|=11;U0BAUD|=216;//波特率设为115200UTX0IF=0;//UART0TX中断标志初始置位0任务:串口通信在无线传感网络中,CC2530需要将采集到的数据发送给上位机处理,同时上位机需要向CC2530发送控制信息,这一切都离不开两者之间的信息传递。本任务就是实现CC2530与上位机的通信,串口通信程序流程图如图所示。

。程序设计流程图

主函数主要实现了以下功能。(1)初始化时钟和串口。(2)使用while(1)不断地去试图获取接收的每一个字符。当此字符不为“#”时,则表示还未输入完成,继续将此字符添加到字符数组RxData中;当此字符正好为“#”时,则表示输入完成。(3)跳出循环将RxData中的每一个字符按次序发送到PC端,同时重置count。程序分析程序分析voidmain(void){ CLKCONCMD&=~0x40;//设置系统时钟源为32MHZ晶振while(CLKCONSTA&0x40);//等待晶振稳定为32MCLKCONCMD&=~0x47;//设置系统主时钟频率为32MHZInitUart();//调用串口初始化函数

UartState=UART0_RX;//串口0默认处于接收模式memset(RxData,0,SIZE);while(1){if(UartState==UART0_RX)//接收状态

{if(RxBuf!=0){if(count<50)//以'#'为结束符,一次最多接收50个字符

RxData[count++]=RxBuf;else{if(count>=50)//判断数据合法性,防止溢出{count=0;//计数清0memset(RxData,0,SIZE);//清空接收缓冲区}elseUartState=UART0_TX;//进入发送状态

}RxBuf=0;}}if(UartState==UART0_TX)//发送状态

{U0CSR&=~0x40;//禁止接收

UartSendString(RxData,count);//发送已记录的字符串。U0CSR|=0x40;//允许接收

UartState=UART0_RX;//恢复到接收状态

count=0;//计数清0memset(RxData,0,SIZE);//清空接收缓冲区}}}串口初始化的实现代码如下:程序分析/*串口初始化函数*/voidInitUart(void){PERCFG=0x00;//外设控制寄存器USART0的IO位置:0为P0口位置1P0SEL=0x0c;//P0_2,P0_3用作串口(外设功能)

P2DIR&=~0xC0;//P0优先作为UART0

U0CSR|=0x80;//设置为UART方式

U0GCR|=11; U0BAUD|=216;//波特率设为115200UTX0IF=0;//UART0TX中断标志初始置位0U0CSR|=0x40;//允许接收

IEN0|=0x84;//开总中断允许接收中断}串口发送字节、发送字符串和接收字节函数代码如下:程序分析/*串口发送函数*/voidUartSendString(char*Data,intlen){uinti;

for(i=0;i<len;i++){U0DBUF=*Data++;while(UTX0IF==0);UTX0IF=0;}}/*串口中断处理函数:当串口0产生接收中断,将收到的数据保存在RxBuf中*/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论