nrf24l01_defines.h 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. #ifndef _NRF_24L01_DEINES_H_
  2. #define _NRF_24L01_DEINES_H_
  3. #if defined(STM32F401xC) || defined(STM32F401xE)
  4. #include "stm32f4xx_hal.h"
  5. #endif
  6. #if defined (STM32L432xx)
  7. #include "stm32l4xx_hal.h"
  8. #endif
  9. // nRF24L0 instruction definitions
  10. #define nRF24_CMD_R_REGISTER (uint8_t)0x00 // Register read
  11. #define nRF24_CMD_W_REGISTER (uint8_t)0x20 // Register write
  12. #define nRF24_CMD_ACTIVATE (uint8_t)0x50 // (De)Activates R_RX_PL_WID, W_ACK_PAYLOAD, W_TX_PAYLOAD_NOACK features
  13. #define nRF24_CMD_R_RX_PL_WID (uint8_t)0x60 // Read RX-payload width for the top R_RX_PAYLOAD in the RX FIFO.
  14. #define nRF24_CMD_R_RX_PAYLOAD (uint8_t)0x61 // Read RX payload
  15. #define nRF24_CMD_W_TX_PAYLOAD (uint8_t)0xA0 // Write TX payload
  16. #define nRF24_CMD_W_ACK_PAYLOAD (uint8_t)0xA8 // Write ACK payload
  17. #define nRF24_CMD_W_TX_PAYLOAD_NOACK (uint8_t) 0xB0//Write TX payload and disable AUTOACK
  18. #define nRF24_CMD_FLUSH_TX (uint8_t)0xE1 // Flush TX FIFO
  19. #define nRF24_CMD_FLUSH_RX (uint8_t)0xE2 // Flush RX FIFO
  20. #define nRF24_CMD_REUSE_TX_PL (uint8_t)0xE3 // Reuse TX payload
  21. #define nRF24_CMD_LOCK_UNLOCK (uint8_t)0x50 // Lock/unlock exclusive features
  22. #define nRF24_CMD_NOP (uint8_t)0xFF // No operation (used for reading status register)
  23. // nRF24L0 register definitions
  24. #define nRF24_REG_CONFIG (uint8_t)0x00 // Configuration register
  25. #define nRF24_REG_EN_AA (uint8_t)0x01 // Enable "Auto acknowledgment"
  26. #define nRF24_REG_EN_RXADDR (uint8_t)0x02 // Enable RX addresses
  27. #define nRF24_REG_SETUP_AW (uint8_t)0x03 // Setup of address widths
  28. #define nRF24_REG_SETUP_RETR (uint8_t)0x04 // Setup of automatic retransmit
  29. #define nRF24_REG_RF_CH (uint8_t)0x05 // RF channel
  30. #define nRF24_REG_RF_SETUP (uint8_t)0x06 // RF setup register
  31. #define nRF24_REG_STATUS (uint8_t)0x07 // Status register
  32. #define nRF24_REG_OBSERVE_TX (uint8_t)0x08 // Transmit observe register
  33. #define nRF24_REG_RPD (uint8_t)0x09 // Received power detector
  34. #define nRF24_REG_RX_ADDR_P0 (uint8_t)0x0A // Receive address data pipe 0
  35. #define nRF24_REG_RX_ADDR_P1 (uint8_t)0x0B // Receive address data pipe 1
  36. #define nRF24_REG_RX_ADDR_P2 (uint8_t)0x0C // Receive address data pipe 2
  37. #define nRF24_REG_RX_ADDR_P3 (uint8_t)0x0D // Receive address data pipe 3
  38. #define nRF24_REG_RX_ADDR_P4 (uint8_t)0x0E // Receive address data pipe 4
  39. #define nRF24_REG_RX_ADDR_P5 (uint8_t)0x0F // Receive address data pipe 5
  40. #define nRF24_REG_TX_ADDR (uint8_t)0x10 // Transmit address
  41. #define nRF24_REG_RX_PW_P0 (uint8_t)0x11 // Number of bytes in RX payload in data pipe 0
  42. #define nRF24_REG_RX_PW_P1 (uint8_t)0x12 // Number of bytes in RX payload in data pipe 1
  43. #define nRF24_REG_RX_PW_P2 (uint8_t)0x13 // Number of bytes in RX payload in data pipe 2
  44. #define nRF24_REG_RX_PW_P3 (uint8_t)0x14 // Number of bytes in RX payload in data pipe 3
  45. #define nRF24_REG_RX_PW_P4 (uint8_t)0x15 // Number of bytes in RX payload in data pipe 4
  46. #define nRF24_REG_RX_PW_P5 (uint8_t)0x16 // Number of bytes in RX payload in data pipe 5
  47. #define nRF24_REG_FIFO_STATUS (uint8_t)0x17 // FIFO status register
  48. #define nRF24_REG_DYNPD (uint8_t)0x1C // Enable dynamic payload length
  49. #define nRF24_REG_FEATURE (uint8_t)0x1D // Feature register
  50. // Register bits definitions
  51. #define nRF24_CONFIG_PRIM_RX (uint8_t)0x01 // PRIM_RX bit in CONFIG register
  52. #define nRF24_CONFIG_PWR_UP (uint8_t)0x02 // PWR_UP bit in CONFIG register
  53. #define nRF24_FEATURE_EN_DYN_ACK (uint8_t)0x01 // EN_DYN_ACK bit in FEATURE register
  54. #define nRF24_FEATURE_EN_ACK_PAY (uint8_t)0x02 // EN_ACK_PAY bit in FEATURE register
  55. #define nRF24_FEATURE_EN_DPL (uint8_t)0x04 // EN_DPL bit in FEATURE register
  56. #define nRF24_FLAG_RX_DR (uint8_t)0x40 // RX_DR bit (data ready RX FIFO interrupt)
  57. #define nRF24_FLAG_TX_DS (uint8_t)0x20 // TX_DS bit (data sent TX FIFO interrupt)
  58. #define nRF24_FLAG_MAX_RT (uint8_t)0x10 // MAX_RT bit (maximum number of TX retransmits interrupt)
  59. // Register masks definitions
  60. #define nRF24_MASK_REG_MAP (uint8_t)0x1F // Mask bits[4:0] for CMD_RREG and CMD_WREG commands
  61. #define nRF24_MASK_CRC (uint8_t)0x0C // Mask for CRC bits [3:2] in CONFIG register
  62. #define nRF24_MASK_STATUS_IRQ (uint8_t)0x70 // Mask for all IRQ bits in STATUS register
  63. #define nRF24_MASK_RF_PWR (uint8_t)0x06 // Mask RF_PWR[2:1] bits in RF_SETUP register
  64. #define nRF24_MASK_RX_P_NO (uint8_t)0x0E // Mask RX_P_NO[3:1] bits in STATUS register
  65. #define nRF24_MASK_DATARATE (uint8_t)0x28 // Mask RD_DR_[5,3] bits in RF_SETUP register
  66. #define nRF24_MASK_EN_RX (uint8_t)0x3F // Mask ERX_P[5:0] bits in EN_RXADDR register
  67. #define nRF24_MASK_RX_PW (uint8_t)0x3F // Mask [5:0] bits in RX_PW_Px register
  68. #define nRF24_MASK_RETR_ARD (uint8_t)0xF0 // Mask for ARD[7:4] bits in SETUP_RETR register
  69. #define nRF24_MASK_RETR_ARC (uint8_t)0x0F // Mask for ARC[3:0] bits in SETUP_RETR register
  70. #define nRF24_MASK_RXFIFO (uint8_t)0x03 // Mask for RX FIFO status bits [1:0] in FIFO_STATUS register
  71. #define nRF24_MASK_TXFIFO (uint8_t)0x30 // Mask for TX FIFO status bits [5:4] in FIFO_STATUS register
  72. #define nRF24_MASK_PLOS_CNT (uint8_t)0xF0 // Mask for PLOS_CNT[7:4] bits in OBSERVE_TX register
  73. #define nRF24_MASK_ARC_CNT (uint8_t)0x0F // Mask for ARC_CNT[3:0] bits in OBSERVE_TX register
  74. // POVODNE z gitlabu
  75. /**
  76. * @brief Interrupt structure
  77. */
  78. typedef union _TM_NRF24L01_IRQ_t {
  79. struct {
  80. uint8_t reserved0:4;
  81. uint8_t MaxRT:1; /*!< Set to 1 if MAX retransmissions flag is set */
  82. uint8_t DataSent:1; /*!< Set to 1 if last transmission is OK */
  83. uint8_t DataReady:1; /*!< Set to 1 if data are ready to be read */
  84. uint8_t reserved1:1;
  85. } F;
  86. uint8_t Status; /*!< NRF status register value */
  87. } NRF_IRQ_t;
  88. /**
  89. * @brief Transmission status enumeration
  90. */
  91. typedef enum _TM_NRF24L01_Transmit_Status_t {
  92. TM_NRF24L01_Transmit_Status_Lost = 0x00, /*!< Message is lost, reached maximum number of retransmissions */
  93. TM_NRF24L01_Transmit_Status_Ok = 0x01, /*!< Message sent successfully */
  94. TM_NRF24L01_Transmit_Status_Sending = 0xFF /*!< Message is still sending */
  95. } Transmit_Status_t;
  96. /**
  97. * @brief Data rate enumeration
  98. */
  99. typedef enum _TM_NRF24L01_DataRate_t {
  100. TM_NRF24L01_DataRate_2M = 0x00, /*!< Data rate set to 2Mbps */
  101. TM_NRF24L01_DataRate_1M, /*!< Data rate set to 1Mbps */
  102. TM_NRF24L01_DataRate_250k /*!< Data rate set to 250kbps */
  103. } NRF_DataRate_t;
  104. /**
  105. * @brief Output power enumeration
  106. */
  107. typedef enum _TM_NRF24L01_OutputPower_t {
  108. TM_NRF24L01_OutputPower_M18dBm = 0x00,/*!< Output power set to -18dBm */
  109. TM_NRF24L01_OutputPower_M12dBm, /*!< Output power set to -12dBm */
  110. TM_NRF24L01_OutputPower_M6dBm, /*!< Output power set to -6dBm */
  111. TM_NRF24L01_OutputPower_0dBm /*!< Output power set to 0dBm */
  112. } NRF_OutputPower_t;
  113. typedef struct {
  114. uint8_t PayloadSize; //Payload size
  115. uint8_t Channel; //Channel selected
  116. NRF_OutputPower_t OutPwr; //Output power
  117. NRF_DataRate_t DataRate; //Data rate
  118. } NRF24L01_Conig_t;
  119. #endif /* _NRF_24L01_DEINES_H_ */