int main(void) { uint32_t i; uint32_t len; DelayInit(); GPIO_QuickInit(HW_GPIOE, 6, kGPIO_Mode_OPP); UART_QuickInit(UART0_RX_PD06_TX_PD07, 115200); UART_CallbackRxInstall(HW_UART0, UART_ISR); UART_ITDMAConfig(HW_UART0, kUART_IT_Rx, true); printf("NRF24L01 test\r\n"); /* 初始化 NRF2401模块 的SPI接口及片选 */ PORT_PinMuxConfig(HW_GPIOE, 1, kPinAlt2); PORT_PinMuxConfig(HW_GPIOE, 2, kPinAlt2); PORT_PinMuxConfig(HW_GPIOE, 3, kPinAlt2); PORT_PinMuxConfig(HW_GPIOE, 4, kPinAlt2); /* 初始化2401所需的CE引脚 */ GPIO_QuickInit(HW_GPIOE, 0 , kGPIO_Mode_OPP); /* 初始化2401模块*/ SPI_QuickInit(SPI1_SCK_PE02_SOUT_PE01_SIN_PE03, kSPI_CPOL0_CPHA0, 1*1000*1000); nrf24l01_init(HW_SPI1, 0); //检测是否存在无线设备,并配置接收和发送地址 if(nrf24l01_probe()) { printf("no nrf24l01 device found!\r\n"); } /* 进入Rx模式 */ nrf24l01_set_rx_mode(); while(1) { /* 如果收到串口数据则发送 */ if(gpRevChar != NULL) { nrf24l01_set_tx_mode(); nrf24l01_write_packet(gpRevChar, 1); nrf24l01_set_rx_mode(); gpRevChar = NULL; } /* 如果收到2401 的数据 则传输到串口 */ if(!nrf24l01_read_packet(NRF2401RXBuffer, &len)) { i = 0; while(len--) { UART_WriteByte(HW_UART0, NRF2401RXBuffer[i++]); } } } }
int main() { /* Semaphore creation */ vSemaphoreCreateBinary(ahrs_task_semaphore); vSemaphoreCreateBinary(flight_control_task_semaphore); /* Peripheral initialization */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); led_init(); debug_port_init(); usart3_init(57600); i2c1_init(); spi1_init(); timer1_init(); pwm_timer4_init(); pwm_timer5_init(); pwm_capture_timer2_init(); pwm_capture_timer3_init(); pwm_capture_timer8_init(); //Make sure all the peripheral is finished the initialization delay_ms(5); /* Device initialization */ while(mpu6050_init()); while(hmc5983_init()); nrf24l01_init(); motor_init(); /* Task creation */ //Attitude and Heading Reference System (AHRS) task xTaskCreate(ahrs_task, (portCHAR *)"AHRS task", 4096, NULL, tskIDLE_PRIORITY + 3, NULL); xTaskCreate(flight_control_task, (portCHAR *)"Flight control task", 4096, NULL, tskIDLE_PRIORITY + 2, NULL); #ifndef DEBUG_PRINT //USART plot task xTaskCreate(usart_plot_task, (portCHAR *)"USART plot task", 2048, NULL, tskIDLE_PRIORITY + 1, NULL); #endif /* Start schedule */ vTaskStartScheduler(); return 0; }
int main(void) { #ifdef DEBUGPRINT uart_init(UART_BAUD_SELECT_DOUBLE_SPEED(57600, F_CPU)); #endif char* node_address = "OWRF1"; node_address[4] += NODENUM; OWInit(5); nrf24l01_init(); nrf24l01_settxaddr((uint8_t*) node_address); nrf24l01_setrxaddr(0, (uint8_t*) node_address); nrf24l01_setrxaddr(1, (uint8_t*) "OWRF0"); sei(); for (;;) { uint8_t pipe; if (nrf24l01_readready(&pipe)) { int len = owrf_read(transfer_buf); if (len != -1) { #ifdef DEBUGPRINT debugPrint("channel=%d command=%X datalen=%d\r\n", transfer_buf[0], transfer_buf[1], transfer_buf[2]); for (int i = 0; i < transfer_buf[2]; i++) { debugPrint(">%02X", transfer_buf[i+3]); } debugPrint("\r\n"); #endif if (transfer_buf[0] == NODENUM) { len = doSlave(transfer_buf + 1) + 3; #ifdef DEBUGPRINT debugPrint("retval=%X datalen=%d\r\n", transfer_buf[1], transfer_buf[2]); for (int i = 0; i < transfer_buf[2]; i++) { debugPrint("<%02X", transfer_buf[i+3]); } debugPrint("\r\n"); #endif _delay_ms(5); owrf_write(transfer_buf, len); } } } } }
void rf24test() { uint8_t test_pipe = 0; byte* payload = "qwerasd1qwerasd2qwerasd3qwerasd4"; byte* rx_pld = "11111111111111111111111111111111"; uint8_t payload_len = strlen(payload); memset(rx_pld, '\0', payload_len); nrf24l01_conf_t writer; nrf24l01_init_config(&writer); writer.ce_port= &PORTD; writer.ce_pin = PD6; writer.ss_port = &PORTC; writer.ss_pin = PC4; writer.pipe_addr_len = 0; usart_write_string_line("Initializing.."); DBG_VALUE("Writer: Init: ", nrf24l01_init(&writer, &DDRD, &DDRC)); DBG_VALUE("Writer: Speed: ", nrf24l01_get_speed(&writer)); DBG_VALUE("Writer: Channel: ", nrf24l01_get_channel(&writer)); DBG_VALUE("Writer: Status: ", nrf24l01_get_status(&writer)); nrf24l01_set_retries(&writer, 4, 2); nrf24l01_set_power_amplifier(&writer, NRF24L01_PA_MAX); nrf24l01_enable_dynamic_payload_on_pipe(&writer, test_pipe, NRF24L01_ENABLE); nrf24l01_print_addresses(&writer); usart_write_string_line("Preparing for write:"); nrf24l01_prepare_for_write_to_addr(&writer, (byte*) "2Node", payload_len,NRF24L01_DISABLE); nrf24l01_print_status(&writer); while(1) { nrf24l01_set_retries(&writer, 1, 1); usart_write_string_line("Writing:"); nrf24l01_write(&writer, payload, payload_len - 5); nrf24l01_print_status(&writer); usart_write_string_line("Ending writing:"); nrf24l01_end_writing_keep_irq(&writer); nrf24l01_print_status(&writer); usart_read_byte(); } }
int main() { struct nrf24l01_driver_t nrf24l01; struct pin_driver_t pin[3]; uint8_t state[32]; sys_start(); nrf24l01_init(&nrf24l01, &spi_device[0], &pin_d10_dev, &pin_d6_dev, &exti_device[1], SERVER_ADDRESS); nrf24l01_start(&nrf24l01); /* Initialize led pins. */ pin_init(&pin[0], &pin_d7_dev, PIN_OUTPUT); pin_init(&pin[1], &pin_d8_dev, PIN_OUTPUT); pin_init(&pin[2], &pin_d9_dev, PIN_OUTPUT); pin_write(&pin[0], 0); pin_write(&pin[1], 0); pin_write(&pin[2], 0); while (1) { /* Read state from client. */ nrf24l01_read(&nrf24l01, state, sizeof(state)); std_printf(FSTR("state = 0x%x\r\n"), (int)state[0]); /* Upadte LED. */ pin_write(&pin[0], (state[0] >> 0) & 0x1); pin_write(&pin[1], (state[0] >> 1) & 0x1); pin_write(&pin[2], (state[0] >> 2) & 0x1); } return (0); }
void sMCIfaceRF_init() { nrf24l01_init(); }
//main here int main(void) { uint8_t i = 0; char *wheel = "|/-\\"; //sending buffer addresses uint8_t sendpipe = 0; uint8_t addrtx0[NRF24L01_ADDRSIZE] = NRF24L01_ADDRP0; #if defined(TX) long *ptr = 0; double qw = 1.0f; double qx = 0.0f; double qy = 0.0f; double qz = 0.0f; double roll = 0.0f; double pitch = 0.0f; double yaw = 0.0f; //nrf24l01 variables uint8_t bufferout[NRF24L01_PAYLOAD]; #elif defined(RX) uint8_t bufferin[NRF24L01_PAYLOAD]; #endif //init uart uart_init(UART_BAUD_SELECT(UART_BAUD_RATE, F_CPU)); mpu6050_init(); nrf24l01_init(); sei(); uart_puts("\r\nUART initialized... \r\n"); _delay_ms(50); uart_puts("nrf24l01+ initialized... \r\n"); //init nrf24l01 _delay_ms(50); #if defined(TX) mpu6050_dmpInitialize(); mpu6050_dmpEnable(); _delay_ms(10); uart_puts("mpu6050 initialized... \r\n"); #endif //init interrupt uart_puts("interrupts enabled... \r\n"); for(i=0; i<100; i++) { uart_putc(wheel[i%4]); _delay_ms(10); uart_putc('\b'); } uart_puts("\r\n"); #if defined(TX) uart_puts("starting as tx...\r\n"); #elif defined(RX) uart_puts("starting as rx...\r\n"); #endif //setup buffer #if defined(TX) for(i=0; i<sizeof(bufferout); i++) bufferout[i] = ' '; #elif defined(RX) for(i=0; i<sizeof(bufferin); i++) bufferin[i] = 0; #endif #if NRF24L01_PRINTENABLE == 1 nrf24l01_printinfo(uart_puts, uart_putc); #endif //main loop nrf24l01_settxaddr(addrtx0); #if defined(TX) for(;;) { //tx char pipebuffer[5]; itoa(sendpipe, pipebuffer, 10); if(mpu6050_getQuaternionWait(&qw, &qx, &qy, &qz)) mpu6050_getRollPitchYaw(qw, qx, qy, qz, &roll, &pitch, &yaw); _delay_ms(10); //quaternion ptr = (long *)(&qw); for (i=0; i<4; i++) *(bufferout+i) = *ptr>>(i*8); ptr = (long *)(&qx); for (i=0; i<4; i++) *(bufferout+i+4) = *ptr>>(i*8); ptr = (long *)(&qy); for (i=0; i<4; i++) *(bufferout+i+8) = *ptr>>(i*8); ptr = (long *)(&qz); for (i=0; i<4; i++) *(bufferout+i+12) = *ptr>>(i*8); // roll pitch yaw ptr = (long *)(&roll); for (i=0; i<4; i++) *(bufferout+i+16) = *ptr>>(i*8); ptr = (long *)(&pitch); for (i=0; i<4; i++) *(bufferout+i+20) = *ptr>>(i*8); ptr = (long *)(&yaw); for (i=0; i<4; i++) *(bufferout+i+24) = *ptr>>(i*8); nrf24l01_write(bufferout); } #elif defined(RX) for(;;) { //rx uint8_t pipe = 0; if(nrf24l01_readready(&pipe)) { //if data is ready //read buffer nrf24l01_read(bufferin); for (i=0; i < 4*7; i++) uart_putc(*(bufferin+i)); uart_putc('\n'); } _delay_ms(10); } #endif }
//main here int main(void) { uint8_t txrxrole = 0; // 1 transmitter 0 receiver uint8_t i = 0; //nrf24l01 variables uint8_t bufferout[NRF24L01_PAYLOAD]; uint8_t bufferin[NRF24L01_PAYLOAD]; #if DEBUGENABLED == 1 //init uart USART_Init(103); #endif //LCD init lcd_init(); lcd_gotoxy1(0); //init nrf24l01 nrf24l01_init(); //init interrupt sei(); txrxrole = ROLERX; ///////////////////////////////////////////////// #if DEBUGENABLED == 1 if(txrxrole == ROLETX) uart_putc('T'); else if(txrxrole == ROLERX) uart_putc('R'); #endif //setup buffer for(i=0; i<sizeof(bufferout); i++) bufferout[i] = i+'a'; for(i=0; i<sizeof(bufferin); i++) bufferin[i] = 0; //sending buffer addresses uint8_t sendpipe = 0; uint8_t addrtx0[NRF24L01_ADDRSIZE] = NRF24L01_ADDRP0; uint8_t addrtx1[NRF24L01_ADDRSIZE] = NRF24L01_ADDRP1; uint8_t addrtx2[NRF24L01_ADDRSIZE] = NRF24L01_ADDRP2; uint8_t addrtx3[NRF24L01_ADDRSIZE] = NRF24L01_ADDRP3; uint8_t addrtx4[NRF24L01_ADDRSIZE] = NRF24L01_ADDRP4; uint8_t addrtx5[NRF24L01_ADDRSIZE] = NRF24L01_ADDRP5; #if DEBUGENABLED == 1 && NRF24L01_PRINTENABLE == 1 nrf24l01_printinfo(uart_puts, uart_putc); #endif //main loop for(;;) { if(txrxrole == ROLETX) {//Tx #if DEBUGENABLED == 1 char pipebuffer[5]; uart_puts("sending data, on pipe "); itoa(sendpipe, pipebuffer, 10); uart_puts(pipebuffer); uart_puts("... "); #endif if(sendpipe == 0){ //set tx address for pipe 0 nrf24l01_settxaddr(addrtx0); } else if(sendpipe == 1) { //set tx address for pipe 1 nrf24l01_settxaddr(addrtx1); } else if(sendpipe == 2) { //set tx address for pipe 2 nrf24l01_settxaddr(addrtx2); } else if(sendpipe == 3) { //set tx address for pipe 3 nrf24l01_settxaddr(addrtx3); } else if(sendpipe == 4) { //set tx address for pipe 4 nrf24l01_settxaddr(addrtx4); } else if(sendpipe == 5) { //set tx address for pipe 5 nrf24l01_settxaddr(addrtx5); } //write buffer uint8_t writeret = nrf24l01_write(bufferout); #if DEBUGENABLED == 1 if(writeret == 1) uart_puts("ok\r\n"); else uart_puts("failed\r\n"); #endif sendpipe++; sendpipe%=6; #if DEBUGENABLED == 0 } #endif #if DEBUGENABLED == 1 _delay_ms(1000); #endif } else if(txrxrole == ROLERX)