串口通信,发送字符串
模块通过串口向安卓发送数据
1、往CC2530模块里面下载程序 打开 iar810,再用 iar810 去打开工程,在“2014-5-1-NJZBcc2530\2.基础实验源码\9.串口通讯-发送字符串”文件夹内,打开之后,rebuild all,然后再 debug(如果不会,请看基础实验的第一个实验),然后按仿真器的复位按钮。程序就运行起来了。
2、安装APK到安卓设备(需要安卓 3.1以上)
安卓 APK 在“2014-8-1-NJZBcc2530\2.基础实验源码\9.串口通讯-发送字符串”目录下,请大家自己把这个 apk:“WchUsbDriver.apk”安装到你的安卓设备。
3、安卓显示cc2530通过串口送来的数据:
如下顺序连接硬件:
安卓—OTG 数据线————套件中的 usb 数据线—模块 把安卓和模块连接:
如上连接后,在你的安卓打开你刚安装的 apk 程序,波特率选择115200,然后点击 config 按钮,
就会在数据接受区,看到模块送来的“Hello Zigbee”字符了。
4、实验分析
本实验相关电路:
P0_2、 P0_3 配置为外设功能时: P0_2为 RX, P0_3为 TX. USART0 和 USART1 是串行通信接口,它们能够分别运行于异步 UART 模式或者同步 SPI 模式。两个 USART 具有同样的功能,可以设置在单独的 I/O 引脚。
实验相关寄存器
相关寄存器 UxCSR、UxCSR、UxGCR、UxBUF、UxBAUD、CLKCONCMD、CLKCONSTA 如下表
所示: (见附件)
CC2530配置串口的一般步骤:
1、 配置 IO,使用外部设备功能。此处配置 P0_2 和 P0_3 用作串口 UART0
2、 配置相应串口的控制和状态寄存器。
3、 配置串口工作的波特率。
寄存器具体配置如下:
PERCFG = 0x00; //位置 1 P0 口
P0SEL = 0x0c; //P0_2,P0_3用作串口(外部设备功能)
P2DIR &= ~0XC0; //P0优先作为UART0
U0CSR |= 0x80; //设置为UART方式
U0GCR |= 11;
U0BAUD |= 216; //波特率设为115200 根据上面表中获得的数据
UTX0IF = 0; //UART0 TX 中断标志初始置位 0
源码分析,大家可以在 IAR 中看下注释。
九、串口通信----发送字符
1、打开 iar810,再用 iar810去打开工程,在“2014-5-1-NJZBcc2530\2.基础实验源码\9.串口通讯-发送字符串”
文件夹内,打开之后,debug,然后按仿真器的复位按钮。程序就运行起来了。
2、用usb 数据线直接把模块链接到电脑
如上图操作后,就会在电脑里面生成一个 com口,可以在设备管理器中看的到: +
然后打开串口助手(在“cc2530模块资料(天线杆版本--2013-9-25)\8.软件工具\串口调试助手 V2.2”):
本实验相关电路:
P0_2、P0_3配置为外设功能时:P0_2为RX, P0_3为TX. USART0和USART1是串行通信接口,它们能够分
别运行于异步 UART模式或者同步SPI 模式。两个 USART具有同样的功能,可以设置在单独的 I/O 引脚。
- /****************************************************************************
- * 文 件 名: main.c
- * 作 者: Andy
- * 修 订: 2013-01-08
- * 版 本: 1.0
- * 描 述: 设置串口调试助手波特率:115200bps 8N1
- * 会收到CC2530发过来的:Hello Zigbee
- ****************************************************************************/
- #include <ioCC2530.h>
- #include <string.h>
- typedef unsigned char uchar;
- typedef unsigned int uint;
- #define TX_SIZE 20
- #define TX_STRING "Hello Zigbee "
- char TxData[TX_SIZE]; //存储发送字符串
- /****************************************************************************
- * 名 称: DelayMS()
- * 功 能: 以毫秒为单位延时 16M时约为535,32M时要调整,系统时钟不修改默认为16M
- * 入口参数: msec 延时参数,值越大延时越久
- * 出口参数: 无
- ****************************************************************************/
- void DelayMS(uint msec)
- {
- uint i,j;
-
- for (i=0; i<msec; i++)
- for (j=0; j<1070; j++);
- }
- /****************************************************************************
- * 名 称: InitUart()
- * 功 能: 串口初始化函数
- * 入口参数: 无
- * 出口参数: 无
- ****************************************************************************/
- void InitUart(void)
- {
- PERCFG = 0x00; //外设控制寄存器 USART 0的IO位置:0为P0口位置1
- P0SEL = 0x0c; //P0_2,P0_3用作串口(外设功能)
- P2DIR &= ~0XC0; //P0优先作为UART0
-
- U0CSR |= 0x80; //设置为UART方式
- U0GCR |= 11;
- U0BAUD |= 216; //波特率设为115200
- UTX0IF = 0; //UART0 TX中断标志初始置位0
- }
- /****************************************************************************
- * 名 称: UartSendString()
- * 功 能: 串口发送函数
- * 入口参数: Data:发送缓冲区 len:发送长度
- * 出口参数: 无
- ****************************************************************************/
- void UartSendString(char *Data, int len)
- {
- uint i;
-
- for(i=0; i<len; i++)
- {
- U0DBUF = *Data++;
- while(UTX0IF == 0);
- UTX0IF = 0;
- }
- }
- /****************************************************************************
- * 程序入口函数
- ****************************************************************************/
- void main(void)
- {
- CLKCONCMD &= ~0x40; //设置系统时钟源为32MHZ晶振
- while(CLKCONSTA & 0x40); //等待晶振稳定为32M
- CLKCONCMD &= ~0x47; //设置系统主时钟频率为32MHZ
-
- InitUart(); //调置串口相关寄存器
- memset(TxData, 0, TX_SIZE); //数据清0
- memcpy(TxData, TX_STRING, sizeof(TX_STRING)); //复制发送字符串到TxData
-
- while(1)
- {
- UartSendString(TxData, sizeof(TX_STRING)); //串口发送数据
- DelayMS(1000); //延时
- }
- }
复制代码
全部资料51hei下载地址:
9.串口通讯-发送字符串.rar
(3.21 MB, 下载次数: 49)
|