Пример #1
0
/******************************以下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);        
  }
}
Пример #2
0
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灭		
	}
}
Пример #3
0
//设置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;
		}				   
	}  	
}
Пример #4
0
void Sensor_Init(void)
{
	Init_State.MPU6050_State = InitMPU6050();
	Init_State.NRF2401_State = NRF24L01_Check();
	NRF24L01_Mode(1);
	MS5611_init();

}
Пример #5
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);
}
Пример #6
0
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();
  }
  
}
Пример #7
0
Файл: main.c Проект: kenziD/ANO
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;
        }
    }
}
Пример #8
0
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); //打印数据
        }
    }
}
Пример #9
0
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();
}
Пример #10
0
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();
	}
}
Пример #12
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);
}
Пример #13
0
 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();
}
Пример #15
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);
	} 
}	
Пример #16
0
void NRF24L01_Init(void)
{
	SPI1_Init();
	NRF24L01_Check();
	SetRxMode();
}
Пример #17
0
Файл: main.c Проект: kenziD/ANO
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;
        // }
    }
}