其他分享
首页 > 其他分享> > 基于Zigbee的CC2530UART0与UART1的通信

基于Zigbee的CC2530UART0与UART1的通信

作者:互联网

基于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++;
  }
}

希望上诉内容可以帮助大家!!!

标签:lenU1,UART0,Zigbee,void,CC2530UART0,UART1,中断,串口
来源: https://blog.csdn.net/yanw1234/article/details/119116356