int main(void) { u16 adcx; float temp; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //ÉèÖÃNVICÖжϷÖ×é2:2λÇÀÕ¼ÓÅÏȼ¶£¬2λÏìÓ¦ÓÅÏȼ¶ delay_init(); //ÑÓʱº¯Êý³õʼ»¯ uart_init(115200); uart3_init(115200); LED_Init(); //³õʼ»¯ÓëLEDÁ¬½ÓµÄÓ²¼þ½Ó¿Ú TB6612_GPIO_Init(); EXTIX_Init(); TCRT5000_Init(); OLED_Init(); OLED_Clear(); SR04_GPIO_Init(); //³¬Éù²¨PA0 Adc_Init(); //ADC³õʼ»¯ TIM3_PWM_Init(999,1439); //¶æ»úPWM TIM1_PWM_Init(1999,359); //µç»úµÄPWM TIM_SetCompare1(TIM1,500); TIM_SetCompare4(TIM1,500); TIM2_Cap_Init(0XFFFF,72-1); //ÒÔ1MhzµÄƵÂʼÆÊý while(1) { //OLED ÏÔʾADC²âÁ¿ adcx=Get_Adc_Average(ADC_Channel_4,10); temp=(float)adcx*(3.3/4096); sprintf((char *)string,"U:%.2f ",(temp*5)); OLED_ShowString(12,0,string,16); //OLEDÏÔʾ¾àÀ빦ÄÜ sprintf((char *)string,"D:%d ",SR04_Distance()); OLED_ShowString(12,3,string,16); //OLEDÏÔʾģʽ¹¦ÄÜ sprintf((char *)string,"Mode:%d ",Mode); OLED_ShowString(12,6,string,16); //´®¿ÚÊä³ö UsartPrintf(USART3,"Mode:%d\r\n",Mode); UsartPrintf(USART3,"U:%.2f\r\n",(temp*5)); UsartPrintf(USART3,"D:%d \r\n",SR04_Distance()); if(Mode == 0) { //ֹͣģʽ TIM_SetCompare1(TIM3,80); //¶æ»úÏòÇ° ʹ³¬Éù²¨³¯Ç°·½ delay_ms(200); AIN1 =0; AIN2 =0; BIN1 =0; BIN2 =0; }
时间: 2024-04-19 15:30:06 浏览: 156
这段代码是主函数`main()`,在这里进行了一些初始化操作,并且在一个无限循环中执行一些操作。
首先,通过`NVIC_PriorityGroupConfig()`函数设置中断优先级分组为2。
然后,调用`delay_init()`函数进行延时初始化,调用`uart_init()`和`uart3_init()`函数初始化串口通信,调用`LED_Init()`函数初始化LED灯,调用`TB6612_GPIO_Init()`函数初始化TB6612电机驱动模块的IO口,调用`EXTIX_Init()`函数初始化外部中断,调用`TCRT5000_Init()`函数初始化TCRT5000红外传感器,调用`OLED_Init()`函数初始化OLED显示屏,调用`SR04_GPIO_Init()`函数初始化SR04超声波测距模块的IO口,最后调用`Adc_Init()`函数初始化ADC模块。
接下来,分别调用`TIM3_PWM_Init()`和`TIM1_PWM_Init()`函数初始化定时器TIM3和TIM1作为PWM输出。通过`TIM_SetCompare1()`和`TIM_SetCompare4()`函数设置TIM1的通道1和通道4的占空比为500。
然后,调用`TIM2_Cap_Init()`函数初始化定时器TIM2作为捕获输入。
接下来是一个无限循环,在循环中进行一些操作。
首先,通过`Get_Adc_Average()`函数获取ADC通道4的平均值,并计算出对应的电压值。然后使用`sprintf()`函数将电压值格式化成字符串,并通过`OLED_ShowString()`函数在OLED显示屏上显示出来。
接着,使用`SR04_Distance()`函数获取超声波测距模块的距离值,并将其格式化成字符串,并通过`OLED_ShowString()`函数在OLED显示屏上显示出来。
然后,将当前的模式值`Mode`格式化成字符串,并通过`OLED_ShowString()`函数在OLED显示屏上显示出来。同时,使用`UsartPrintf()`函数将模式值、电压值和距离值通过USART3串口发送出去。
最后,如果`Mode`的值为0,则停止电机运动,设置PWM输出为80,并延时200毫秒。然后将AIN1、AIN2、BIN1和BIN2的值都设置为0,即停止电机转动。
阅读全文