1. 程式人生 > >STM32--SPI配置nrf24l01除錯筆記

STM32--SPI配置nrf24l01除錯筆記

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為高,進入接收模式 
}   

測試二結果:接收模組可以接收到,傳送模組可以確認傳送!