Exemplo n.º 1
0
void SYS_INIT(void)
{
	LED_INIT();
	LED_FLASH();
	Moto_Init(); 
	LED_FLASH();	
	
	Tim3_Init(500);
	Nvic_Init();
	Uart1_Init(115200);
	
	ANO_TC_I2C2_INIT(0xA6,400000,1,1,3,3);
	MPU6050_Init();

	Spi1_Init();
	Nrf24l01_Init(MODEL_TX2,40);
 	if(Nrf24l01_Check())
		Uart1_Put_String("NRF24L01 IS OK !\r\n");
 	else 									
		Uart1_Put_String("NRF24L01 IS NOT OK !\r\n");
		
	ADC1_Init();
	
	FLASH_Unlock();
	EE_INIT();
	EE_READ_ACC_OFFSET();
	EE_READ_GYRO_OFFSET();
	EE_READ_PID();
	
	Tim3_Control(1);
}
Exemplo n.º 2
0
Arquivo: main.c Projeto: chnxg/IMU_prj
/* 
 * 函数名:main
 * 描述  : 主函数
 * 输入  :无
 * 输出  : 无
 */
int main(void)
{
	/* 配置系统时钟为 72M */ 
	SystemInit(); 
	LED_GPIO_Config();
	Nvic_Init();
	I2C_GPIO_Config();
	Delay(0xFFFF);
	InitMPU6050();
	Delay(0xFFFF);
  Init_HMC5883L();
	Delay(0xFFFF);
	Tim3_Init(2500);
	usart1_config();
	
  while(1)
  {
	    if(sentFlag)
			{
				 sentFlag = 0;								 
			   UART1_ReportIMU();
			}
	}
	  
}
Exemplo n.º 3
0
void SYS_INIT(void)
{
	LED_INIT();			//LED及串口IO 初始化
	LED_FLASH();		//LED闪烁
	Tim3_Init(500);	//中断初始化 //1000=1MS,500=0.5MS
	Moto_Init();	  //PWM
	
	//	Uart1_Init(115200);	//串口初始化,飞控上几乎无用
	
	Spi1_Init();		//SPI初始化
	Nvic_Init();		//中断初始化
	Nrf24l01_Init(MODEL_TX2,40);	//2401中断初始化  主发送 通道 40
	
// 	if(Nrf24l01_Check())	Uart1_Put_String("NRF24L01 IS OK !\r\n");			//检测2401是否初始化成功
// 	else 									Uart1_Put_String("NRF24L01 IS NOT OK !\r\n");
	
	InitMPU6050();
	
	ADC1_Init();		//检测电池电压
	FLASH_Unlock();	//保存飞飞控参数
	EE_INIT();
	EE_READ_ACC_OFFSET();
	EE_READ_GYRO_OFFSET();
	EE_READ_PID();
	
	PID_ROL.P = PID_PIT.P = 5;	//用于初始化pid,如用匿名上位机写入pid,则屏蔽
	PID_ROL.D = PID_PIT.D = 0.1;			
	PID_YAW.P = 0.5;	
	PID_YAW.D = 0.05;			
}
Exemplo n.º 4
0
Arquivo: main.c Projeto: 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;
        }
    }
}
Exemplo n.º 5
0
static void SetupHardware( void )
{
    u8 buf[32];
#if 0//debug by karlno
    u8 *ptr1,*ptr2,*ptr3,*ptr4;
#endif

    GPIO_Config();//针对gpio的一些配置
    NVIC_Config();//针对中断向量的一些配置
    EXTI_Config();//外部中断配置

#if 0//debug by karlno
    Debug("#### 123\n\r");

    ptr1=Q_Mallco(200);
    ptr2=Q_Mallco(68);

    Q_Free(ptr1);
    ptr3=Q_Mallco(68);

    ptr3=Q_Mallco(68);

    while(1);
#endif


    Debug("\n\n\n\r************************************\n\r");
    Debug("* Q-SYS %s               *\n\r",QSYS_VERSION);
    Debug("* Start up our dreams!             *\n\r");
#if OS_USE_FREERTOS
    Debug("* Base on FreeRTOS                 *\n\r");
#elif OS_USE_UCOS
    Debug("* Base on uC/OS                    *\n\r");
#endif
    Debug("* Hardware PID : %d %d           *\n\r",QXW_PRODUCT_ID,QXW_LCM_ID);
    Debug("* Hardware ID : %X           *\n\r",GetHwID());
    Debug("* Www.Q-ShareWe.Com                *\n\r");
    Debug("************************************\n\r\n\r");

    M25P16_Init();//spi flash

    M25P16_Read_Id(buf);
    Debug("SPI Flash ID:\n\r");
    DisplayBuf(buf,20,8);
    Debug("\n\r");

    SPI_Touch_Init();//触摸屏

    VsInit();//Vs1003的配置

    //sd卡文件系统初始化
    if(disk_initialize(0))
    {
        Debug("Disk Initialize error!\n\r");
    }
    else
    {
        Debug("Disk Initialize OK!\n\r");
#if 0//debug
        {
            FIL fsrc;            // file objects
            FRESULT res;         // FatFs function common result code
            UINT br;
            u8 *p=Q_Mallco(1024);
            u32 time=QW_GetNowTimeMs();


            res = f_mount(0,&FS);	//  初始化分区结构,它不初始化SD卡
            if(res == FR_OK)
            {
                Debug("\n\nATA mounrt OK, fs_type =  %d\n\r",FS.fs_type);
            }
            else
            {
                Debug("\nATA mounrt Error!!!\n%d\n\r",res);
            }

            res = f_open(&fsrc,"1.rar",FA_READ) ;
            Debug("Open %d\n\r",res);
            while(1)
            {
                res = f_read(&fsrc,p,fsrc.fsize,&br); //  读文件数据,长度file.fsize,
                if(br==0)break;
            }
            f_close(&fsrc);
            Debug("Time Gap:%d\n\r",QW_GetNowTimeMs()-time);
            while(1);
        }
#endif
        FS_Init();
        Debug("File system mount OK!\n\r");
        Q_DB_SetStatus(Status_FsInitFinish,TRUE,NULL,0);
    }

    Adc_Init();

    Tim2_Init();//用户定时器
    Tim3_Init();//背光pwm初始化
    Tim4_Init();//用户定时器
    Tim5_Init();//用户定时器

    USB_SetHw();
    USB_Init();
}
Exemplo n.º 6
0
Arquivo: main.c Projeto: 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;
        // }
    }
}
Exemplo n.º 7
0
/**************************************************************/
//程 序 名: main()
//开 发 者: MingH
//入口参数: 无
//功能说明: 主函数
//**************************************************************/
int main(void)
{
	unsigned char err_code;
	RCC_Config();		// 时钟初始化配置
	Beep_Init();		// 蜂鸣器初始化配置
	Touch_Init();
	Pcie_Gpio_Init();
	Tim3_Init();
	
	RGB_Init();     //RGB 初始化
	RCC_GetClocksFreq(&RCC_ClockFreq);		
	SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);	
	USB2Serial_Init(); 	// 串口初始化配置
	Pwm_Init();
	Adc_Init();
	I2C_GPIO_Configuration();
	err_code = LIS3DH_Init();
	
	if (NO_ERROR == err_code)
	{
		printf("\r\nLIS3DH Init is succeed! \r\n");
	}
	else
	{
		printf("\r\nLIS3DH Init is failed! \r\n");
	}
	
	RTC_Init(); 		// RTC 初始化配置


	if(SD_Init() == SD_OK) {
	
		printf ("\r\n发现SD卡!\r\n");
	}
	else {
		printf("\r\n没有发现 SD 卡设备! \r\n");
	}
	printf("\r\n\r\n");
	save_sd_detect = SD_Detect(); //初始化SD卡插入状态
	
	SysTick_Delay_ms(500);
	TIM_Cmd(TIM1, DISABLE);
	TIM_CtrlPWMOutputs(TIM1, DISABLE);
	while (1)
	{
		if(read_sd_detect_flag){
			
			if (save_sd_detect != SD_Detect()){
				/* 蜂鸣器响 */
				TIM_Cmd(TIM1, ENABLE);
				TIM_CtrlPWMOutputs(TIM1, ENABLE);
				sd_detect_change = 1; //SD卡插入状态有变
				buzzer_delay = 0;
				if (SD_Detect() != SD_NOT_PRESENT){
						if(SD_Init() == SD_OK) {
							printf ("\r\n发现SD卡!\r\n");
						}
						else {
							printf("\r\n没有发现 SD 卡设备! \r\n");
						}
						printf("\r\n\r\n");
				}
			}
			save_sd_detect = SD_Detect();
			read_sd_detect_flag = 0;
		}
		
		
		Time_Show();	
		Test_Pcie_Gpio();
		Touch_Key_Proc();
		
		if (read_lis3dh_flag){
			Collect_Data(ACCdata);
			for (i=0; i<3; i++){
				if (oldACCdata[i] < ACCdata[i]){
					ACCdiff[i] = ACCdata[i] - oldACCdata[i];
				}
				else{
					ACCdiff[i] = oldACCdata[i] - ACCdata[i];
				}
			}
			RGB_Control(ACCdiff[0]<<1, ACCdiff[1]<<1, ACCdiff[2]<<1);
			for (i=0; i<3; i++){
				oldACCdata[i] = ACCdata[i];
			}
			read_lis3dh_flag = 0;
		}
		if (one_second_flag){
			printf("X=%d, Y=%d, Z=%d\r\n\r\n", ACCdata[1], ACCdata[0], ACCdata[2]);
			Adc_Proc();
			one_second_flag = 0;
		}
	}
}