Skip to content

Commit 625176a

Browse files
committed
Fixed
1 parent dadc4af commit 625176a

File tree

3 files changed

+46
-31
lines changed

3 files changed

+46
-31
lines changed

NRF24.c

+39-28
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ void nrf24_data_rate(uint8_t bps){
100100

101101
data &= ~(1 << RF_DR_LOW) & ~(1 << RF_DR_HIGH);
102102

103-
if(bps == _2Mbps){
103+
if(bps == _2mbps){
104104
data |= (1 << RF_DR_HIGH);
105105
}else if(bps == _250kbps){
106106
data |= (1 << RF_DR_LOW);
@@ -258,17 +258,26 @@ void nrf24_clear_max_rt(void){
258258
}
259259

260260
uint8_t nrf24_read_bit(uint8_t reg, uint8_t bit){
261+
262+
if(nrf24_r_reg(reg, 1) & (1 << bit)){
263+
return 1;
264+
}
265+
266+
return 0;
267+
}
268+
269+
void nrf24_set_bit(uint8_t reg, uint8_t bit, uint8_t val){
261270
uint8_t data = 0;
262271

263272
data = nrf24_r_reg(reg, 1);
264273

265-
data &= (1 << bit);
266-
267-
if(data){
268-
return 1;
274+
if(val){
275+
data |= (1 << bit);
276+
}else{
277+
data &= ~(1 << bit);
269278
}
270279

271-
return 0;
280+
nrf24_w_reg(reg, &data, 1);
272281
}
273282

274283
uint8_t nrf24_r_pld_wid(void){
@@ -290,6 +299,8 @@ void nrf24_listen(void){
290299
data |= (1 << PRIM_RX);
291300

292301
nrf24_w_reg(CONFIG, &data, 1);
302+
303+
ce_high();
293304
}
294305

295306
void nrf24_stop_listen(void){
@@ -414,6 +425,7 @@ uint8_t nrf24_transmit(uint8_t *data, uint8_t size){
414425

415426
nrf24_clear_tx_ds();
416427

428+
417429
csn_low();
418430
nrf24_w_spec_cmd(W_TX_PAYLOAD);
419431
nrf24_w_spec_reg(data, size);
@@ -423,19 +435,9 @@ uint8_t nrf24_transmit(uint8_t *data, uint8_t size){
423435
HAL_Delay(1);
424436
ce_low();
425437

426-
uint32_t ms = HAL_GetTick();
427438

428-
while((HAL_GetTick()-ms) < 150){
429-
uint8_t stat = nrf24_r_reg(STATUS, 1);
430-
if(stat & (1 << TX_DS)){
431-
nrf24_clear_tx_ds();
432-
return 1;
433-
}
434-
435-
if(stat & (1 << MAX_RT)){
436-
nrf24_clear_max_rt();
437-
return 2;
438-
}
439+
if(nrf24_read_bit(STATUS, MAX_RT) == 1){
440+
return 1;
439441
}
440442

441443
return 0;
@@ -475,6 +477,10 @@ void nrf24_transmit_rx_ack_pld(uint8_t pipe, uint8_t *data, uint8_t size){
475477

476478
}
477479

480+
uint8_t nrf24_carrier_detect(void){
481+
return nrf24_r_reg(RPD, 1);
482+
}
483+
478484
uint8_t nrf24_data_available(void){
479485

480486
uint8_t reg_dt = nrf24_r_reg(FIFO_STATUS, 1);
@@ -486,22 +492,15 @@ uint8_t nrf24_data_available(void){
486492
return 0;
487493
}
488494

489-
void nrf24_flush_on_full_rx(void){
490-
uint8_t reg_dt = nrf24_r_reg(FIFO_STATUS, 1);
491-
492-
if((reg_dt & (1 << RX_FULL))){
493-
nrf24_flush_rx();
494-
}
495-
}
496-
497495
void nrf24_receive(uint8_t *data, uint8_t size){
498-
ce_high();
499496

500497
csn_low();
501498
nrf24_w_spec_cmd(R_RX_PAYLOAD);
502499
nrf24_r_spec_reg(data, size);
503500
csn_high();
504501

502+
nrf24_clear_rx_dr();
503+
505504
nrf24_flush_rx();
506505
}
507506

@@ -527,7 +526,7 @@ void nrf24_defaults(void){
527526
nrf24_auto_retr_limit(3);
528527

529528

530-
for(uint8_t i = 0; i <= 5; i++){
529+
for(uint8_t i = 0; i < 5; i++){
531530
nrf24_pipe_pld_size(i, 0);
532531
nrf24_cls_rx_pipe(i);
533532
nrf24_set_rx_dpl(i, disable);
@@ -537,4 +536,16 @@ void nrf24_defaults(void){
537536
ce_high();
538537
}
539538

539+
void nrf24_init(void){
540+
541+
nrf24_pwr_up();
542+
543+
nrf24_flush_tx();
544+
nrf24_flush_rx();
545+
546+
nrf24_clear_rx_dr();
547+
nrf24_clear_tx_ds();
548+
nrf24_clear_max_rt();
549+
}
550+
540551

NRF24.h

+5-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
enum data_rate {
55
_1mbps = 0,
6-
_2Mbps = 1,
6+
_2mbps = 1,
77
_250kbps = 2
88
};
99

@@ -69,13 +69,15 @@ void nrf24_clear_tx_ds(void);
6969
void nrf24_clear_max_rt(void);
7070

7171
uint8_t nrf24_read_bit(uint8_t reg, uint8_t bit);
72+
void nrf24_set_bit(uint8_t reg, uint8_t bit, uint8_t val);
7273
uint8_t nrf24_r_pld_wid(void);
7374

7475
void nrf24_listen(void);
7576
void nrf24_stop_listen(void);
7677

7778
void nrf24_dpl(uint8_t en);
7879
void nrf24_set_rx_dpl(uint8_t pipe, uint8_t en);
80+
7981
void nrf24_auto_ack(uint8_t pipe, uint8_t ack);
8082
void nrf24_auto_ack_all(uint8_t ack);
8183
void nrf24_en_ack_pld(uint8_t en);
@@ -87,11 +89,12 @@ uint8_t nrf24_transmit(uint8_t *data, uint8_t size);
8789
void nrf24_transmit_no_ack(uint8_t *data, uint8_t size);
8890
void nrf24_transmit_rx_ack_pld(uint8_t pipe, uint8_t *data, uint8_t size);
8991

92+
uint8_t nrf24_carrier_detect(void);
9093
uint8_t nrf24_data_available(void);
91-
void nrf24_flush_on_full_rx(void);
9294
void nrf24_receive(uint8_t *data, uint8_t size);
9395

9496
void nrf24_defaults(void);
97+
void nrf24_init(void);
9598

9699
#endif
97100

NRF24_conf.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
#define _NRF_24_CONF_H_
33

44
#define hspiX hspi1
5-
#define spi_w_timeout 1000
5+
#define spi_w_timeout 100
66
#define spi_r_timeout 1000
77

88
#define csn_gpio_port GPIOA
@@ -15,3 +15,4 @@
1515
#define irq_gpio_pin GPIO_PIN_1
1616

1717
#endif
18+

0 commit comments

Comments
 (0)