做cc2530 串口uart0发送字符串时候为什么串口助手中什么也没有
发布网友
发布时间:2022-03-24 10:33
我来回答
共1个回答
热心网友
时间:2022-03-24 12:02
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 秒
}
}