NRF24L01在初始化时出现错误,具体表现为向24L01的CONF寄存器写入0x0B,再读出来是0x08,这种情况是偶发性的,出现此种情况时24L01也确实无法通信(不出现这种情况是可以正常通信的),偶尔是其他寄存器出现问题,也会导致无法通信,下面是spi通信及写寄存器的代码
uint8_t SPI1_ReadWriteByte(uint8_t TxData)
{
u8 i;
for(i=0;i<8;i++)
{
if(TxData & 0x80)
{
MOSI_H;//拉高mosi
}
else
{
MOSI_L;//拉低mosi
}
delay_us(1);
TxData = TxData<<1;
SCK_H;//时钟线拉高
delay_us(1);
TxData |= (uint8_t)MISO;
SCK_L;//时钟线拉低
delay_us(1);
}
return (TxData);
}
//SPI写寄存器
//reg:指定寄存器地址
//value:写入的值
uint8_t NRF24L01_write_reg(uint8_t reg, uint8_t reg_val)
{
uint8_t status;
NRF24L01_CSN(0); //使能SPI传输
status = SPI1_ReadWriteByte(reg);//发送寄存器号
SPI1_ReadWriteByte(reg_val); //写入寄存器的值
NRF24L01_CSN(1); //禁止SPI传输
return status; //返回状态值
}
重新初始化一次也能解决问题,感觉像是spi通信失败了,导致初始化错误,但是为啥会失败呢,而且出现次数也挺多的