/*====================================================================================================*/ int main( void ) { SystemInit(); GPIO_Config(); RS232_Config(); NRF24L01_Config(); #if (NRF_MODE == NRF_MODE_FTLR) NRF24L01_Init(NRF_MODE_FTLR); while(1) { LED_G = !LED_G; NRF_FTLR(); } #endif #if (NRF_MODE == NRF_MODE_FRLT) NRF24L01_Init(NRF_MODE_FRLT); while(1) { LED_R = !LED_R; NRF_FRLT(); } #endif }
void main(void) { char Buf[_Buffer_Size]; SSPInit(); Delay_Init(); LED_DIR_OUT; Led_Blink(); char Address[_Address_Width] = { 0x11, 0x22, 0x33, 0x44, 0x55 }; NRF24L01_Init(_RX_MODE, _CH, _1Mbps, Address, _Address_Width, _Buffer_Size); while (1) { NRF24L01_Receive(Buf); if (Buf[0] == 0x48) { LED_ON; Delay_us(1000); LED_OFF; } } }
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灭 } }
/******************************以下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); } }
//设置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 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 InitializeNRF24L01() { // NRF24L01 goes to RX mode by default; NRF24L01_Init(DEFAULT_CHANNEL, DEFAULT_PAYLOAD_SIZE); NRF24L01_SetRF(NRF24L01_DataRate_2M, NRF24L01_OutputPower_M18dBm); NRF24L01_SetMyAddress(MyAddress); NRF24L01_SetTxAddress(TxAddress); }
void init() { SystemInit(); LCD1602_Init(); NRF24L01_Init();//2.4G无线初始化 Usart_Configuration(); Usart_NVIC_Configuration(); LCD1602_WriteString_At_Pos(0,1," STATUS:Normal "); LCD1602_WriteString_At_Pos(0,2,"LOCK 1:OFF 2:OFF"); delay_s(2); }
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; } } }
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(); }
void IAC_Init(void) { delay_init(72); MCO_INIT(); Nvic_Init(); LED_GPIO_Config(); I2C_INIT(); delay(0XFFF); TIM3_Init(2500); usart1_config(); ADC1_Init(); NRF24L01_Init(); Moto_Init(); LED_SHOW(); FLASH_Unlock(); EE_Init(); }
int main(void) { SystemClock_HSI(9); //系统时钟设置,9倍频,36M LedInit(); //LED 初始化 Adc_Init(); //摇杆AD初始化 NRF24L01_Init(); //无线模块初始化 TX_Mode(); //发送模式 TIM4_Init(); //定时器初始化,定时周期为1ms,1ms发送一次摇杆AD值 KeyInit(); //按键初始化 TxBuf[30]=0xA5; //对应遥控器,该位写0xA5,保证飞机能在开机的时候能收到一个完整的32字节的数据包 GetAD(R_Mode); /*******************************************************/ //以下为遥控解锁段 /*******************************************************/ while((Throttle>5)||(Roll>5))//解锁条件:油门拉到最低,方向打到最左解锁 { GetAD(R_Mode);//得到各路AD值并显示 } TxBuf[28]=0; //对应遥控器,该字节写0,使飞机跳过写参数那一步 TxBuf[27]=0xA5;//解锁飞机 TxBuf[31]=0xA5;//解锁成功,使能飞控 /*******************************************************/ //解锁完成 /*******************************************************/ Led1=1; Led2=1; Led3=1; Led4=1; Led5=0; while(1) { GetAD(R_Mode); //得到各路AD值并显示 if(Key1==0){TxBuf[10]=0xA5;Led1=1; }//按键子程序,用于设置一键操作,如一键翻滚,一键返航等 else {TxBuf[10]=0;Led1=0;} } }
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"); } }
void transmitter(void) { /* My address */ uint8_t MyAddress[] = { 0xE7, 0xE7, 0xE7, 0xE7, 0xE7 }; /* Receiver address */ uint8_t TxAddress[] = { 0x7E, 0x7E, 0x7E, 0x7E, 0x7E }; uint8_t dataOut[32], dataIn[32], i; uint32_t tr_count; NRF24L01_Transmit_Status_t transmissionStatus; /* Initialize NRF24L01+ on channel 15 and 32bytes of payload */ /* By default 2Mbps data rate and 0dBm output power */ /* NRF24L01 goes to RX mode by default */ NRF24L01_Init(15, 32); /* Set RF settings, Data rate to 2Mbps, Output power to -18dBm */ NRF24L01_SetRF(NRF24L01_DataRate_2M, NRF24L01_OutputPower_M18dBm); /* Set my address, 5 bytes */ //NRF24L01_SetMyAddress(MyAddress); /* Set TX address, 5 bytes */ //NRF24L01_SetTxAddress(TxAddress); uint8_t reg; delay_(720000); reg = NRF24L01_ReadRegister(NRF24L01_REG_CONFIG); printf("NRF24L01_REG_CONFIG: 0x%X\r\n", reg); reg = NRF24L01_ReadRegister(NRF24L01_REG_EN_RXADDR); printf("NRF24L01_REG_EN_RXADDR: 0x%X\r\n", reg); reg = NRF24L01_ReadRegister(NRF24L01_REG_RF_CH); printf("NRF24L01_REG_RF_CH: 0x%X\r\n", reg); reg = NRF24L01_ReadRegister(NRF24L01_REG_CONFIG); printf("NRF24L01_REG_CONFIG: 0x%X\r\n", reg); reg = NRF24L01_ReadRegister(NRF24L01_REG_RF_CH); printf("NRF24L01_REG_RF_CH: 0x%X\r\n", reg); reg = NRF24L01_ReadRegister(NRF24L01_REG_CONFIG); printf("NRF24L01_REG_CONFIG: 0x%X\r\n", reg); delay_(720000); for (i = 0; i < 32; i++) { dataOut[i] = i + 30; dataIn[i] = 0; } while (1) { /* Transmit data, goes automatically to TX mode */ NRF24L01_Transmit(dataOut); /* Turn on led to indicate sending */ LED2_ON; /* Wait for data to be sent */ do { transmissionStatus = NRF24L01_GetTransmissionStatus(); printf("transmissionStatus: %d\r\n", transmissionStatus); delay_(72000); } while (transmissionStatus == NRF24L01_Transmit_Status_Sending); /* Turn off led */ LED2_OFF; /* Go back to RX mode */ NRF24L01_PowerUpRx(); i = 0; uint8_t status = NRF24L01_GetStatus(); printf("status: %d\r\n", status); /* Wait received data, wait max 100ms, if time is larger, then data were probably lost */ while (!NRF24L01_DataReady()) { delay_(720000); i++; printf("TM_NRF24L01_DataReady\r\n"); if( i > 100) break; } /* Get data from NRF2L01+ */ NRF24L01_GetData(dataIn); printf("dataIn: %s\r\n", dataIn); /* Check transmit status */ if (transmissionStatus == NRF24L01_Transmit_Status_Ok) { tr_count++; printf("tr_count: %s\r\n", tr_count); } delay_(7200000); } }
void retranslate(void) { /* Receiver address */ uint8_t TxAddress[] = { 0xE7, 0xE7, 0xE7, 0xE7, 0xE7 }; /* My address */ uint8_t MyAddress[] = { 0x7E, 0x7E, 0x7E, 0x7E, 0x7E }; uint8_t dataIn[32]; NRF24L01_Transmit_Status_t transmissionStatus; /* Initialize NRF24L01+ on channel 15 and 32bytes of payload */ /* By default 2Mbps data rate and 0dBm output power */ /* NRF24L01 goes to RX mode by default */ NRF24L01_Init(15, 32); /* Set RF settings, Data rate to 2Mbps, Output power to -18dBm */ NRF24L01_SetRF(NRF24L01_DataRate_2M, NRF24L01_OutputPower_M18dBm); /* Set my address, 5 bytes */ NRF24L01_SetMyAddress(MyAddress); /* Set TX address, 5 bytes */ NRF24L01_SetTxAddress(TxAddress); LED1_ON; delay_(3600000); LED1_OFF; while (1) { /* If data is ready on NRF24L01+ */ if (NRF24L01_DataReady()) { /* Get data from NRF24L01+ */ NRF24L01_GetData(dataIn); delay_(36000); /* Send it back, automatically goes to TX mode */ NRF24L01_Transmit(dataIn); /* Start send */ LED1_ON;; delay_(360000); /* Wait for data to be sent */ do { transmissionStatus = NRF24L01_GetTransmissionStatus(); } while (transmissionStatus == NRF24L01_Transmit_Status_Sending); /* Send done */ LED1_OFF; /* Go back to RX Mode */ NRF24L01_PowerUpRx(); } } }
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; // } } }
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); } }