/******************************以下finsh中测试函数*****************************/ static void rt_rf_thread_entry(void* parameter) { rt_uint8_t buf[TX_ADR_WIDTH] = {0x00}; NRF24L01_Init(); if(NRF24L01_Check()==RT_EOK) { rt_kprintf("\r\n RF1 模块初始化成功!\r\n"); } else { rt_kprintf("\r\n RF1 模块不存在!\r\n"); return; } RX_Mode(); while (1) { if(NRF24L01_RxPacket(buf) == RT_EOK) { rt_kprintf("\r\n RF1 接收到数据:\r\n"); { rt_kprintf((char const*)buf); } } rt_thread_delay(RT_TICK_PER_SECOND/100); } }
int main(void) { u8 R='b'; delay_init(72); //延时函数初始化 usart1_init(); //串口初始化 NRF24L01_Init(); //初始化NRF24L01 LED(); while(NRF24L01_Check()); //检查NRF24L01是否在位. while(1) { NRF24L01_TX_Mode(); if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE)) { R =USART_ReceiveData(USART1); USART_ClearFlag(USART1, USART_FLAG_TC); USART_SendData(USART1, USART_ReceiveData(USART1)); USART_ClearFlag(USART1, USART_FLAG_RXNE); } NRF24L01_TxPacket(&R); if(R=='a') GPIO_ResetBits(GPIOE, GPIO_Pin_5); //PE=0,LED亮 if(R=='b') GPIO_SetBits(GPIOE, GPIO_Pin_5); //PE=1,LED灭 } }
//设置24L01的模式,TX/RX //返回值:2,发送模式 // 1,接收模式 u8 Wireless_Mode_Set(void) { u8 key,t=0; LCD_Clear(LGRAY); NRF24L01_Init(); //初始化NRF24L01 BACK_COLOR=LGRAY;//设置字体为蓝色 POINT_COLOR=BLUE;//设置字体为蓝色 while(NRF24L01_Check())//检测不到24L01 { POINT_COLOR=RED;//设置字体为红色 Show_Str(60,130,"24L01检测失败",16,0); delay_ms(500); Show_Str(60,130,"请检查 ",16,0); delay_ms(500); LED0=!LED0;//DS0闪烁 t++; if(t>5)return 0;//失败了 } LCD_Fill(60,130,240,160,LGRAY);//清除显示 Load_Gui_Show("","","返回");//加载界面 LCD_Fill(0,0,240,296,LGRAY);//填充灰色 GUI_Draw_Button(40,60,160,40,"设置为发送模式",BLACK); GUI_Draw_Button(40,140,160,40,"设置为接收模式",BLACK); while(1)//等待模式选择 { key=AI_Read_TP(20);//得到触点的状态 if(key)//触摸屏被按下 { Pen_Point.Key_Reg|=0x80;//标记按下了按键 }else if(Pen_Point.Key_Reg&0X80)//按键松开了 { if(Pen_Point.Key_Reg&0x03)//不论点动还是滑动,都可以触发 { if(Is_In_Area(203,300,32,16))//返回按钮按下了 { Pen_Point.Key_Reg=0;//清除笔状态 return 0;//直接退出 } if(Is_In_Area(40,60,160,40))//发送模式 { Pen_Point.Key_Reg=0;//清除笔状态 return 2; } if(Is_In_Area(40,140,160,40))//接收模式 { Pen_Point.Key_Reg=0;//清除笔状态 return 1;//直接退出 } } Pen_Point.Key_Reg=0;//清除笔状态 }else delay_ms(1); t++; if(t==200) { LED0=!LED0; t=0; } } }
void Sensor_Init(void) { Init_State.MPU6050_State = InitMPU6050(); Init_State.NRF2401_State = NRF24L01_Check(); NRF24L01_Mode(1); MS5611_init(); }
void wpan_init(NRF24L01_CH_TypeDef *init_ch) { NRF24L01_Init(); while(NRF24L01_Check()); memcpy(&mych, init_ch, sizeof(NRF24L01_CH_TypeDef)); CH_USE(&mych); RX_Mode(&ch); }
void NRF24L01_init(uchar interrupt,uchar check) { nrf24l01_init_pins(); if(check!=0) while(NRF24L01_Check()); // 必须检测到设备才能继续下去 NRF24L01_ConfigReg(); NRF24L01_ConfigMode(MODERX); if(interrupt!=0) { nrf24l01_int_en(); } }
int main(void) { int dianya_fly = 0; SysTick_Init(); Tim3_Init(500); Nvic_Init(); LED_Init(); ADC1_Init(); USART1_Config(115200); KEY_Init(); NRF24L01_Init(); while (NRF24L01_Check()) //检查NRF24L01是否在位.要放在设置TX_MODE之前,否则设置的发送地址会变成check中的0XA5 ,将与原接收地址对不上 { LED2_ON; LED1_OFF; printf("no"); } LED1_ON; LED2_OFF; //TX mode //NRF24L01_TX_Mode(); //NRF24L01_Mode_Config(2); //RX mode NRF24L01_Mode_Config(3); while (1) { key = KEY_scan(); if (NRF24L01_RxPacket(tmp_buf) == 0) { NRF24L01_TxPacket_AP(rc_buf); LED1_ON; if(tmp_buf[0]==0x88 && tmp_buf[1]==0xAE && tmp_buf[2]==0x1C) { dianya_fly = tmp_buf[17]<<8|tmp_buf[18]; if(dianya_fly<36 && dianya_fly>20) { LED2_ON; } } send_wave(32,tmp_buf); } else { LED1_OFF; } } }
int main(void) { uint32_t counter; NRF2401_InitTypeDef NRF2401_InitStruct1; SystemClockSetup(ClockSource_EX50M,CoreClock_100M); DelayInit(); LED_Init(LED_PinLookup_CHKATOM, kNumOfLED); UART_DebugPortInit(UART4_RX_C14_TX_C15, 115200); DisplayCPUInfo(); //配置2401引脚 NRF2401_InitStruct1.CE_GPIO_Instance = PTA_BASE; //CE NRF2401_InitStruct1.CE_GPIO_Pin = GPIO_Pin_13; NRF2401_InitStruct1.CS_GPIO_Instance = PTA_BASE; //CS NRF2401_InitStruct1.CS_GPIO_Pin = GPIO_Pin_14; NRF2401_InitStruct1.IRQ_GPIO_Instance = PTA_BASE; //IRQ NRF2401_InitStruct1.IRQ_GPIO_Pin = GPIO_Pin_12; NRF2401_InitStruct1.DATA_SPI_CSMap = SPI0_PCS0_PA14; //SPI NRF2401_InitStruct1.DATA_SPI_DataMap = SPI0_SCK_PA15_SOUT_PA16_SIN_PA17; NRF2401_Init(&NRF2401_InitStruct1); if(NRF24L01_Check() != NRF_OK) { UART_printf("NRF2401 init failed\r\n"); return 1; } //先设置为接收模式 NRF2401_SetRXMode(); while(1) { if(counter > 20000) { NRF2401_SetTXMode(); //设置为发送模式 if(NRF2401_SendData("NRF2401 Test CHK60EVB!") == TX_OK) { UART_printf("Send Succ.\r\n"); } else { UART_printf("Send Failed\r\n"); } NRF2401_SetRXMode(); //设置为接收模式 counter = 0; } counter++; if(NRF2401_RecData(NRF2401RXBuffer) == NRF_OK) //接收到了数据 { UART_printf("DataRec:%s\r\n",NRF2401RXBuffer); //打印数据 } } }
void System_init() { delay_init(); //延时函数初始化 uart_init(9600); dc_moter_init(); LED_Init(); UART3_Init(115200); NRF24L01_Init(); //初始化NRF24L01 while(NRF24L01_Check()) //检查NRF24L01是否在位. { delay_ms(200); printf("nrf error\n"); } NRF24L01_RX_Mode(); }
int main() { init(); //检测nrf24l01模块连接状况 if(NRF24L01_Check())//检测正常 { LCD1602_BL_ON() delay_ms(100); LCD1602_BL_OFF(); delay_ms(100); LCD1602_BL_ON() delay_ms(100); LCD1602_BL_OFF(); delay_ms(100); delay_ms(500); } else //未检测到nrf24l01模块 { LCD1602_BL_ON() delay_ms(100); LCD1602_BL_OFF(); delay_ms(100); LCD1602_BL_ON() delay_ms(100); LCD1602_BL_OFF(); delay_ms(100); LCD1602_BL_ON() delay_ms(100); LCD1602_BL_OFF(); delay_ms(100); delay_ms(500); } NRF24L01_RX_Mode(); GPIO_SetBits(GPIOB,GPIO_Pin_1); while(1) { if(EXTI_flag) { EXTI_flag=0; Sensor_Status_Dis(); } } }
//初始化24L01的IO口 void NRF24L01_Init(uint8_t mode) { gpio_out_pp_up_init(GPIOB, GPIO_Pin_7); //NRF24L01_CE初始化 spi_config(); //初始化SPI1 exti_config(GPIOB, 5); NRF24L01_CE=0; //使能24L01 NRF24L01_CS=1; //SPI片选取消 while(NRF24L01_Check()){ printf("not found NRF24L01\r\n"); delay_ms(500); } printf("NRF24L01 init ok\r\n"); if(mode == NRF_RX_MODE){ nrf_state = RX_OK; NRF24L01_RX_Mode(); } else{ nrf_state = TX_OK; NRF24L01_TX_Mode(); } }
int main (void) { uint8_t ret = 0x23; u32IAP_ReadUID(uid); sn = uid[0] + uid[1] +uid[2] +uid[3]; osKernelInitialize (); // initialize CMSIS-RTOS // initialize peripherals here UARTInit(9600); // Initial, then create thread call back. tidUART = osThreadCreate(osThread(UARTCallback), NULL); printf("UART initial, UID:%ull\r\n", sn); if(sn == (2871327760ll)) printf("UID matched:%ull\r\n", sn); LEDInit(); // Initial, then create thread call back. tidLED = osThreadCreate (osThread(LEDCallback), NULL); printf("LED initial\r\n"); NRF24L01_Init(); printf("NRF24L01_Init()\r\n"); ret = NRF24L01_Check(); printf("NRF24L01_Check():%d\r\n", ret); //txbuf[0]= 0x11; //NRF24L01_TxPacket(txbuf); TIM32B1_Square(1, BIT1); //CLKOUT_ENABLE(CLK_SRC_MAIN, 100); //If it's too fast to watch on OSC, divided it to 100. //TIM32B0_init(); osKernelStart();// start thread execution printf("End if main()\r\n"); while(1); }
int main(void) { u16 sta , i=0; int t = 200; delay_init(); //延时函数初始化 LED_Init(); LED0 = 0;delay_ms(200); LED0 = 1; LED1 = 0;delay_ms(200); LED1 = 1; LED2 = 0;delay_ms(200); LED2 = 1; LED3 = 0;delay_ms(200); LED3 = 1; NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 uart_init(9600); //串口初始化为9600 EXTIX_Init( ); NRF24L01_Init(); //初始化NRF24L01 NRF24L01_RX_Mode(); while(NRF24L01_Check() == 1)//检查NRF24L01是否在位. { LED3=!LED3; printf("NRF ERROR!!\r\n"); delay_ms(100 ); } printf("NRF okk!!\r\n"); sta=NRF24L01_Read_Reg(STATUS); //读取状态寄存器的值 NRF24L01_Write_Reg(WRITE_REG_NRF+STATUS,sta); //清除TX_DS或MAX_RT中断标志 NRF24L01_Write_Reg(FLUSH_RX,0xff);//清除RX FIFO寄存器 TIM2_PWM_Init(999,9); //PWM OUT TIM3_Int_Init(0xffff,71); //做计时器用 IIC_Init(); InitMPU6050(); Init_HMC5883(); suanfa_GetOrigin(); //初始欧拉角 TIM4_Int_Init(49,7199); //PID调速中断 放在最后初始化,防止打断角度校准 LOCK = 1; UN_LOCK = 0; while(1){ if(LOCK) { lock(); LED0 = 0;delay_ms(500);LED0 = 1; Power = 0; Target_x = 0; Target_y = 0; } if(UN_LOCK) { suanfa(); printf("%.2lf %.2lf %.2lf\r\n",EA.Roll,EA.Pitch,EA.Yaw); // TIM_Cmd(TIM4, ENABLE); Data_Receive_Anl(); } // printf("--p\r\n"); } }
//初始化 char NRF24L01_INIT(void) { SPI1_INIT(); return NRF24L01_Check(); }
int main(void) { //定义全局变量 u8 key,mode; u16 t=0; u8 tmp_buf[33]; //函数初始化 delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级 uart_init(115200); //串口初始化为115200 usmart_dev.init(72); //初始化USMART LED_Init(); //初始化与LED连接的硬件接口 KEY_Init(); //初始化按键 NRF24L01_Init(); //初始化NRF24L01 W25QXX_Init(); //初始化W25Q128 my_mem_init(SRAMIN); //初始化内部内存池 LCD_Init(); //初始化LCD exfuns_init(); //为fatfs相关变量申请内存 f_mount(fs[0],"0:",1); //挂载SD卡 f_mount(fs[1],"1:",1); //挂载FLASH. //检查中文字库 while(font_init()) //检查字库 { LCD_Clear(WHITE); //清屏 POINT_COLOR=RED; //设置字体为红色 LCD_ShowString(30,50,200,16,16,"WarShip STM32"); while(SD_Init()) //检测SD卡 { LCD_ShowString(30,70,200,16,16,"SD Card Failed!"); delay_ms(200); LCD_Fill(30,70,200+30,70+16,WHITE); delay_ms(200); } LCD_ShowString(30,70,200,16,16,"SD Card OK"); LCD_ShowString(30,90,200,16,16,"Font Updating..."); key=update_font(20,110,16,"0:");//更新字库 while(key)//更新失败 { LCD_ShowString(30,110,200,16,16,"Font Update Failed!"); delay_ms(200); LCD_Fill(20,110,200+20,110+16,WHITE); delay_ms(200); } LCD_ShowString(30,110,200,16,16,"Font Update Success! "); delay_ms(1500); LCD_Clear(WHITE);//清屏 } //检查无线通信 while(NRF24L01_Check()) { LCD_ShowString(30,130,200,16,16,"NRF24L01 Error"); delay_ms(200); LCD_Fill(30,130,239,130+16,WHITE); delay_ms(200); } //初始化界面 POINT_COLOR = MAGENTA; Show_Str(20,20,200,24,"第十一届全国电子",24,0); Show_Str(80,50,200,24,"设计大赛",24,0); while(1) { //按键扫描 key=KEY_Scan(0); if(key!=0) { LCD_Clear(WHITE); Show_Str(60,20,200,24,"旋转倒立摆",24,0); Show_Str(20,50,200,24,"任务1:",24,0); Show_Str(20,80,200,24,"任务2:",24,0); Show_Str(20,110,200,24,"任务3:",24,0); Show_Str(20,140,200,24,"任务4:",24,0); Show_Str(20,170,200,24,"任务5:",24,0); Show_Str(20,200,200,24,"任务6:",24,0); while(1) { key=KEY_Scan(0); //WKUP_PRES 功能:返回主界面 if(key==WKUP_PRES) { MUSE_TASK(); } //KEY1_PRES 功能:执行任务1 else if(key==KEY0_PRES) { KEY0_TASK(); } // //KEY1_PRES 功能:执行任务1 // else if(key==KEY1_PRES) // { // mode=1; // break; // } // //KEY2_PRES 功能:执行任务2 // else if(key==KEY2_PRES) // { // mode=1; // break; // } // //KEY3_PRES 功能:执行任务3 // else if(key==KEY3_PRES) // { // mode=1; // break; // } // //KEY4_PRES 功能:执行任务4 // else if(key==KEY4_PRES) // { // mode=1; // break; // } // //KEY5_PRES 功能:执行任务5 // else if(key==KEY5_PRES) // { // mode=1; // break; // } // //KEY6_PRES 功能:执行任务6 // else if(key==KEY6_PRES) // { // mode=1; // break; // } // //KEY7_PRES 功能:执行任务7 // else if(key==KEY7_PRES) // { // mode=1; // break; // } // //KEY8_PRES 功能:执行任务8 // else if(key==KEY8_PRES) // { // mode=1; // break; // } // } } t++; if(t==100) //LCD_ShowString(10,150,230,16,16,"KEY0:RX_Mode KEY1:TX_Mode"); //闪烁显示提示信息 Show_Str(10,150,230,24,"按任意键进入主菜单",24,0); if(t==200) { LCD_Fill(10,150,240,150+50,WHITE); t=0; } delay_ms(5); } }
void NRF24L01_Init(void) { SPI1_Init(); NRF24L01_Check(); SetRxMode(); }
int main(void) { float q[4]; u8 tmp_buf[32] = {0}; float test = 0; static u8 led_on = 0; RCC_HSE_Configuration(); SysTick_Init(); NVIC_Configuration(); USART1_Config(115200); LED_Init(); LED3_Flash(2,100); ANO_TC_I2C2_INIT(0xA6, 400000, 1, 1, 3, 3); //硬实时 Tim3_Init(500);//0.005s TIM2_Init(999, 0); Mpu6050init(); MOT_GPIO_init(); MOT_PWM_init(); Set_PWM(0, 0, 0, 0); NRF24L01_Init(); while (NRF24L01_Check()) { LED2_Flash(2,500000); } //TX mode NRF24L01_Mode_Config(4); PID_Init(); ADC1_Init(); while (1) { if (getMpu6050Data == 1) { //0.01ms? Read_Mpu6050(); Mpu6050_Analyze(); getMpu6050Data = 0; } if (calculateAngle == 1)//2ms period { //0.2ms T //LED2_ON; //100us IMU_Quateration_Update((float)fGYRO_X , (float)fGYRO_Y , (float)fGYRO_Z , (float)fACCEL_X, (float)fACCEL_Y, (float)fACCEL_Z,ypr); //LED2_OFF; calculateAngle = 0; } if (sendData == 1)//2ms period { if(led_on) { LED2_OFF; led_on = 0; } else { LED2_ON; led_on = 1; } if (NRF24L01_RxPacket(tmp_buf) == 0) { //10us Rc_Data_Analyze(tmp_buf,&Rc_Data); } //if wait for the IRQ it need 9ms //if not wait for IRQ it runtime need 100us*1.2=0.12ms sendSenser((int16_t)fACCEL_X, (int16_t)fACCEL_Y, (int16_t)fACCEL_Z, (int16_t)fGYRO_X, (int16_t) fGYRO_Y, (int16_t)fGYRO_Z, (int16_t)(ypr[0] * 100), (signed short int)(ypr[1] * 100)); send_wave(32); //0.14ms run time sendPwmVoltage(&Rc_Data,(uint16_t)(motor0 / 1000.0 * 100), (uint16_t)(motor1 / 1000.0 * 100), (uint16_t)(motor2 / 1000.0 * 100), (uint16_t)(motor3 / 1000.0 * 100));//0.00003974s send_wave(32); sendData = 0; } //moveFilterAccData(fACCEL_X, fACCEL_Y, fACCEL_Z, AngleOut); if (!strcmp(Rc_Data.status, "stop")) { Set_PWM(0, 0, 0, 0); } else if (!strcmp(Rc_Data.status, "start")) { //LED2_ON; expRoll = Rc_Data.roll; expPitch = Rc_Data.pitch; expThro = Rc_Data.throttle; surRoll = ypr[2]; surPitch = ypr[1]; PID_Set(); Set_PWM(motor0, motor1, motor2, motor3); //LED2_OFF; } ////Uart1_Send_PID(320,PID_ROLL.KI,PID_ROLL.KD,1,0,0); ////send_wave(32); // if (STA == 1) // { // receive_Data(); // STA = 0; // p = 0; // } } }