基于Zigbee的CC2530UART0与UART1的通信
一。UART0与UART1之间的区别:
UART0可能是对我们来说是最常用的一个串口通信,一般串口0我们都是用来打印信息在电脑串口上可以查看的信息,那UART1呢,他的用处在哪里?
最近小严入手了一块WiFi的模块,习惯性使用串口0来使用,但是,不知怎么会回事,就是跟Wifi模块通信不行,很纳闷,查了许多的知道,最后才明白,UART1主要的用处就是跟一些外设的通信模块来使用(比如:WiFi和蓝牙等等)
为了大家能方便一些:
俺将两个串口方式的代码附上,给各位大佬方便使用:
//一些变量定义为全局变量
#define MAXCHAR 81
uint lenU0 = 0;
uchar tempRXU0;
uchar RecdataU0[MAXCHAR];
uint lenU1 = 0;
uchar tempRXU1;
uchar RecdataU1[MAXCHAR];
//串口0初始化:
void initUART0(void)
{
CLKCONCMD &= ~0x40; //设置系统时钟源为32MHZ晶振
while(CLKCONSTA & 0x40); //等待晶振稳定
CLKCONCMD &= ~0x47; //设置系统主时钟频率为32MHZ
PERCFG = 0x00; //位置1 P0.2 P0.3口
P0SEL = 0x0c; //P0.2 P0.3用作串口
P2DIR &= ~0XC0; //P0优先作为UART0
U0CSR |= 0x80; //串口设置为UART方式
U0GCR |= 11;
U0BAUD |= 216; //波特率设为115200
UTX0IF = 1; //UART0 TX中断标志初始置位1
U0CSR |= 0X40; //允许接收
IEN0 |= 0x84; //开总中断,接收中断
}
//对应中断函数:
#pragma vector = URX0_VECTOR
__interrupt void UART0_ISR(void)
{
if(lenU0<81)
{
tempRXU0 = U0DBUF;
RecdataU0[lenU0]=tempRXU0;//命令存到命令数组
URX0IF=0; //软件清除接收中断
lenU0++;
}
}
串口1:
void initUART1(void)
{
PERCFG = 0x00; //位置1 P0.4/P0.5口
P0SEL |= 0x30; //P0.4,P0.5用作串口(外部设备功能)
U1CSR |= 0x80; //设置为UART方式
U1GCR |= 11; //BAUD_E
U1BAUD |= 216; //BAUD_M 波特率设为115200
UTX1IF = 0; //UART1 TX中断标志初始置位0
U1CSR |= 0X40; //允许接收
IEN0 |= 0x88; // 开总中断,UART1接收中断
}
//对应的中断函数:
#pragma vector = URX1_VECTOR
__interrupt void UART1_ISR(void)
{
if(lenU1<81)
{
tempRXU1 = U1DBUF;
RecdataU1[lenU1]=tempRXU1;
URX1IF = 0; // 清中断标志
lenU1++;
}
}
希望上诉内容可以帮助大家!!!