物聯網無線通信之 ZigBee TI CC2530串口通信調試

剛接觸ZigBee無線通信技術,熟悉一下ZStack協議棧。先從調試串口開始,再慢慢開始協議棧代碼調試。串口模式是全雙工的異步串行通信,串口的通信就是對串口相關寄存器的操作,比如控制和狀態寄存器、通用控制寄存器、數據緩衝寄存器及波特率控制寄存器等。下面程序已實現TI CC2530單片機的發送和接收數據,用的是CC Debugge仿真器和ZigBee最小系統,使用串口還得接個USB轉串口設備,我用的是USB轉TTL串口,下面來進行實現代碼講解:

#include <iocc2530.h>

#include <string.h>

char Temp;

uchar data = 0;

#define maxfile 100

char readdata[maxfile];

static char datatext[]="串口調試\\n";


主函數部分:

void main(void)

{

CLKCONCMD &= ~0x40; //設置系統時鐘源為32MHZ晶振

while(CLKCONSTA & 0x40); //等待晶振穩定為32M

CLKCONCMD &= ~0x47; //設置系統主時鐘頻率為32MHZ

InitUART(); //串口初始化

Uart_SendString(datatext,strlen(datatext));

while(1)

{

if( Temp != 0)

{

if((Temp!=' ')&&(data<maxfile>

readdata[data++] = Temp;

else

{

U0CSR &= ~0x40; //禁止接收

Uart_SendString(readdata,data); //發送已記錄的字符串。

U0CSR |= 0x40; //允許接收

data = 0;

}

Temp = 0;

}

}

}


普通延時函數:

void delay(unsigned int i)

{

unsigned int j;

for(i=i;i>0;i--)

for(j=0;j<0x3000;j++);

}


串口初始化函數:

void InitUART(void)

{

PERCFG = 0x00; //位置1 P0口

P0SEL = 0x0c; //P0_2,P0_3用作串口(外部設備功能)

P2DIR &= ~0XC0; //P0優先作為UART0


U0CSR |= 0x80; //設置為UART方式

U0GCR |= 8;

U0BAUD |= 59; //波特率設為9600

UTX0IF = 0; //UART0 TX中斷標誌初始置位0

U0CSR |= 0X40; //允許接收

IEN0 |= 0x84; // 開總中斷,接收中斷

}

上面串口初始化程序串口的波特率設置為9600,在32MHz系統時鐘下常用的波特率設置參考如下圖:

物聯網無線通信之 ZigBee  TI CC2530串口通信調試

數據發送函數:

void Uart_SendString(char *Data,int length)

{

int j;

for(j=0;j<length>

{

U0DBUF = *Data++;

while(UTX0IF == 0);

UTX0IF = 0;

}

}


中斷服務程序:

#if 1

#pragma vector = URX0_VECTOR

__interrupt void UART0_ISR(void)

{


URX0IF = 0; // 清中斷標誌

Temp = U0DBUF;

}

#endif

"/<length>

/<maxfile>


分享到:


相關文章: