nRF24L01是個很常見的無線模塊, 可能版里大部分大佬都用過, 所以想在這里問問.
STC12的代碼在這
https://github.com/IOsetting/HML_FwLib_STC12/blob/master/example/spi/spi_nrf24l01.c
如果要用STC89, 只需要改改SPI的部分, 因為STC89不帶硬件SPI,需要用軟實現
發送狀態的配置
- NRF24L01_Write_Reg(NRF24_CMD_REGISTER_W + NRF24_REG_RX_PW_P0, NRF24_PLOAD_WIDTH);
- NRF24L01_Write_Reg(NRF24_CMD_FLUSH_RX, 0xff);
- NRF24L01_Write_From_Buf(NRF24_CMD_REGISTER_W + NRF24_REG_TX_ADDR, (uint8_t *)TX_ADDRESS, NRF24_ADDR_WIDTH);
- NRF24L01_Write_From_Buf(NRF24_CMD_REGISTER_W + NRF24_REG_RX_ADDR_P0, (uint8_t *)TX_ADDRESS, NRF24_ADDR_WIDTH);
- NRF24L01_Write_Reg(NRF24_CMD_REGISTER_W + NRF24_REG_EN_AA, 0x3f);
- NRF24L01_Write_Reg(NRF24_CMD_REGISTER_W + NRF24_REG_EN_RXADDR, 0x3f);
- NRF24L01_Write_Reg(NRF24_CMD_REGISTER_W + NRF24_REG_SETUP_RETR, 0x0a);
- NRF24L01_Write_Reg(NRF24_CMD_REGISTER_W + NRF24_REG_RF_CH, 40);
- NRF24L01_Write_Reg(NRF24_CMD_REGISTER_W + NRF24_REG_RF_SETUP, 0x07);
- NRF24L01_Write_Reg(NRF24_CMD_REGISTER_W + NRF24_REG_CONFIG, 0x0E);
復制代碼 用這個配置, 發送消息, 對方NRF24L01能正常接收, 但是本機看到的狀態永遠是1E, 也就是進行了多次嘗試達到最大嘗試次數
對于同樣的這片nRF24L01, 我在STM32上也是用的同樣的配置, 但是發送的結果狀態就是對的, 穩穩的一直是2E, 也就是發送并正確收到ACK
對應STM32F401CCU6的代碼在這里
https://github.com/IOsetting/stm32f401-wireless-car/blob/main/car-control/hardware/nrf24l01.c
求教這可能是什么問題?
如果有能在STC89/STC12上, nRF24L01發送能得到2E狀態碼的例子, 也麻煩分享一下, 我在網上找了好幾個例子, 全都是返回1E, 連能對比參考的都沒有.
|