新手入门
- 积分
- 12
- 金钱
- 12
- 注册时间
- 2017-7-13
- 在线时间
- 1 小时
|
发表于 2017-5-11 15:09:27
|
显示全部楼层
我前几天遇到这样的问题,把自动应答和自动重发关掉,接收通道也禁止(EN_AA、SETUP_RETR、EN_RXADDR都配置为0x00),发送后取得的STATUS值为30,也就是0x1e,改了很多次配置寄存器,都这样没有变化,后来就用串口把所有寄存器的值都打印出来,发现值和我配置的没有丝毫关系,大多数都是缺省值,说明SPI通讯有问题,只有极少数和我配置的值一样,如 CONFIG,说明模块没有问题,。。。。。。。。。。。最后,我的解决方法是每次通过SPI发送数据后,要在NRF24L01_CSN=1; 后面加一个延时 delay_us(10); 这个延时需要加在NRF24L01_Write_Reg()和NRF24L01_Write_Buf()里面
u8 NRF24L01_Write_Reg(u8 reg,u8 value)
{
u8 status;
NRF24L01_CSN=0; //使能SPI传输
status =SPI1_ReadWriteByte(reg);//发送寄存器号
SPI1_ReadWriteByte(value); //写入寄存器的值
NRF24L01_CSN=1; //禁止SPI传输
delay_us(10);
return (status); //返回状态值
}
u8 NRF24L01_Write_Buf(u8 reg, u8 *pBuf, u8 len)
{
u8 status,u8_ctr;
NRF24L01_CSN = 0; //使能SPI传输
status = SPI1_ReadWriteByte(reg);//发送寄存器值(位置),并读取状态值
for(u8_ctr=0; u8_ctr<len; u8_ctr++)SPI1_ReadWriteByte(*pBuf++); //写入数据
NRF24L01_CSN = 1; //关闭SPI传输
delay_us(10);
return status; //返回读到的状态值
} |
|