最近在做关于Zigbee相关的一些东西,使用cc2430,但无奈SampleApp中并没有加入串口通信。
于是在通过各种百度,google之后,看明白了Zigbee大致的工作流程以及串口使用方法,特别记下,
以备查阅,如有不合理之处,请勿见笑。
硬件环境:
cc2430
软件环境:
zstack1.4.3 SampleApp, IAR
1. 由于本人的开发板并不标准,经修改,具体的预定义宏如下:
本人主要使用Coordinator EB 和 Router EB两个工程环境做测试。
2. 源文件的修改
主要使用串口0进行通信, P0-2接收, P0-3发送
定义全局变量:uint8 uart_recv_buf[64];
修改源代码:
SampleApp.c:
在SampleApp_Init()中加入:
SPIMgr_RegisterTaskID( task_id );
在SampleApp_ProcessEvent()加入:
// Handle UART recv event
if (events & SAMPLEAPP_UART_RECV_EVT)
{
int rLen;
rLen = HalUARTRead(0, uart_recv_buf, 64);
HalUARTWrite(0, uart_recv_buf, rLen);
/*SampleApp_SendUartBuf(uart_recv_buf, rLen);*/
/*HalLedBlink( HAL_LED_1, 4, 50, (500) );*/
return (events ^ SAMPLEAPP_UART_RECV_EVT);
}
这里只是实现回写的功能,实际还可以根据需要做相应的修改。
SPIMgr.c:
在SPIMgr_ProcessZToolData ()中:
注释掉所有的代码,我们并不用Zigbee中定义的格式,加入一条:
osal_start_timerEx( App_TaskID, SAMPLEAPP_UART_RECV_EVT,0);
其中SAMPLEAPP_UART_RECV_EVT要自己定义。
如:#define SAMPLEAPP_UART_RECV_EVT 0x0002
3. 调试串口常会遇到的问题。
1)无输出
首先检查是否使用交叉线,也就是说rx-tx, tx-rx,如果使用平行线,肯定是无输出的
再看程序,如果板子上只用了rx, tx, gnd, 那么程序中的flow control 一定要设为false
2)有输出,但是乱码
一般是由于波特率不对,还有一种情况会乱码,上一次出出这种情况把我折腾了好久,
两个串口通信方一定要共地!