我发现了RF24L01的一个操作要点:
上电后第一次操作之前,要保证MOSI为0电平一段时间,以后的操作就无所谓了。否则对RF24L01的操作无效。
不知道各位大侠有没有验证过,是不是只有我买的模块特有的?
我上电后第一次操作RF24L01的指令如下:
DelayCount=0;
TimeOut=DelayCount+10;
while(DelayCount != TimeOut); //延时100mS
NRF24L01_Sleep_Enter();
NRF24L01_Sleep_Exit(); //上电后NRF24L01处于Sleep模式
/*********************************************************************************************************
函数:NRF24L01_Sleep_Enter
功能: 设定24L01 进入sleep模式
描述:
*********************************************************************************************************/
void NRF24L01_Sleep_Enter(void)
{
SPI_Read(READ_REG+CONFIG); //???? 上电后一定要执行此语句,第一次操作NRF24L01之前,要保证MOSI为0,否则不能正常工作
//SPI_RW_Reg(WRITE_REG + CONFIG, SPI_Read(READ_REG+CONFIG)&0xfd);
SPI_RW_Reg(WRITE_REG + CONFIG, 0x0c); //将PWR_UP设为0 0b0000 1100
}
假如直接执行SPI_RW_Reg(WRITE_REG + CONFIG, 0x0c);程序不能正常工作。一定要在之前加上 SPI_Read(READ_REG+CONFIG);才能正常工作。
或者执行SPI_RW_Reg(WRITE_REG + CONFIG, SPI_Read(READ_REG+CONFIG)&0xfd);也能正常工作。 |