微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI无线射频设计 > 在CC1350中无线接收的例程中为什么回调函数接收完数据还死在回调函数出不去呢,想用串口把接收到数据发送出去,却实现不了

在CC1350中无线接收的例程中为什么回调函数接收完数据还死在回调函数出不去呢,想用串口把接收到数据发送出去,却实现不了

时间:12-23 整理:3721RD 点击:

在CC1350中无线接收的例程中为什么回调函数接收完数据还死在回调函数出不去呢,想用串口把接收到数据发送出去,却实现不了

RF_cmdPropRx.pQueue = &dataQueue; /* Set the Data Entity queue for received data */
RF_cmdPropRx.rxConf.bAutoFlushIgnored = 1; /* Discard ignored packets from Rx queue */
RF_cmdPropRx.rxConf.bAutoFlushCrcErr = 1; /* Discard packets with CRC error from Rx queue */
RF_cmdPropRx.maxPktLen = MAX_LENGTH; /* Implement packet length filtering to avoid PROP_ERROR_RXBUF */
RF_cmdPropRx.pktConf.bRepeatOk = 1;
RF_cmdPropRx.pktConf.bRepeatNok = 1;

void callback(RF_Handle h, RF_CmdHandle ch, RF_EventMask e)
{
if (e & RF_EventRxEntryDone)
{
/* Toggle pin to indicate RX */
PIN_setOutputValue(ledPinHandle, Board_PIN_LED2,!PIN_getOutputValue(Board_PIN_LED2));

/* Get current unhandled data entry */
currentDataEntry = RFQueue_getDataEntry();

/* Handle the packet data, located at &currentDataEntry->data:
* - Length is the first byte with the current configuration
* - Data starts from the second byte */
packetLength = *(uint8_t*)(&currentDataEntry->data);
packetDataPointer = (uint8_t*)(&currentDataEntry->data + 1);

/* Copy the payload + the status byte to the packet variable */
memcpy(packet, packetDataPointer, (packetLength + 1));

RFQueue_nextEntry();
}
}

void scan_in_while(void)
{
// static ui8 counter = 0;
//读取实时钟
//read_PCF8563();
//键盘扫描
//scan_key();
//红外遥控器扫描
//IRR_scan_key();

//开关量检测
//scan_in();
//ADC检测
//scan_Analog();

//蜂鸣器扫描
//scan_beep();
//数码管闪烁显示
//scan_LEDDP();

//串口通讯
//scan_RS232();
//scan_RS485();

//温度传感器
//scan_DS18B20();//DS18B20扫描

//更新显示时间或者秒运算,每秒1次
/*if(DateTime.sec!=old_sec)
{
old_sec=DateTime.sec;

}*/
if(second_flag) //判断秒标志是否置位
{
second_flag=0; //清除秒标志

UART_write(uart,packet, 30);

}
}

回调函数有数据能相应,没有数据时候为什么其他的程序执行不了呢?

你是调用的那个API来将射频置为rx状态的?

是用的RF_pendCmd或RF_runCmd吗?

这两个命令都会block代码执行,直到命令执行完毕。

但是,由于你设置了

RF_cmdPropRx.pktConf.bRepeatOk = 1;
RF_cmdPropRx.pktConf.bRepeatNok = 1;

所以,一直不会结束这条语句的执行,从而无法执行后续的语句。

是的,那怎么设置,收完数据串口才能把数据发送出去?

几个处理方法

一是可以在接收处理的callback函数中进行打印

或者将RF_cmdPropRx.pktConf.bRepeatOk = 0;即每次接收到正确数据包后退出rx,执行后面的语句,然后在重新置为接收状态

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

网站地图

Top