Пример #1
0
int main(void)
{ 
	float x=1;
	float p=10;
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
	delay_init(168);  //初始化延时函数
	EXTIX_Init(); 
  uart_init(115200);
  TIM10_PWM_Init(10000-1,336-1);	//84M/84=1Mhz的计数频率,重装载值500,所以PWM频率为 1M/500=2Khz.   
	TIM11_PWM_Init(10000-1,336-1);
	TIM9_PWM_Inita(10000-1,336-1);
	TIM9_PWM_Initb(10000-1,336-1);
 	//TIM3_Int_Init(5000-1,8400-1);	//定时器时钟84M,分频系数8400,所以84M/8400=10Khz的计数频率,计数5000次为500ms 
  exp_point=set_point(0,0,0,750);
	MPU_Init(); 
	printf("aaa\r\n");
	while(mpu_dmp_init()){}
	//TIM3_Int_Init(100-1,8400-1);
  init_omegax.data=x;
	init_omegax.p=p;
	init_roll.data=x;
	init_roll.p=p;
	
		while(1)
	{
		LED0=!LED0;//DS0翻转
		delay_ms(200);//延时200ms
		
	};
}
Пример #2
0
int main(void)
{ 		
	Stm32_Clock_Init(9);
//		u16 temp;
	NVIC_Configuration();
	UART1_init(72,115200); 
	delay_init();  
	//初始化串口1;
	
	pid_Init();

	LED_Init();
	EXTIX_Init();
	Adc_Init();		


	Motor_Init(999,0);	
	
	HC05_Init();
	while(mpu_dmp_init());	 

// 	TIM5_Init(999,72);
	TIM2_Int_Init(999,72);//定时器3配置,1ms中断一次

	
	while(1)
	{
//		CtrlAttiAng();
//	PWM_test();
//	COMMPC_TEST();	
//	Get_angle();
//	u2_printf("hell");
	test_SendPC();//测试向PC发送协议数据,用于调控
	} 	
}
Пример #3
0
  int main(void)
 {
	 u8 t=0;	
	 u16 Time=0,dis_pre=0;
	 float V_ave;	//平均速度
	 char code_ave[5],code_v[5],code_vr[5], mileage[5];//信息储存数组
	 
	delay_init(72);	    	 			//延时函数初始化	  
	Stm32_Clock_Init(9);		  //系统时钟设置
	uart_init(72,9600);	 	 		  //串口初始化为9600
	usmart_dev.init(72);			//初始化USMART	
	EXTIX_Init();							//外部中断初始化
	TIM3_Int_Init(5000,7199); //10Khz的计数频率,计数到5000为500ms 
	LCD_Init();				 				//  PE.ALL,PD1~5  
	LCD_Display_Dir(1);				//设置显示方向为横屏显示
	LED_Init();		  					//初始化与LED连接的硬件接口
	KEY_Init();								//初始化按键

		while(RTC_Init())
		{	//等待RTC初始化
			delay_ms(200);
			printf("rtc waiting```\r\n");
		} 
		printf("finish\n");
		display_jing();
		//初始化完成
   while(1)
	{	
		POINT_COLOR=RED;
		if(t!=calendar.sec)		//时间更新后显示新时间
		{
				t=calendar.sec;	
				LCD_ShowNum(200,135,calendar.min,2,32);		
				LCD_ShowString(230,135,200,32,32,":");			
				LCD_ShowNum(248,135,calendar.sec,2,32);
			
				Time = 60*calendar.min+calendar.sec;//比赛用时
				if(dis_pre != quanshu_tenfold)			//有位移变化
				{
					V_ave=(0.154*quanshu_tenfold)/Time;
					dis_pre = quanshu_tenfold;
					sprintf(code_ave,"%.2f",V_ave);	
					LCD_ShowString(100,200,200,32,32,code_ave);//修改一下位置
					
				}
		}
			
		sprintf(code_v,"%.2f",V);					//float 转 字符串  
		LCD_ShowString(365,275,200,32,32,code_v);		//速度
		
		sprintf(code_vr,"%d",V_RPM);					//float 转 字符串  
		LCD_ShowString(365,275,200,32,32,code_vr);		//转速
 
		sprintf(mileage,"%.2f",0.154*quanshu_tenfold);
		LCD_ShowString(250,225,200,24,32,mileage);	//里程
		
	  display_dong(V_RPM,V,50);
		delay_ms(300);
	}
 }
Пример #4
0
int main(void)
{		
 	Stm32_Clock_Init(9); //system clock init   always init first
	IO_Init();
	delay_init(72);	     //delay init
	uart_init(72,115200);  //uart init
	PWM4_Init(150,18000);				 // ultra ping sig

//	PWM2_2Init(100,1800);	 //count to 100, freq/1800	 //IR aqusition pulse
	Timer3_Init(65535,256);	  //time refrence for echo/ultrasonic

//	setup 5 for motors?
	Timer2_Init(65535,10);	// motor try1
	motor_Init();

	EXTIX_Init();
//	Adc_Init();
//	LED0_PWM_VAL2_2=0x44;
//	LED0_PWM_VAL2_1=0x34;
	LED0_PWM_VAL4=0x34;
	IRO=0;//turn on IR LEDs

   	while(1)
	{	
		printf("adcx1\tadcx2\tadcx3\tadcx4\tGyro\tBatt\techo\n");
		printf("%u\t%u\t%u\t%u\t%u\t%u\t%u",adcx1,adcx2,adcx3,adcx4,Gyro_raw,Batt,echo);
		printf("\n");
	//	USART1->DR=echo/0xff;
	//	while((USART1->SR&0X40)==0);//wait for transfer to compleate
		LED0=!LED0; 
		delay_us(100000);//wait for the end of transmission	   
	}	 
} 																						 
Пример #5
0
//按键初始化函数
void KEY_Init(void) //IO初始化
{ 
 	GPIO_InitTypeDef GPIO_InitStructure;

 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//使能PORTC时钟

	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_6|GPIO_Pin_7;//PC6,7
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入
 	GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOC6,7

	EXTIX_Init();
}
Пример #6
0
int main(void)
{ 
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
	delay_init(168);		//延时初始化 
	uart_init(9600);		//串口1初始化波特率为9600
	uart3_init(9600);		//串口3初始化波特率为9600
	LED_Init();				  //初始化LED端口  
	EXTIX_Init();       //初始化外部中断输入 

	
	printf("keyup:写块数据中断!\r\n");
	printf("key0:读块数据中断!\r\n");
	printf("key1:读卡号中断!\r\n");
	
	LoadPassword();			//装载密码


	//等待中断发生
	while(1)
	{

	}
		
}
Пример #7
0
 int main(void)
 {
		u8 Data_PC[SIZE];    //从Flash中读取数据到Data_PC,并上传至上位机
	  u16 a,b=0;

		delay_init();	    	 //延时函数初始化	  
		NVIC_Configuration();//设置NVIC中断分组2:2位抢占优先级,2位响应优先级
		uart_init(9600);	   //串口初始化为9600
		LED_Init();			     //LED端口初始化
		LCD_Init();
	  KEY_Init(); 
		WORD_Init();	
	  TIM2_Int_Init(999,7199);	  
	  TIM3_Int_Init(9,7199);
	  EXTIX_Init();		 	   //外部中断初始化
		Adc_Init();		  		 //ADC初始化
	 	SPI_Flash_Init();  	 //SPI FLASH 初始化 
		
	while(1)
	{
//功能:开机状态显示
//说明:1.开机,绿灯亮(DS1)
//      2.使用temp是为了避免重复执行该if语句
		if(flag2==1&&temp==0)     
		{
		  while(SPI_Flash_ReadID()!=W25Q64)							//检测不到W25Q64
			{
				LCD_ShowString(40,150,200,16,16,"W25Q64 Check Failed!");
				delay_ms(500);
				LCD_ShowString(40,150,200,16,16,"Please Check!      ");
				delay_ms(500);
				LED0=!LED0;//DS0闪烁
			}
	    LCD_ShowString(60,130,200,16,16,"W25Q64 Ready!");
		  LED1=0;
			temp=1;
    }
		
//功能:数据采集并保存至Flash中	
//说明:1.使用temp1是为了避免重复使能TIM3	
//      2.使用temp2是为了避免在数据上传至上位机的过程中,与终止上传功能相冲突
//      3.flag1=1代表按键按下,并开始采集	
//      4.flag2=1代表开机,flag2=0代表未开机	
//      5.采集过程中,红灯(DS0)以一定频率闪烁		
		if(flag2==1&&temp2==0&&flag1==1)
		{
      if(temp1==0)
			{
				LCD_ShowString(20,150,200,16,16,"Data collection began...");
			  TIM_Cmd(TIM3, ENABLE);   //使能TIM3中断
        LED0=0;				
      }
			temp1=1;
			if(flag_cycle==0&&flag_cycle_1==0)
			{
				SPI_Flash_Write((u8*)TEXT_Buffer2,FLASH_SIZE+counter*SIZE,SIZE);
				counter++;
				flag_cycle_1=1;
      }
			if(flag_cycle==1&&flag_cycle_1==0)
			{
				SPI_Flash_Write((u8*)TEXT_Buffer1,FLASH_SIZE+counter*SIZE,SIZE);
				counter++;
				flag_cycle_1=1;
      }						
		}

//功能:将Flash中采集到的数据上传至上位机	
//说明:1.使用temp1是为了保证上传是在采集之后进行
//      2.使用temp3是为了避免由于按键误操作使得该程序重复被执行
//      3.flag1=0代表按键再次被按下,上传开始	;若再次被按下,则上传被终止;之后再按就没有作用了	
//      4.上传过程中,红灯(DS0)以一定频率闪烁
		if(temp1==1&&temp3==0&&flag1==0)
		{
			TIM_Cmd(TIM3, DISABLE);    //失能TIM3中断
			
			//用于解决当采集时间不是42ms的倍数时,部分采集数据未写入FLash的问题
			if((time_collect-1)%42!=0)
			{
				data_residue=(time_collect-1)%42*6;
				if(flag_cycle==0)
				{
					SPI_Flash_Write((u8*)TEXT_Buffer2,FLASH_SIZE+(counter+1)*SIZE,SIZE);
        }
				if(flag_cycle==1)
				{
					SPI_Flash_Write((u8*)TEXT_Buffer1,FLASH_SIZE+(counter+1)*SIZE,SIZE);					
        }
      }
				
			LCD_ShowString(20,170,200,16,16,"Data collection complete!");
			LCD_ShowString(20,190,200,16,16,"Data is being uploaded...");
			temp2=1;

			for(a=1;a<counter;a++)
			{
				LED0=!LED0;
				SPI_Flash_Read(Data_PC,FLASH_SIZE+a*SIZE,SIZE);
				for(b=0;b<SIZE;b++)     
				{
				 if(flag1==1)      //上传中途使用按键停止传送
				 {
					break;
				 }
				 USART_GetFlagStatus(USART1, USART_FLAG_TC);
				 USART_SendData(USART1,Data_PC[b]);			  
				 while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);				
				}
				if(flag1==1)      //上传中途使用按键停止传送
				{
				 LCD_ShowString(20,210,200,16,16,"Data upload is terminated!");	
				 break;
				}
			}
			
			//用于解决当采集时间不是42ms的倍数时,部分采集数据未写入FLash的问题
			if(flag1!=1&&(time_collect-1)%42!=0)
			{
				LED0=!LED0;
				SPI_Flash_Read(Data_PC,FLASH_SIZE+(a+1)*SIZE,SIZE);
				for(b=0;b<data_residue;b++)     
				{
				 if(flag1==1)      //上传中途使用按键停止传送
				 {
					break;
				 }
				 USART_GetFlagStatus(USART1, USART_FLAG_TC);
				 USART_SendData(USART1,Data_PC[b]);			  
				 while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);				
				}
				if(flag1==1)      //上传中途使用按键停止传送
				{
				 LCD_ShowString(20,210,200,16,16,"Data upload is terminated!");	
				 break;
				}
      }
			
			if(flag1!=1)   //要么显示数据上传完成,要么显示数据上传完成
			{
				LCD_ShowString(20,210,200,16,16,"Data upload is completed!");
			}
			temp3=1;		
     }

//功能:关机并擦除Flash	
//说明:1.flag2=0代表关机,与上temp1,temp2是要保证前面的已被执行
//      2.关机过程中擦除Flash,完成之后红绿灯同时亮一秒后灭		 
		if(temp1==1&&temp2==1&&flag2==0)   //关机机状态显示
		{
			flag1=0;
			flag2=0;
      temp1=0;
      temp2=0;			
			LED0=1;
			LED1=1;
			SPI_Flash_Erase_Chip();
		  LED0=0;
			LED1=0;
			delay_ms(1000);
			LED0=1;
			LED1=1;
			LCD_ShowString(80,230,200,16,16,"Shutdown!");
    }
  }	
}
Пример #8
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");
			 
			
					}
}