以前在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);
- }
|