微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > CC2530串口多次调用接收回调函数

CC2530串口多次调用接收回调函数

时间:10-02 整理:3721RD 点击:

问题是这样的,我的串口收发数据时正常的,但是当串口没收到数据时,回调函数rxCB仍然执行,接收缓存中仍然是以前收到的数据,这我有点不明白了,为什么没数据到达串口仍然执行回调函数呢?我不想让回调函数多次执行,可以怎么设置下吗?多次执行,会导致我的其他部门也跟着执行,虽然不影响使用,但是我感觉那样功耗会增加,其他部分工作的太频繁,太累了。呵呵,能帮我解决下吗?谢谢了。

初始化代码如下:

void UartInit(void)
{
//下面六句是我加的,初始化串口的
halUARTCfg_t uartConfig;//定义个串口结构体
uartConfig.configured =TRUE;//串口配置为真
uartConfig.baudRate =HAL_UART_BR_9600;//波特率为9600
uartConfig.flowControl =FALSE;//流控制为假
uartConfig.callBackFunc = rxCB;//定义串口回调函数
HalUARTOpen(HAL_UART_PORT_0,&uartConfig);// 打开串口0
HalUARTOpen(HAL_UART_PORT_1,&uartConfig);// 打开串口1
}

串口配置代码如下(我将串口改到串口2了,用P1脚上的串口):

#if HAL_UART
#ifndef HAL_UART_DMA
#if HAL_DMA
#if (defined ZAPP_P2) || (defined ZTOOL_P2)
#define HAL_UART_DMA 2
#else
#define HAL_UART_DMA 2       //zs 20141030 1
#endif
#else
#define HAL_UART_DMA 0
#endif
#endif

#ifndef HAL_UART_ISR
#if HAL_UART_DMA // Default preference for DMA over ISR.
#define HAL_UART_ISR 0
#elif (defined ZAPP_P2) || (defined ZTOOL_P2)
#define HAL_UART_ISR 2
#else
#define HAL_UART_ISR 2        //zs 20141030 1
#endif
#endif

我的回调函数如下:

static void rxCB(uint8 port,uint8 event)
{
if(port==0)
{
HalUARTRead(0,uartbuf,2);//从串口读取两个字节的数据到uartbuf中
rx_flag=1;
}
if(port==1)
{
HalUARTRead(1,uartbuf,2);
rx_flag=1;
}

}

大家没遇到这个问题吗?谁帮我解释下呢。等了好久了。呵呵。

楼主,你好,请问你串口1和串口2是怎么同时使用的啊?求赐教啊?我知道协议栈默认使用的是UART0的位置1,可是项目要求UART0(位置1)和UART1(位置1)相互备用,不知道UART1该怎么初始化,我在预编译里加上ZTOOL_P2也不行

几年过去了,请问这个问题解决了吗?

if (dmaCfg.txMT)
{
dmaCfg.txMT = FALSE;
evt |= HAL_UART_TX_EMPTY;
}

把_hal_uart_dma.c里面这个屏蔽了就行了,就是这货一直触发回调!

你好  你指的这个屏蔽是什么意思 ?  单步调试之后表示本身并不会进入if()语句。

注释掉

恩 那个 现在本身就不会进入if()语句

确实,注释掉就可以了

基本原理是,屏蔽了,发送事件也会触发回调函数的这种情况。如果不去屏蔽这个事件,那么就会进入一个死循环。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top