初级会员
- 积分
- 51
- 金钱
- 51
- 注册时间
- 2015-3-10
- 在线时间
- 0 小时
|
5金钱
正在调试中,计划51和32通信<br />
波形是51单片机产生的<br />
看功能手册上的波形应该如下,CE黄线 <br />
<br />
可是我弄的程序 和波形却是这样,<br />
void main(void)<br />
{<br />
uchar tf =0;<br />
uchar TxBuf[20]={0}; // <br />
uchar RxBuf[20]={0}; <br />
Init_NRF24L01();<br />
TxBuf[1] = 1 ;<br />
nRF24L01_TxPacket(TxBuf); // Transmit Tx buffer data<br />
Delay(6000);<br />
while(1)<br />
{<br />
<br />
if(KEY ==0 ) <br />
{<br />
led=0;<br />
Delay(200);<br />
led=1;<br />
<br />
TxBuf[1] = 1 ;<br />
tf = 1 ; <br />
}<br />
if (tf==1)<br />
{ <br />
nRF24L01_TxPacket(TxBuf); // Transmit Tx buffer data<br />
TxBuf[1] = 0x00;<br />
tf=0;<br />
Delay(1000);<br />
}<br />
<br />
<br />
}<br />
子函数如下<br />
void Init_NRF24L01(void)<br />
{<br />
Delay_us(100);<br />
CE=0; //24芯片使能<br />
CSN=1; // SPI失能,即禁止24芯片的SPI功能<br />
SCK=0; //初始化SPI时钟<br />
<br />
SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); //设置本地址<br />
SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // 写接收端地址<br />
<br />
SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); // 频道0自动 ACK应答允许<br />
SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); // 允许接收地址只有频道0,如果需要多频道可以参考Page21 <br />
SPI_RW_Reg(WRITE_REG + SETUP_RETR,0xF5); //设置自动重发的延时和次数,延时大小4000+86us,次数为5<br />
SPI_RW_Reg(WRITE_REG + RF_CH, 0); // 设置信道工作为2.4GHZ,收发必须一致<br />
SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //设置接收数据长度,本次设置为32字节<br />
SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); //设置发射速率为1MHZ,发射功率为最大值0dB<br />
// SPI_RW_Reg(WRITE_REG+CONFIG,0x0e); //IRQ收发完成中断响应,16CRC,主接收<br />
<br />
}<br />
void nRF24L01_TxPacket(unsigned char * tx_buf)<br />
{<br />
CE=0; //StandBy I模式 <br />
SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 装载接收端地址<br />
SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH); // 装载数据 <br />
SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); // IRQ收发完成中断响应,16位CRC,主发送<br />
CE=1; //置高CE,激发数据发送<br />
Delay_us(10);<br />
}<br />
<br />
但是按键下后 出现的波形也是按照程序如下的<br />
<br /> |
|