Zigbee协议栈同时使用两个串口
本文参考TI论坛评论区的一个链接,原文链接: how-to-use-two-uart-ports-in-cc2530.
How to use two UART ports in CC2530 Z-Stack
The following steps show how to use two UART ports in CC2530 Z-Stack
①Define HAL_UART=TRUE, HAL_UART_ISR=1, and HAL_UART_DMA=2 in compile options.(在Project->Options中定义)
②Initialize and use UART0 (P0_2 as RX/P0_3 as TX) as the followings:
- 串口0初始化
void initUart0(halUARTCBack_t pf)
{
halUARTCfg_t uartConfig;
uartConfig.configured = TRUE;
uartConfig.baudRate = HAL_UART_BR_115200;
uartConfig.flowControl = FALSE;
uartConfig.flowControlThreshold = 48;
uartConfig.rx.maxBufSize = 128;
uartConfig.tx.maxBufSize = 128;
uartConfig.idleTimeout = 6;
uartConfig.intEnable = TRUE;
uartConfig.callBackFunc = pf;
HalUARTOpen (HAL_UART_PORT_0, &uartConfig);
}
- 串口0回调函数
void uart0RxCb( uint8 port, uint8 event )
{
uint8 len = Hal_UART_RxBufLen(port);
uint8 p[64];
if(len==0) return;
HalUARTRead(port,p,len);
HalUARTWrite( port, p, len);
}
- 串口0初始化调用
initUart0(uart0RxCb);
- 测试
//Output "UART0 output test" to P0.3
HalUARTWrite( HAL_UART_PORT_0, "UART0 output test", (byte)osal_strlen("UART0 output test"));
③Initialize and use UART1 (P1_6 as TX/P1_7 as RX) as the followings:
- 串口1初始化
void initUart1(halUARTCBack_t pf)
{
halUARTCfg_t uartConfig;
uartConfig.configured = TRUE;
uartConfig.baudRate = HAL_UART_BR_115200;
uartConfig.flowControl = FALSE;
uartConfig.flowControlThreshold = 48;
uartConfig.rx.maxBufSize = 128;
uartConfig.tx.maxBufSize = 128;
uartConfig.idleTimeout = 6;
uartConfig.intEnable = TRUE;
uartConfig.callBackFunc = pf;
HalUARTOpen (HAL_UART_PORT_1, &uartConfig);
}
- 串口1回调函数
void uart1RxCb( uint8 port, uint8 event )
{
uint8 len = Hal_UART_RxBufLen(port);
uint8 p[64];
if(len==0) return;
HalUARTRead(port,p,len);
HalUARTWrite( port, p, len);
}
- 串口1初始化调用
initUart1(uart1RxCb);
- 测试
//Output "UART1 output test" to P1.6
HalUARTWrite( HAL_UART_PORT_1, "UART1 output test", (byte)osal_strlen("UART1 output test"));
注意👇
在移植如上代码后Rebuild all会出现一大堆下图的warning
大概意思是对HAL_UART_ISR有多个定义,双击任意一个跳转到
把此处的0改为1即可,重新编译。
回调函数:未测试能否两个回调函数能否合并一起使用。TI官方说不能合并,有博客亲测可以合并…有时间可以测试一下。回调函数里一定要包含HalUARTRead(port,p,len)函数,否则会一直进入回调函数。