usb检测串口是哪个角_无线传感器网络实验(三)Urat串口通信实验

这篇博客介绍了无线传感器网络实验中的Urat串口通信,重点讲解了CC2530串口的应用、配置及数据收发。实验通过UART0与上位机进行全双工通信,详细阐述了UART的工作模式、配置寄存器以及发送和接收过程。最后,提供了实验步骤、源码和结果分析。
摘要由CSDN通过智能技术生成

ad7cc8d4b03893a3ce4598c6a62eb021.png

实验三: Urat串口通信实验

3.1 实验目的

1. 认识并了解 CC2530 串口应用;

2. 学习并掌握 CC2530 串口基本配置;

3. 学习并掌握 CC2530 串口程序编写。

3.2实验原理

在 WSN(无线传感器网络)中,CC2530 需要将采集到的数据发送给上位机 PC 进行处理,同时上位机需要向 CC2530 发送控制信息,这一切都离不开两者之间的数据通信传输接口——通用异步串行口,简称: “Uart 串口”。本实验通过正确配置 CC2530 的 Uart 从而实现与上,下位机之间的数据通信。所以,要 正确地使用串口,就应该了解串口的工作模式以及如何实现 Uart 的数据收发。

Uart 模式

CC2530 有两个串行通信接口 UART0 和 UART1。两个串口既可以工作于 UART(异步通信)模式,也可以工作于 SPI(同步通信)模式,模式的选择有串口控制/状态寄存器的 UxCSR.MODE 决定。本实验采用 UART0 的标准 UART 模式。

UART 模式提供全双工传送。传送一个 UART 字节包含 1 个起始位、8 个数据位、1 个可选的第 9 位数据位或奇偶校验位再加上 1 个(或 2 个)停止位。

注意:串口数据帧格式为 11 位,即:起始位(1 位),数据位(8 位),校验位(1 位可选),停止位(1 位)。而在应用中,真正所关心的是数据位。

UART 操作由 UART0 控制与状态寄存器 U0CSR 控制。当 U0CSR.MODE 设置为 1 时,即选择了 UART 模式。

UART 发送

当寄存器 U0DBUF 写入数据后,该数据被发送到输出引脚 TXD0。当传输开始时,U0CSR.ACTIVE 位变 高,而当传输结束后 U0CSR.ACTIVE 位变低。传输结束时,TX_BYTE 位和 RX_BYTE 位置为 1,当收到新的 数据,并在 USART 收/发数据寄存器 U0BUF 中就绪时,就产生一个中断。该中断在传输开始之后立刻发生, 因此,当字节正在发送时,新的字节能够装入数据缓冲器。也就是说,数据通过 Uart 发送的同时,U0DBUF 中的数据也能同步更新。

UART 接收

当 1 写入 U0CSR.RE 位时,开始在 UART 上接收数据。USART 会在输入引脚 RXD0 中寻找有效起始位,并且设置 U0CSR.ACTIVE 位为 1.。当检测到有效起始位时,收到的数据就传入接收寄存器,U0CSR.RX_BYTE 位设置为 1。该操作完成时,产生接收中断。寄存器 U0BUF 读取接收到的数据字节。当 U0BUF 读出时, U0CSR.RX_BYTE 位由硬件清零。

3.2.1 电路分析与程序配置

4a53123f145ebd5ad1606f32dd7040e5.png

d9b42dc6a139401e98d9ae0c683ca157.png

由原理图与 CC2530 的引脚复用图可知,本节实验所使用的串口为 Uart0,对应的 I/O 引脚 P0_2 与 P0_3,分别复用成了 RXD0 与 TXD0,故先将其 IO 口配置为 Uart0 再对 Uart 本身的各项参数进行配置,如 波特率与校验位等。

本次实验所学习到的寄存器介绍如下:

CLKCONCMD:时钟命令控制寄存器。

50e803afcf39ac674bd3e9d6e6f625c1.png

D7 位:32KHz 时钟振荡器选择,0 为 32KRC 震荡,1 为 32K 晶振。默认为 1。

D6 位:系统时钟选择。0 为 32M 晶振,1 为 16M RC 震荡。当 D7 位为 0 时 D6 必须为 1。

D5~D3:定时器输出标记位。000 为 32MHZ,001 为 16MHZ,010 为 8MHZ,011 为 4MHZ,100 为 2MHZ, 101 为 1MHZ,110 为 500KHZ,111 为 250KHZ。默认为 001。需要注意的是:当 D6 为 1 时,定时器频率 高为 16MHZ。

D2~D0:系统主时钟选择:000 为 32MHZ,001 为 16MHZ,010 为 8MHZ,011 为 4MHZ,100 为 2MHZ,101 为 1MHZ,110 为 500KHZ,111 为 250KHZ。当 D6 为 1 时,系统主时钟高频率为 16MHZ。

CLKCONSTA:时间频率状态寄存器。

61528b43541dcca92644f44e586caeed.png

D7 位:当前 32KHZ 时间振荡器频率。0 为 32KRC 震荡,1 为 32K 晶振。

D6 位:当前系统时钟选择。0 为 32M 晶振,1 为 16M RC 震荡。

D5~D3:当前定时器输出标记。000 为 32MHZ,001 为 16MHZ,010 为 8MHZ,011 为 4MHZ,100 为 2MHZ, 101 为 1MHZ,110 为 500KHZ,111 为 250KHZ。

D2~D0:当前系统主时钟。000 为 32MHZ,001 为 16MHZ,010 为 8MHZ,011 为 4MHZ,100 为 2MHZ,101 为 1MHZ,110 为 500KHZ,111 为 250KHZ。

U0CSR:USART0 控制与状态寄存器:

7555ff854ca9433fd90ac60eca9120a8.png

D7:工作模式选择,0 为 SPI 模式,1 为 USART 模式。

D6:UART 接收器使能,0 为禁用接收器,1 为接收器使能。

D5:SPI 主/从模式选择,0 为 SPI 主模式,1 为 SPI 从模式。

D4:帧错误检测状态,0 为无错误,1 为出现出错。

D3:奇偶错误检测,0 为无错误出现,1 为出现奇偶校验错误。

D2:字节接收状态,0 为没有收到字节,1 为准备好接收字节。

D1:为字节传送状态,0 为字节没有被传送,1 为写到数据缓冲区的字节已经被发送。

D0:为 USART 接收/传送主动状态,0 为 USART 空闲,1 为 USART 忙碌。

U0GCR:USART0 通用控制寄存器。

dbefadc92b424f3ea0b73fcf318e347d.png

D7:SPI 时钟极性:0 为负时钟极性,1 为正时钟极性;

D6:SPI 时钟相位:

D5:传送为顺序:0 为低有效位先传送,1 为高有效位先传送。

D4~D0:波特率设置:

5d748d34f73171290027770a6a570b24.png

U0BAUD:波特率控制小数部分。(取值参考上表)

3.3 实验步骤

1. 连接 ZB-LINK 调试器与 ZigBee 模块。即:用 RJ11 连接线将 ZB-LINK 的 RS-485 一端连接 ZigBee 模块 RJ11 对应口,用 USB3.0 数据线连接 ZB-LINK 的 Debug 端口与 ZigBee 模块 Debug 对应口。

2. 使用 USB2.0 方口线连接 ZB-LINK 调试器的 USB-Debug 端与 PC 机的 USB 口。

3. 使用 USB2.0 方口线连接 ZB-LINK 调试器的 USB-485 端与 PC 机的 USB 口。

0a23318af65e6a86cb06492874c9acc3.png

4. 在PC机上打开串口终端软件,设置好波特率为19200。打开:【配套光盘04-实验例程02-ZigBee 技术与应用第三章 CC2530基础功能实验3.3 Uart串口通信实验实验代码】中的:“uart.eww”, 选择 Project→Rebuild All 重新编译工程。

5. 接下来选择 Project→Download and debug 将程序下载到 ZigBee 模块。

6. 下载完后按下 ZB-LINK 调试器上的复位按钮让刚才下载的程序重新运行。

77cce3c1cf021a071c71eb1abd428d8d.png

7. 程序运行后,在 PC 机上的串口调试助手中会看到串口输出“Please Input string ! ”。在 PC 端通过键盘发送数据到 CC2530,然后观察 CC2530 回送给 PC 机的数据,并同时观察 ZigBee 模 块上的 LED 指示灯 User1 的闪烁情况。

3.4实验源码

//19200Bps

/*
  1.USB3.0线必须插上(烧写调试必备);
  2.485线必须插上(Usart0通信);
  3.ZB-LINK输出Usart0数据时是从USB-485出来的;
  4.ZB-LINK上的RST键才有效。
*/

#include <ioCC2530.h>    //引入CC2530所对应的头文件(包含各SFR的定义)
#include <string.h>
#include "sys_init.h"
#include "uart.h"

char recvBuf[256]; //开辟256Byte容量的接收缓冲区
int  recvCnt = 0;  //接收数据量统计

void uart_test(void);

uchar Recv_Dat=0;

/*主函数-------------------------------------------------------*/
void main(void)
{	 
  xtal_init();
  led_init();        
  uart0_init(0x00, 0x00); //初始化串口:无奇偶校验,停止位为低电平
  Uart_Send_String("Please Input string ! rn"); //复位后发出
 
  while(1)
  {
   Recv_Dat = Uart_Recv_char();                    //接收数据
 
   D3=0;                                           //LED指示
   halWait(250);
   D3=1;
 
   Uart_Send_char(Recv_Dat);                       //数据回发
 
   Uart_Send_char(0x0D);                           //回车换行                         
   Uart_Send_char(0x0A);
  }
}

3.5 实验结果与分析

f9a4dbd380ba308b2f6c54c8092146c3.png

系统复位后,首先显示一行提示字符串:“Please Input string !”提示输入数据,当上位机 PC 发送一个数据时,CC2530 就向上位机回传一个数据。

与此同时,ZigBee 模块上的 User1 在每收到一个由 PC 端上位机发送过来的数据时就闪烁一次,表示 CC2530 已通过 Uart 串行口收到了数据,从而终完成 了本节的 Uart 串口

3f4bcaff6e5a21b4dec6dcf29a4d90e2.png

997eb409dc1747e555f53f2bd6b1dac6.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值