CC1101为什么会收到错误字符?

2019-07-18 14:19发布

CC1101为什么会收到错误字符?

最近在调433m cc1101无线模块,因为产品问题,规定了下数据包格式,采用了固定包长方式(3个字节的数据包)、取消crc校验、取消地址校验、接收方式采用中断方式、用GDO2管脚用作中断管脚,IOCFG2 寄存器写的 0x30,也就是IOCFG2.GDO2_CFG设置为0x00模式,接收缓存阈值设置0x00(4字节阈值),包长3字节+2字节状态寄存器=5字节>4字节阈值,肯定会触发中断,现在问题是发送端每隔0.5s发送一次数据,接收端触发中断就会接收数据,但是现在通过串口打印数据显示的接收数据中会不定期的接收到错误的字符,我在中断标志置位后,设定了判断条件,if((halSpiReadStatus(CCxxx0_RXBYTES) & BYTES_IN_RXFIFO)==5),也就是只有数据长度为5才可以执行接收,但是还是打印出错误字符,错误字符也是5个字节的数据,这是怎么回事呢?求ti技术员指导一些意见,谢谢!
函数寄存器配置:
const RF_SETTINGS rfSettings =
{
0x00,
0x08, // FSCTRL1 Frequency synthesizer control.
0x00, // FSCTRL0 Frequency synthesizer control.
0x10, // FREQ2 Frequency control word, high byte.
0xA7, // FREQ1 Frequency control word, middle byte.
0x62, // FREQ0 Frequency control word, low byte.
0x5B, // MDMCFG4 Modem configuration.
0xF8, // MDMCFG3 Modem configuration.
0x03, // MDMCFG2 Modem configuration.4字节同步字
0x22, // MDMCFG1 Modem configuration.4字节前导
0xF8, // MDMCFG0 Modem configuration.

0x00, // CHANNR Channel number.
0x47, // DEVIATN Modem deviation setting (when FSK modulation is enabled).
0xB6, // FREND1 Front end RX configuration.
0x10, // FREND0 Front end RX configuration.
0x18, // MCSM0 Main Radio Control State Machine configuration.
0x3c, //MCSM1 数据包接收后一直保持在接收模式
0x1D, // FOCCFG Frequency Offset Compensation Configuration.
0x1C, // BSCFG Bit synchronization Configuration.
0xC7, // AGCCTRL2 AGC control.
0x00, // AGCCTRL1 AGC control.
0xB2, // AGCCTRL0 AGC control.

0xEA, // FSCAL3 Frequency synthesizer calibration.
0x2A, // FSCAL2 Frequency synthesizer calibration.
0x00, // FSCAL1 Frequency synthesizer calibration.
0x11, // FSCAL0 Frequency synthesizer calibration.
0x59, // FSTEST Frequency synthesizer calibration.
0x81, // TEST2 Various test settings.
0x35, // TEST1 Various test settings.
0x09, // TEST0 Various test settings.
0x00, // IOCFG2 GDO2 output pin configuration.
0x06, // IOCFG0 GDO0 output pin configuration. Refer to SmartRF?Studio User Manual for detailed pseudo register explanation.

0x04, // PKTCTRL1 Packet automation control.
0x00, // PKTCTRL0 Packet automation control.
0x40, //FIFOTHR 4字节阈值
0x00, // ADDR Device address.

0x03 // PKTLEN Packet length.
};

中断接收函数:
void EXTI4_15_IRQHandler(void)
{
//---------------------------------GDO2----------------------------------
if(EXTI_GetITStatus(EXTI_Line11) != RESET) //GDO2
{
if(GPIO_ReadInputDataBit( GPIOB, GPIO_Pin_GDO2 ))
{
RxFlag=1; 状态置位
}
}
EXTI_ClearITPendingBit(EXTI_Line11);//清中断
}

while循环里边接收:

if(RxFlag==1)
{
RxFlag=0;
value=halSpiReadStatus(CCxxx0_RXBYTES) & BYTES_IN_RXFIFO;
if(value==5)
{
halSpiReadBurstReg(CCxxx0_RXFIFO, RxBuf,3 );

// Read the 2 appended status bytes (status[0] = RSSI, status[1] = LQI)
halSpiReadBurstReg(CCxxx0_RXFIFO, status, 2);



LED1_Toggle();
USART_SendString(USART2,RxBuf,3);
USART_SendString(USART2," ",2);

}
}
读取到的错误数据:



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
风尚男人
1楼-- · 2019-07-18 19:15
可以用第三个CC1101板子连接Smartrf Studio放在接收状态,看在接收端收到错误数据的时候,第三个CC1101是否也有接收到同样的错误的数据。

如果是,多半是发送端问题。如果不是则多半是接收端问题。
silicontra521
2楼-- · 2019-07-18 21:16
 精彩回答 2  元偷偷看……

一周热门 更多>