STM32--SPI配置nrf24l01除錯筆記
阿新 • • 發佈:2019-01-23
TX模式和RX模式
地址配置
//傳送/接收地址一
const u8 TX_ADDRESS[TX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01}; //傳送地址
const u8 RX_ADDRESS[RX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01};
//傳送/接收地址二
const u8 TX_ADDRESS1[TX_ADR_WIDTH]={0x35,0x43,0x10,0x10,0x01}; //傳送地址
const u8 RX_ADDRESS1[RX_ADR_WIDTH]={0x35,0x43,0x10,0x10,0x01};
測試一
傳送模組,傳送模式配置成:傳送地址一,接收地址二
void NRF24L01_TX_Mode(void )
{
NRF24L01_CE=0;
NRF24L01_Write_Buf(NRF_WRITE_REG+TX_ADDR,(u8*)TX_ADDRESS,TX_ADR_WIDTH);//寫TX節點地址
NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS1,RX_ADR_WIDTH); //設定TX節點地址,主要為了使能ACK
NRF24L01_Write_Reg(NRF_WRITE_REG+EN_AA,0x01 ); //使能通道0的自動應答
NRF24L01_Write_Reg(NRF_WRITE_REG+EN_RXADDR,0x01); //使能通道0的接收地址
NRF24L01_Write_Reg(NRF_WRITE_REG+SETUP_RETR,0x1a);//設定自動重發間隔時間:500us + 86us;最大自動重發次數:10次
NRF24L01_Write_Reg(NRF_WRITE_REG+RF_CH,40); //設定RF通道為40
NRF24L01_Write_Reg(NRF_WRITE_REG+RF_SETUP,0x0f); //設定TX發射引數,0db增益,2Mbps,低噪聲增益開啟
NRF24L01_Write_Reg(NRF_WRITE_REG+CONFIG,0x0e); //配置基本工作模式的引數;PWR_UP,EN_CRC,16BIT_CRC,接收模式,開啟所有中斷
NRF24L01_CE=1;//CE為高,10us後啟動傳送
}
接收模組,接收地址配置為:接收地址一
void NRF24L01_SPI3_RX_Mode(void)
{
NRF24L01_SPI3_CE=0;
NRF24L01_SPI3_Write_Buf(NRF_WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH);//寫RX0節點地址
NRF24L01_SPI3_Write_Reg(NRF_WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//選擇通道0的有效資料寬度
NRF24L01_SPI3_Write_Reg(NRF_WRITE_REG+EN_AA,0x01); //使能通道0-5的ACK自動應答
NRF24L01_SPI3_Write_Reg(NRF_WRITE_REG+EN_RXADDR,0x01); //使能通道0-5的接收地址
NRF24L01_SPI3_Write_Reg(NRF_WRITE_REG+RF_CH,40); //設定RF通訊頻率
NRF24L01_SPI3_Write_Reg(NRF_WRITE_REG+RF_SETUP,0x0f); //設定TX發射引數,0db增益,2Mbps,低噪聲增益開啟
NRF24L01_SPI3_Write_Reg(NRF_WRITE_REG+CONFIG, 0x0f); //配置基本工作模式的引數;PWR_UP,EN_CRC,16BIT_CRC,接收模式
NRF24L01_SPI3_CE = 1; //CE為高,進入接收模式
}
測試一結果:接收模組可以接收到,但是傳送模組無法確認已經發送!
測試二:
傳送模組,傳送模式配置成:傳送地址一,接收地址一和接收地址二
void NRF24L01_TX_Mode(void)
{
NRF24L01_CE=0;
NRF24L01_Write_Buf(NRF_WRITE_REG+TX_ADDR,(u8*)TX_ADDRESS,TX_ADR_WIDTH);//傳送訊息的目的地址
NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH); //監聽通道0,接收地址一
NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P1,(u8*)RX_ADDRESS1,RX_ADR_WIDTH);//監聽通道1,接收地址二
NRF24L01_Write_Reg(NRF_WRITE_REG+EN_AA,0x03); //0x03>>>0011使能通道0~通道1的自動應答
NRF24L01_Write_Reg(NRF_WRITE_REG+EN_RXADDR,0x03); //0x03>>>0011使能通道0~通道1的接收地址
NRF24L01_Write_Reg(NRF_WRITE_REG+SETUP_RETR,0x1a);//設定自動重發間隔時間:500us + 86us;最大自動重發次數:10次
NRF24L01_Write_Reg(NRF_WRITE_REG+RF_CH,40); //設定RF通道為40
NRF24L01_Write_Reg(NRF_WRITE_REG+RF_SETUP,0x0f); //設定TX發射引數,0db增益,2Mbps,低噪聲增益開啟
NRF24L01_Write_Reg(NRF_WRITE_REG+CONFIG,0x0e); //配置基本工作模式的引數;PWR_UP,EN_CRC,16BIT_CRC,接收模式,開啟所有中斷
NRF24L01_CE=1;//CE為高,10us後啟動傳送
}
接收模組,接收地址配置為:接收地址一
void NRF24L01_SPI3_RX_Mode(void)
{
NRF24L01_SPI3_CE=0;
NRF24L01_SPI3_Write_Buf(NRF_WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH);//寫RX0節點地址
NRF24L01_SPI3_Write_Reg(NRF_WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//選擇通道0的有效資料寬度
NRF24L01_SPI3_Write_Reg(NRF_WRITE_REG+EN_AA,0x01); //使能通道0-5的ACK自動應答
NRF24L01_SPI3_Write_Reg(NRF_WRITE_REG+EN_RXADDR,0x01); //使能通道0-5的接收地址
NRF24L01_SPI3_Write_Reg(NRF_WRITE_REG+RF_CH,40); //設定RF通訊頻率
NRF24L01_SPI3_Write_Reg(NRF_WRITE_REG+RF_SETUP,0x0f); //設定TX發射引數,0db增益,2Mbps,低噪聲增益開啟
NRF24L01_SPI3_Write_Reg(NRF_WRITE_REG+CONFIG, 0x0f); //配置基本工作模式的引數;PWR_UP,EN_CRC,16BIT_CRC,接收模式
NRF24L01_SPI3_CE = 1; //CE為高,進入接收模式
}