int main(void) { // init sys SystemInit(); // init peripheral UART_Configuration(); delay_init(); KEY_GPIO_Init(); TIM3_Int_Init(100,7199); Motor_Init(); RGB_LED_Init(); DHT11_Init(); IR_Init(); // init vars GenProtocolInit(); BuzProtocolInit(); UartInit(); while(1) { // handle uart msg HandleMsg(); // handle key events HandleKey(); // business logic tick BuzTick(); } }
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); } }
int main(void) { delay_init(); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); uart_init(115200); //串口初始化为115200 Uart2_Init(115200); OLED_Init(); LED_Init(); OLED_Clear(); KEY_Init();//IO初始化 TIM3_Int_Init(499,7199);//10Khz的计数频率,计数到500为50ms NET_Init(); ConnectToDevice(); delay_ms(300); LED2 = 0; delay_ms(100); LED2 = 1; EEPROM_Init(); // ReadLedStatusFromFlash(); StartToUploadFlag = 1; while(1) { MainMenuIntoSubMenu(); SwitchDetect(); } }
int main(void) { delay_init(); //??????? NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //??NVIC????2:2??????,2?????? uart_init(115200); //??????115200 LED_Init(); //LED????? TFTLCD_Init(); //LCD??? KEY_Init(); //????? ctp_dev.init(); //?????? FSMC_SRAM_Init(); //???SRAM TIM3_Int_Init(999,71); //1KHZ ???1ms TIM6_Int_Init(999,719); //10ms?? my_mem_init(SRAMIN); //???????? my_mem_init(SRAMEX); //???????? RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC,ENABLE);//??CRC??,??STemWin???? GUI_Init(); WM_SetCreateFlags(WM_CF_MEMDEV); GUI_Init();//???????? demo???????? ????????? startUp_Window(); //?????? while(1); }
void BSPINIT(void) { RCC_Init(); //所有时钟使能 GPIO_init(); adc_init(); TIM3_Int_Init(999,10); TIM8_PWM_Init(999,10); //1200Hz TIM_Configuration(); // TIM7主中断设置 flag=0; }
//外部中断3服务程序 void EXTI3_IRQHandler(void) { delay_ms(10); //消抖 if(balence==1) { TIM3_Int_Init(100-1,8400-1); GPIO_SetBits(GPIOB,GPIO_Pin_12); } EXTI_ClearITPendingBit(EXTI_Line3); //清除LINE3上的中断标志位 }
void init() { delay_init(); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 LED_Init(); //LED端口初始化 TIM3_Int_Init(719,4999); //主中断0.03 uart_init(9600); //串口初始化为115200,读上位机数据 uart2_init(9600); //读陀螺仪数据 uart3_init(9600); ENCODE_Init(); //编码器初始化 queue_init(&rx_queue); basketballbot.Control_ID = Global; }
int main(void) { delay_init(); //延时函数初始化 NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 uart_init(9600); //串口初始化为9600 LED_Init(); //LED端口初始化 TIM3_Int_Init(4999,7199);//10Khz的计数频率,计数到5000为500ms while(1) { LED0=!LED0; delay_ms(200); } }
int main(void) { u8 i; delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2 uart_init(9600); OV7670_Init(); LED_Init(); //初始化与LED连接的硬件接口 LCD_Init(); //初始化LCD if(lcddev.id==0X6804||lcddev.id==0X5310||lcddev.id==0X5510||lcddev.id==0X1963) //强制设置屏幕分辨率为320*240.以支持3.5寸大屏 { lcddev.width=240; lcddev.height=320; } usmart_dev.init(72); //初始化USMART POINT_COLOR=RED;//设置字体为红色 LCD_ShowString(60,50,200,200,16,"Mini STM32"); LCD_ShowString(60,70,200,200,16,"OV7670 TEST"); LCD_ShowString(60,90,200,200,16,"ATOM@ALIENTEK"); LCD_ShowString(60,110,200,200,16,"2014/3/27"); LCD_ShowString(60,130,200,200,16,"Use USMART To Set!"); LCD_ShowString(60,150,200,200,16,"OV7670 Init..."); while(OV7670_Init())//初始化OV7670 { LCD_ShowString(60,150,200,200,16,"OV7670 Error!!"); delay_ms(200); LCD_Fill(60,150,239,166,WHITE); delay_ms(200); } LCD_ShowString(60,150,200,200,16,"OV7670 Init OK"); delay_ms(1500); TIM3_Int_Init(10000,7199); //TIM3,10Khz计数频率,1秒钟中断 EXTI15_Init(); //使能定时器捕获 OV7670_Window_Set(10,174,240,320); //设置窗口 OV7670_CS=0; while(1) { camera_refresh(); //更新显示 if(i!=ov_frame) //DS0闪烁. { i=ov_frame; LED0=!LED0; } } }
int main(void) { u32 i; delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级 uart_init(115200); //串口初始化为115200 LED_Init(); //初始化与LED连接的硬件接口 KEY_Init(); //初始化按键 LCD_Init(); //初始化LCD TIM3_Int_Init(1000,719); //定时器3频率为100hz usmart_dev.init(72); //初始化USMART FSMC_SRAM_Init(); //初始化外部SRAM my_mem_init(SRAMIN); //初始化内部内存池 my_mem_init(SRAMEX); //初始化外部内存池 POINT_COLOR=RED; //设置字体为红色 LCD_ShowString(30,30,200,16,16,"ENC28J60+STM32"); LCD_ShowString(30,50,200,16,16,"LWIP Test!"); LCD_ShowString(30,70,200,16,16,"ATOM@ALIENTEK"); LCD_ShowString(30,90,200,16,16,"2015/4/27"); while(lwip_comm_init()) //lwip初始化 { LCD_ShowString(30,110,200,20,16,"LWIP Init Falied!"); delay_ms(1200); LCD_Fill(30,110,230,130,WHITE); //清除显示 LCD_ShowString(30,110,200,16,16,"Retrying..."); } LCD_ShowString(30,110,200,20,16,"LWIP Init Success!"); LCD_ShowString(30,130,200,16,16,"DHCP IP configing..."); #if LWIP_DHCP //使用DHCP while((lwipdev.dhcpstatus!=2)&&(lwipdev.dhcpstatus!=0XFF))//等待DHCP获取成功/超时溢出 { lwip_periodic_handle(); //LWIP内核需要定时处理的函数 } #endif show_address(lwipdev.dhcpstatus); //显示地址信息 while(1) { lwip_periodic_handle(); //LWIP内核需要定时处理的函数 i++; if(i==50000) { LED0=~LED0; i=0; } } }
int main(void) { delay_init(); //延时函数初始化 uart_init(115200); TLV5616_Init(); TLV5616_SetOutput_Voltage(500); IIC_Init(); //初始化ADS1115的I2C KEY_Init(); Uc1701_Init(); clear_screen(0x55); TIM2_Int_Init(14999,71);//15ms TIM3_Int_Init(19999,71);//1Mhz的计数频率,计数到19999为20ms TIM4_Int_Init(4999,71);//5ms while(1) { delay_ms(2); } }
int main(void) { delay_init(); NVIC_Configuration(); /*设置NVIC中断分组2:2位抢占优先级,2位响应优先级*/ LED_Init(); MotorPin_Init(); /*舵机初始化信号线引脚*/ USART1_Config(); Init_TotalArray(); /*计算执行数组*/ Exti_Init(); TIM3_Int_Init(100,100); TIM4_Int_Init(10000,7199); /*定时1S*/ //TIM_Cmd(TIM3, DISABLE); /*接收到指令之后,再打开TIM3*/ //while(!rece_flag); while(1) { /*警告:外部中断ABCDEF的顺序不要颠倒*/ if(rece_flag==1) { if(rece_string[0]=='#') { TIM_Cmd(TIM3, DISABLE); /*先关闭TIM3,避免全局变量被修改*/ motor_speed=250; SolvecubeArray_ToBufferArray(); } change(); TIM_Cmd(TIM3, ENABLE); /*接收到指令之后,再打开TIM3*/ rece_flag=0; } if(flag_vpwm==1) { vpwm(); /*插补角度*/ flag_vpwm=0; } } }
void Hal_Init(void) { RGB_LED_Init(); printf("RGB LED Init OK\r\n"); LED_GPIO_Init(); printf("LED Init OK\r\n"); TIM3_Int_Init(7199,9); //1ms SystemTimeCount + 1 printf("SystemTime Init OK\r\n"); KEY_GPIO_Init(); printf("KEY Init OK\r\n"); Motor_Init(); printf("Motor Init OK\r\n"); Delay_Init(72); DHT11_Init(); printf("DHT11 Init OK\r\n"); IR_Init(); printf("IR Init OK\r\n"); OLED_Init(); OLED_ShowString(40, 0, "GoKit"); OLED_ShowString(0, 32, "www.gizwits.com"); }
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!"); } } }
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"); } }