CC2530串口多次调用接收回调函数
问题是这样的,我的串口收发数据时正常的,但是当串口没收到数据时,回调函数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()语句
确实,注释掉就可以了
基本原理是,屏蔽了,发送事件也会触发回调函数的这种情况。如果不去屏蔽这个事件,那么就会进入一个死循环。