TI中文支持网
TI专业的中文技术问题搜集分享网站

CC1101读取RSSI寄存器一直为定值

尊敬的TI技术支持,你好

我用stm32读取CC1101的RSSI寄存器(0x34),结果发现不管距离远近都是定值-58,读取位置和转换都参考网上的资料,不知道哪里出了问题,希望得到解答。代码如下

这是主函数的部分程序,执行顺序为先设置为RX模式,再接收字节,再读取RSSI

CC1101_Set_Mode( RX_MODE );
i = CC1101_Rx_Packet( g_RF24L01RxBuffer ); //接收字节 rssi=CC1101_Read_RSSI_Reg();//读取rssi值
drv_delay_ms(10);

stren=CalculateRssi(rssi);

这是读取RSSI寄存器的值的程序

u8 CC1101_Read_RSSI_Reg(void)
{
u8 rssi;
CC1101_SET_CSN_LOW( );

drv_spi_read_write_byte( 0x34 | 0x80); //单独读命令 及地址

rssi = drv_spi_read_write_byte( 0xFF ); //读取寄存器
CC1101_SET_CSN_HIGH( );

return rssi;
}

计算RSSI的值是参考网上的,应该没有问题,就不贴上来了。

谢谢你们

Viki Shi:

请参考这边的类似问题:e2echina.ti.com/…/432162

Lucia:

回复 Viki Shi:

谢谢

我按照他的方法,连续读取0xF4寄存器,发现结果如下

rssi是设置存取寄存器的值的数组,每次读取的前三个结果都差别较大,但后七个都是0x05,不会随着距离远近而改变,担心是不是程序问题,程序如下

u8 CC1101_Read_RSSI_Reg(void){ u8 rssi[10],Ave_Rssi=0; int i; CC1101_SET_CSN_LOW( ); drv_spi_read_write_byte( 0x34 | READ_BURST); //连续读命令 及首地址 for( i = 0; i < 10; i ++ ) { rssi[i]= drv_spi_read_write_byte( 0xFF ); //连续读取数据 } CC1101_SET_CSN_HIGH( );

}

谢谢你

Lucia:

回复 Viki Shi:

你好,已经解决了,发现不需要连续读很多次,rssi[0]那个数据是对的

赞(0)
未经允许不得转载:TI中文支持网 » CC1101读取RSSI寄存器一直为定值
分享到: 更多 (0)