51822和24L01 LE1 LU1之間通訊問題

2021-08-19 16:32:37 字數 3270 閱讀 1536

關於24lx01接收位址設定的問題,寫位址的時候,先寫入低位址,然後高位址。

假如定義位址p0_address[5]=;依次寫入rx_addr_p0,

實際通道0位址是 0x30, 0x33, 0x34, 0x35, 0x36。

p2-p5的位址只有乙個位元組,並且是最低乙個位元組。假如定義位址p1_address[5]=;依次寫入rx_addr_p1,此時,通道1的接收位址為0x31, 0x33, 0x34,0x35, 0x36; 在rx_addr_p2中寫入位址0x32, 實際通道2的接收位址為0x31, 0x33, 0x34, 0x35, 0x32。同理,假如在rx_addr_3寫入0x33,其位址為0x31, 0x33, 0x34,0x35, 0x33

。rx_addr_4寫入0x34,其位址為0x31, 0x33, 0x34,0x35, 0x34

。rx_addr_5寫入0x35,其位址為0x31, 0x33, 0x34,0x35, 0x35

。51822有8個接收通道,分別由base0,base1,prefix0,prefix1四個暫存器來設定。請檢視資料手冊,

可以看出,位址構成如下

加入初始化函式如下

uint32_t esb_init(void)

;

uint8_tbase_addr_1[4]

=;

uint8_taddr_prefix[8]

=;

nrf_esb_config_t nrf_esb_config=nrf_esb_default_config;

nrf_esb_config.protocol=nrf_esb_protocol_esb;

nrf_esb_config.retransmit_delay=500;

nrf_esb_config.bitrate=nrf_esb_bitrate_250kbps;

nrf_esb_config.event_handler=nrf_esb_event_handler;

nrf_esb_config.mode=nrf_esb_mode_ptx;

nrf_esb_config.payload_length=24;

nrf_esb_config.selective_auto_ack=false;

err_code=nrf_esb_init(&nrf_esb_config);

verify_success(err_code);

err_code=nrf_esb_set_base_address_0(base_addr_0);

verify_success(err_code);

err_code=nrf_esb_set_base_address_1(base_addr_1);

verify_success(err_code);

err_code=nrf_esb_set_prefixes(addr_prefix,8);

verify_success(err_code);

returnerr_code;

}

函式初始化之後,配置到的位址如下,都倒過來了,這個要注意。

通道0: 0x32 0x33 0x34 0x35 0x37

通道1: 0x32 0x33 0x34 0x35 0x36

通道2: 0x32 0x33 0x34 0x35 0x35

通道3: 0x32 0x33 0x34 0x35 0x34

通道4: 0x32 0x33 0x34 0x35 0x33

通道5: 0x32 0x33 0x34 0x35 0x32

通道6: 0x32 0x33 0x34 0x35 0x31

通道7: 0x32 0x33 0x34 0x35 0x30

51822傳送位址比較特殊,不是直接寫入位址,而是直接使用接收位址,通過設定aaa的值來引用那個通道的位址作為傳送位址。這個傳送位址在nrf_esb_payload_t  結構體裡定義了,傳送的時候只需要該相應的值即可。下面定義的結構體

static nrf_esb_payload_t   tx_payload = nrf_esb_create_payload(7

, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x32, 0x34, 0x36, 0x38, 0x30);

其中 7 就是使用的通道7作為傳送位址。直接引用nrf_esb_write_payload(&tx_payload) 即可實現使用通道7作為傳送位址,傳送內容是後面的資料。

與24lx01通訊的時候,需要注意的就是位址設定。其他的條件保持一致即可。特別要注意的是,一定要開自動應答!!!別問為什麼,照做就行!

NRF24L01 SI24R1廣播通訊

目錄總結 實現nrf24l01 si24r1廣播通訊 使用stm32cubemx建立工程。使用到的外設有 usart1 debug除錯 spi1 無線模組連線 usb 上位機通訊 要使用廣播通訊,就不能使用ack模式,需使用no ack模式,注意修改暫存器。且使用中斷接收無線資料,注意中斷資料處理 ...

nRF24L01 使用說明

bit0 prim rx設定工作模式,傳送或接收,0 傳送 1 接收。bit1 pwm up設定是否上電,晶元在傳送或接收完成後根據此位判斷是進入powerdown模式 0 還是進入standby模式 1 bit2 crco設定crc的位元組數,0 1byte 1 2byte。bit3 en crc...

NRF24L01的通訊距離

nrf24l01模組的傳輸距離由 使用什麼天線 是否加了功率晶元 程式中選擇的傳輸速率 空曠和有障礙物 四個因素決定。目前市場上的nrf24l01有三種模組。1.天線在pcb上 零售價6元 15元 該模組的天線在pcb上,沒有加功率晶元,屬於傳輸距離最短的模組。空曠條件下,經過實測,2m傳輸速率下1...