开启ZIGBEE中双串口的方法
2015-12-09 19:07
141 查看
通过修改Zstack使UART0和UART1同时工作
zigbee协议中是默认UART0开启并关闭UART1的,我所做的项目协调器必须要两个串口,在查找了一部分资料后,实现了开启双串口的方法。
打开工程中的option选项,配置C/C++ Compiler中的prepocessor的预定义加入:
Hal_UART_ISR=2 HAL_UART_DMA=1
因为在hal_board_cfg.h中默认是DMA优先于ISR:
#if HAL_UART // Always prefer to use DMA over ISR. #if HAL_DMA #ifndef HAL_UART_DMA #if (defined ZAPP_P1) || (defined ZTOOL_P1) #define HAL_UART_DMA 1 #elif (defined ZAPP_P2) || (defined ZTOOL_P2) #define HAL_UART_DMA 2 #else #define HAL_UART_DMA 1 #endif #endif #define HAL_UART_ISR 0 #else #ifndef HAL_UART_ISR #if (defined ZAPP_P1) || (defined ZTOOL_P1) #define HAL_UART_ISR 1 #elif (defined ZAPP_P2) || (defined ZTOOL_P2) #define HAL_UART_ISR 2 #else #define HAL_UART_ISR 1 #endif #endif #define HAL_UART_DMA 0 #endif 这段代码大致的意思是只能开启一个,不用管,将第一个HAL_UART_ISR=0改成HAL_UART_ISR=2,这样就使得DMA为1,ISR为2。
在SerialApp里面加入串口的配置:
halUARTCfg_t uartConfig; uartConfig.configured = TRUE; uartConfig.baudRate = SERIAL_APP_BAUD; uartConfig.flowControl = FALSE; uartConfig.flowControlThreshold = SERIAL_APP_THRESH; uartConfig.rx.maxBufSize = SERIAL_APP_RX_SZ; uartConfig.tx.maxBufSize = SERIAL_APP_TX_SZ; uartConfig.idleTimeout = SERIAL_APP_IDLE; uartConfig.intEnable = TRUE; uartConfig.callBackFunc = SerialApp_CallBack;
SERIAL_APP_BAUD代表的是波特率,重点关注SerialApp_CallBack,因为串口的数据通过回掉函数来处理,先写UART0的回掉函数,功能是打印来自PC的数据:
static void UART0_CallBack(uint8 port, uint8 event) { (void)port; uint8 SerialApp_RxBuf[8]; if ((event & (HAL_UART_RX_FULL | HAL_UART_RX_ABOUT_FULL | HAL_UART_RX_TIMEOUT)) &&!SerialApp_TxLen) { if(!SerialApp_TxLen) HalUARTRead(HAL_UART_PORT_0,SerialApp_RxBuf, 8);//数据流8 HalUARTWrite(HAL_UART_PORT_0,SerialApp_RxBuf, 8);//打印发来的数据 SerialApp_TxLen=0; } }
同理修改HalUARTRead和HalUARTWrite中的参数得到相同功能的UART1回掉函数。
这时在配置后面加入:
uartConfig.callBackFunc = UART0_CallBack; HalUARTOpen (UART0, &uartConfig); //配置UART0 uartConfig.callBackFunc = UART1_CallBack; HalUARTOpen (UART1, &uartConfig);//配置UART1
其实这又一点省,其实不怕麻烦的话可以将UART0和UART1的参数调成不一样的。 <-.->
以上就配置好了,原因以后慢慢分析一下,双串口打印可这样写:
HalUARTWrite(UART0, "Init0", 5); HalUARTWrite(UART1, "Init1", 5);
相关文章推荐
- Mysql之主从复制
- 公司初创时期的技术路线系列--5.webx3框架的使用
- 公司初创时期的技术路线系列--6.mysql安装与配置
- BZOJ1082: [SCOI2005]栅栏
- 有容乃大:楚庄王(第二篇
- LaTeX 设置字体颜色
- JAVA Hibernate工作原理及为什么要用
- POJ 3580 SuperMemo splay 翻转 右移
- LaTeX 设置字体颜色
- CMake with Win&MinGW
- oracle 10g(服务端+客户端,支持win7、win8) 资源分享
- iOS-开发者相关的几种证书
- ZOJ1610_Count the Colors(段树/为段更新)
- python splinter chromedriver下载地址(国内可用)
- CodeForces 19D Points
- zookeeper3.4.6集群安装
- cxSpreadBook 要么 cxSpreadSheet 设置文本格式
- 受限玻尔兹曼机
- 如何用消息系统避免分布式事务
- spannableStringBuilder 用法详解