尊敬的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]那个数据是对的