void demo() { uint8_t cc[TX_PAYLOAD_SIZE+1] = {0}; unsigned char address[5]={110,110,8,110,110}; cc[0] = 25; cc[1] = 1; address[2] = cc[0]; nrf24l01_set_tx_addr(address , 5); nrf24l01_write_tx_payload(cc + 1 , TX_PAYLOAD_SIZE , true); while(!nrf24l01_irq_pin_active()); nrf24l01_irq_clear_all(); nrf24l01_write_tx_payload(cc + 1 , 10 , true); while(!nrf24l01_irq_pin_active()); nrf24l01_irq_clear_all(); if(checkFirstoo<2) checkFirstoo++; }
// Initialize Pin and SPI like specified into config file void nrf24l01_init() { // Init SPI pins ioport_set_pin_dir(CONF_NRF24L01_SS_PIN, IOPORT_DIR_INPUT); ioport_set_pin_mode(CONF_NRF24L01_SS_PIN, IOPORT_MODE_PULLUP); ioport_set_pin_dir(CONF_NRF24L01_MOSI_PIN, IOPORT_DIR_OUTPUT); ioport_set_pin_mode(CONF_NRF24L01_MOSI_PIN, IOPORT_MODE_PULLUP); ioport_set_pin_high(CONF_NRF24L01_MOSI_PIN); ioport_set_pin_dir(CONF_NRF24L01_MISO_PIN, IOPORT_DIR_INPUT); ioport_set_pin_dir(CONF_NRF24L01_SCK_PIN, IOPORT_DIR_OUTPUT); ioport_set_pin_high(CONF_NRF24L01_SCK_PIN); // Init nrf24l01 pins ioport_set_pin_dir(CONF_NRF24L01_CE_PIN, IOPORT_DIR_OUTPUT); ioport_set_pin_dir(CONF_NRF24L01_CSn_PIN, IOPORT_DIR_OUTPUT); ioport_set_pin_dir(CONF_NRF24L01_IRQ_PIN, IOPORT_DIR_INPUT); ioport_set_pin_low(CONF_NRF24L01_CE_PIN); spi_deselect_device(&CONF_NRF24L01_SPI, &nrf24l01_spi_device_conf); spi_master_init(&CONF_NRF24L01_SPI); spi_master_setup_device(&CONF_NRF24L01_SPI, &nrf24l01_spi_device_conf, SPI_MODE_0, CONF_NRF24L01_CLOCK_SPEED, 0); spi_enable(&CONF_NRF24L01_SPI); // Wait nrf24l01 power on reset delay_ms(Tpor); nrf24l01_power_off(); // Reset registers to default state nrf24l01_write_register(NRF24L01_CONFIG_REG, NRF24L01_CONFIG_REG_DEF); nrf24l01_write_register(NRF24L01_STATUS_REG, NRF24L01_STATUS_REG_DEF); // TODO: reset all registers // Config parameters sets in CONF_NRF24L01 nrf24l01_set_power_amplifier(CONF_NRF24L01_PA); nrf24l01_set_data_rate(CONF_NRF24L01_DATA_RATE); nrf24l01_set_crc(CONF_NRF24L01_CRC); nrf24l01_set_addr_len(CONF_NRF24L01_ADDR_LEN); uint8_t nrf24l01_rx_addr[5] = { CONF_NRF24L01_RX_ADDR }; uint8_t nrf24l01_tx_addr[5] = { CONF_NRF24L01_TX_ADDR }; nrf24l01_set_rx_addr(nrf24l01_rx_addr); nrf24l01_set_tx_addr(nrf24l01_tx_addr); nrf24l01_write_register(NRF24L01_RF_CH_REG, CONF_NRF24L01_RF_CHANNEL); nrf24l01_write_register(NRF24L01_RX_PW_P0_REG, CONF_NRF24L01_PAYLOAD); nrf24l01_write_register(NRF24L01_RX_PW_P1_REG, CONF_NRF24L01_PAYLOAD); // Power-up (Power Down -> Standby-I) uint8_t configReg = nrf24l01_read_register(NRF24L01_CONFIG_REG); nrf24l01_write_register(NRF24L01_CONFIG_REG, configReg | NRF24L01_PWR_UP_BM); delay_us(Tpd2stby); }
//Arguments except opt_rx_standby_mode fill the actual register they are named // after. Registers that do not need to be initialized are not included here. //The argument opt_rx_active_mode is only used if the user is initializing the // 24L01 as a receiver. If the argument is false, the receiver will remain in // standby mode and not monitor for packets. If the argument is true, the CE // pin will be set and the 24L01 will monitor for packets. In TX mode, the value // of this argument is insignificant. //If the user wants to leave any 1-byte register in its default state, simply put // as that register's argument nrf24l01_<reg>_DEFAULT_VAL, where <reg> is the register // name. //If the user wants to leave any of the 5-byte registers RX_ADDR_P0, RX_ADDR_P1, or // TX_ADDR in its default state, simply put NULL in the argument for that address value. void nrf24l01_initialize(unsigned char config, unsigned char opt_rx_active_mode, unsigned char en_aa, unsigned char en_rxaddr, unsigned char setup_aw, unsigned char setup_retr, unsigned char rf_ch, unsigned char rf_setup, unsigned char * rx_addr_p0, unsigned char * rx_addr_p1, unsigned char rx_addr_p2, unsigned char rx_addr_p3, unsigned char rx_addr_p4, unsigned char rx_addr_p5, unsigned char * tx_addr, unsigned char rx_pw_p0, unsigned char rx_pw_p1, unsigned char rx_pw_p2, unsigned char rx_pw_p3, unsigned char rx_pw_p4, unsigned char rx_pw_p5) { unsigned char data[5]; data[0] = en_aa; nrf24l01_write_register(nrf24l01_EN_AA, data, 1); data[0] = en_rxaddr; nrf24l01_write_register(nrf24l01_EN_RXADDR, data, 1); data[0] = setup_aw; nrf24l01_write_register(nrf24l01_SETUP_AW, data, 1); data[0] = setup_retr; nrf24l01_write_register(nrf24l01_SETUP_RETR, data, 1); data[0] = rf_ch; nrf24l01_write_register(nrf24l01_RF_CH, data, 1); data[0] = rf_setup; nrf24l01_write_register(nrf24l01_RF_SETUP, data, 1); if(rx_addr_p0 != NULL) nrf24l01_set_rx_addr(rx_addr_p0, 5, 0); else { data[0] = nrf24l01_RX_ADDR_P0_B0_DEFAULT_VAL; data[1] = nrf24l01_RX_ADDR_P0_B1_DEFAULT_VAL; data[2] = nrf24l01_RX_ADDR_P0_B2_DEFAULT_VAL; data[3] = nrf24l01_RX_ADDR_P0_B3_DEFAULT_VAL; data[4] = nrf24l01_RX_ADDR_P0_B4_DEFAULT_VAL; nrf24l01_set_rx_addr(data, 5, 0); } if(rx_addr_p1 != NULL) nrf24l01_set_rx_addr(rx_addr_p1, 5, 1); else { data[0] = nrf24l01_RX_ADDR_P1_B0_DEFAULT_VAL; data[1] = nrf24l01_RX_ADDR_P1_B1_DEFAULT_VAL; data[2] = nrf24l01_RX_ADDR_P1_B2_DEFAULT_VAL; data[3] = nrf24l01_RX_ADDR_P1_B3_DEFAULT_VAL; data[4] = nrf24l01_RX_ADDR_P1_B4_DEFAULT_VAL; nrf24l01_set_rx_addr(data, 5, 1); } data[0] = rx_addr_p2; nrf24l01_set_rx_addr(data, 1, 2); data[0] = rx_addr_p3; nrf24l01_set_rx_addr(data, 1, 3); data[0] = rx_addr_p4; nrf24l01_set_rx_addr(data, 1, 4); data[0] = rx_addr_p5; nrf24l01_set_rx_addr(data, 1, 5); if(tx_addr != NULL) nrf24l01_set_tx_addr(tx_addr, 5); else { data[0] = nrf24l01_TX_ADDR_B0_DEFAULT_VAL; data[1] = nrf24l01_TX_ADDR_B1_DEFAULT_VAL; data[2] = nrf24l01_TX_ADDR_B2_DEFAULT_VAL; data[3] = nrf24l01_TX_ADDR_B3_DEFAULT_VAL; data[4] = nrf24l01_TX_ADDR_B4_DEFAULT_VAL; nrf24l01_set_tx_addr(data, 5); } data[0] = rx_pw_p0; nrf24l01_write_register(nrf24l01_RX_PW_P0, data, 1); data[0] = rx_pw_p1; nrf24l01_write_register(nrf24l01_RX_PW_P1, data, 1); data[0] = rx_pw_p2; nrf24l01_write_register(nrf24l01_RX_PW_P2, data, 1); data[0] = rx_pw_p3; nrf24l01_write_register(nrf24l01_RX_PW_P3, data, 1); data[0] = rx_pw_p4; nrf24l01_write_register(nrf24l01_RX_PW_P4, data, 1); data[0] = rx_pw_p5; nrf24l01_write_register(nrf24l01_RX_PW_P5, data, 1); if((config & nrf24l01_CONFIG_PWR_UP) != 0) nrf24l01_power_up_param(opt_rx_active_mode, config); else nrf24l01_power_down_param(config); }
int main(void) { int i; unsigned char add[5]={110,110,8,110,110}; /*!< At this stage the microcontroller clock setting is already configured to 120 MHz, this is done through SystemInit() function which is called from startup file (startup_stm32f2xx.s) before to branch to application main. To reconfigure the default setting of SystemInit() function, refer to system_stm32f2xx.c file */ #ifdef SERIAL_DEBUG DebugComPort_Init(); #endif initLED(); init_Timer(); //while(1); /*Initialize LCD and Leds */ //LCD_LED_Init(); delay_ms(500); for(i=0;i<100;i++) { setNumber(i); delay_ms(10); } beep(40); offSegment(3); delay_ms(100); setNumber(0); delay_ms(100); beep(40); offSegment(3); delay_ms(100); setNumber(0); delay_ms(100); beep(40); //USART2_Init(); //USART3_Init(); init_NRF1_IO(); init_NRF2_IO(); SPI1_Config(); SPI3_Config(); SPI_Cmd(SPI1, ENABLE); SPI_Cmd(SPI3, ENABLE); nrf24l01_initialize_debug(false, TX_PAYLOAD_SIZE, false); nrf24l01_clear_flush(); add[2]=8; nrf24l01_set_tx_addr(add , 5); add[2]=30; nrf24l01_set_rx_addr(add,5,0); nrf24l01_set_rf_ch(tx_channel); nrf24l02_initialize_debug(false, RX_PAYLOAD_SIZE, false); nrf24l02_clear_flush(); add[2]=8; nrf24l02_set_tx_addr(add , 5); add[2]=30; nrf24l02_set_rx_addr(add,5,0); nrf24l02_set_rf_ch(rx_channel); nrf24l02_set_as_rx(true); /* configure ethernet */ ETH_BSP_Config(); /* Initilaize the LwIP stack */ LwIP_Init(); /* UDP echoserver */ udp_echoserver_init(); /* Infinite loop */ while (1) { /* check if any packet received */ if (ETH_CheckFrameReceived()) { /* process received ethernet packet */ LwIP_Pkt_Handle(); } /* handle periodic timers for LwIP */ LwIP_Periodic_Handle(LocalTime); process_incoming_rf(); if(firstPacketRecieved==0) { demo(); setNumber(22); } } }