|
NRF24L01发送的初始化以及发送时序
1 void init_NRF24L01_send(void)
2 {
3 delay(30);
4 CE=0; // chip enable
5 CSN=1; // Spi disable
6 SCK=0; // Spi clock line init high
7 delay(30);
8 SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); // 写本地地址
9 SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // 写接收端地址
10 SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); // 频道0自动 ACK应答允许
11 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); // 允许接收地址只有频道0,如果需要多频道可以参考Page21
12 SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a); // 500us + 86us, 10 retrans...
13 SPI_RW_Reg(WRITE_REG + RF_CH, 40); // 设置信道工作为2.4GHZ,收发必须一致
14 SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //设置接收数据长度,本次设置为4字节
15 SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); //设置发射速率为1MHZ,发射功率为最大值0dB
16 SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); // IRQ收发完成中断响应,16位CRC,主发送
17 // CE=1; // chip enable
18 delay(30);
19 }
20
21 /***********************************************************************************************************
22 /*函数:void nRF24L01_TxPacket(unsigned char *tx_buf)
23 /*功能:发送 tx_buf中数据
24 /**********************************************************************************************************/
25 void nRF24L01_TxPacket(unsigned char *tx_buf)
26 {
27 CE=0; //StandBy I模式
28 SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 装载接收端地址
29 SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH); // 装载数据
30 SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); // IRQ收发完成中断响应,16位CRC,主发送
31 CE=1; //置高CE,激发数据发送
32 delay(100);
33 CE=0;
34 }
|
|