现在的位置: 首页 > 综合 > 正文

CC2530通过串口向PC发送字符串

2017年03月26日 ⁄ 综合 ⁄ 共 2471字 ⁄ 字号 评论关闭

CC2430包括2个串行通信接口 USART0 与 USART1,每个串口包括两个模式:UART(异步)模式、SPI(同步)模式,本节仅涉及UART模式)。两个USART具有同样的功能,可以设置在单独的I/O
引脚.


P0_2、P0_3配置为外设功能时:P0_2为RX, P0_3为TX.USART0和USART1是串行通信接口,它们能够分别运行于异步UART模式或者同步SPI 模式。两个USART具有同样的功能,可以设置在单独的I/O 引脚。

相关寄存器为UxCSR、UxCSR、UxGCR、UxBUF、UxBAUD、CLKCONCMD、CLKCONSTA,具体的参数参看datesheet。


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


/**************************************************************************** 
* 描 述: 设置串口调试助手波特率: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() 
* 功 能: 以毫秒为单位延时 
* 入口参数: 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);  //延时 1 秒


抱歉!评论已关闭.