以前在51上用过完全没问题。现在在STM32上用,发送总是突然停止,复位也没用,要断开电源重新上电才能发送。
不清楚是硬件问题还是程序问题。
以前51上是经常丢包,在电源处加个200uF电容就正常了,现在32上也加了。看现象已经不是丢包的问题。
模拟SPI时序:
uchar spi_rw(uchar dat) //spi通信时序函数 能写入并接收8位数据
{
uchar i;
sck=0;
for(i=0;i<8;i++)
{
mosi=(bool)(dat&0x80);
dat=dat<<1;
sck=1;
dat=dat|miso;
sck=0;
}
return dat;
}
发送函数:
void TXData(uchar *dat) //发送数据
{
ce=0;//进入待机模式
write_txfifo(nRF_WRITE_REG+TX_ADDR,TX_ADDR_WIDTH,(u8 *)TX_ADDRESS);
write_txfifo(nRF_WRITE_REG+RX_ADDR_P0,TX_ADDR_WIDTH,(u8 *)TX_ADDRESS)
write_reg(EN_AA,0x01);//选择0通道自动应答
write_reg(EN_RXADDR,0x01);//打开0通道自动应答
write_reg(SETUP_RETR,0x0a);//自动重发
write_reg(RF_CH,12); //设置无线频率
write_reg(RF_SETUP,0x07);//设置传输速率
write_reg(CONFIG,0x0e); //发射模式
ce=1; //拉高后开始无线发送数据
nrfdelay(25);
}
|