蓝桥杯第二天的学习

定时器及PWM输出

PWM输出一般为PA6和PA7对应的定时器是TIM16和TIM17

函数介绍

HAL_TIM_PWM_Start(&htim16,TIM_CHANNEL_1);
__HAL_TIM_SetCompare(&htim16,TIM_CHANNEL_1,pa6_duty);
HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1);
__HAL_TIM_SetCounter(htim,0);

代码编写

void key_scan()//按键扫描函数
{
	if(key[0].single_sta==1)
	{
		view=!view;
		LCD_Clear(Black);
		key[0].single_sta=0;
	}
	if(key[1].single_sta==1)
	{
		LCD_Clear(Black);
		pa6_duty+=10;
		if(pa6_duty>90)
			pa6_duty=10;
		TIM16->CCR1=pa6_duty;
//		__HAL_TIM_SetCompare(&htim16,TIM_CHANNEL_1,pa6_duty);可以用这个函数代替
		key[1].single_sta=0;
	}
	if(key[2].single_sta==1)
	{
		LCD_Clear(Black);
		pa7_duty+=10;
		if(pa7_duty>90)
			pa7_duty=10;
		TIM17->CCR1=pa7_duty;
		key[2].single_sta=0;
	}
}
void disp_proc()//屏幕显示
{
	char text[30];
	if(view)
	{
		sprintf(text,"      Para");
		LCD_DisplayStringLine(Line0,(u8 *)text);
		sprintf(text,"    PA6:%d%%",pa6_duty);
		LCD_DisplayStringLine(Line2,(u8*)text);
		sprintf(text,"    PA7:%d%%",pa7_duty);
		LCD_DisplayStringLine(Line4,(u8*)text);
	}
	else
	{
		sprintf(text,"      Data");
		LCD_DisplayStringLine(Line0,(u8 *)text);
	}
}

PWM测量

频率测量很简单,一般比赛会用到TIM2和TIM3的ch1通道,为引脚PA15和PB4;

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance==TIM2)
	{
		if(htim->Channel==HAL_TIM_ACTIVE_CHANNEL_1)
		{
				ccr_val1a=HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1);
				ccr_val1b=HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_2);
				fre1=1000000/ccr_val1a;
				duty1=(ccr_val1b/ccr_val1a)*100;
				__HAL_TIM_SetCounter(htim,0);
//				HAL_TIM_IC_Start(htim,TIM_CHANNEL_1);
//				HAL_TIM_IC_Start(htim,TIM_CHANNEL_2);
		}
	}
	if(htim->Instance==TIM3)
	{
		if(htim->Channel==HAL_TIM_ACTIVE_CHANNEL_1)
		{
			ccr_val2a=TIM3->CCR1;
		    ccr_val2b=TIM3->CCR2;
		    duty2=ccr_val2b*100/ccr_val2a;
			fre2=1000000/ccr_val2a;
			TIM3->CNT=0;
//		HAL_TIM_IC_Start(htim,TIM_CHANNEL_1);
		}
	}
	
}

占空比

这里可以用间接模式测量占空比,这里要十分注意,一定要是在中断回调函数中确定是ch1通道时才进入,还需注意也要打开通道2的输入捕获,不然捕获不到值。

    HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1);
	HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_1);
	HAL_TIM_IC_Start(&htim2,TIM_CHANNEL_2);
	HAL_TIM_IC_Start(&htim3,TIM_CHANNEL_2);

Alt text


本文章使用limfx的vscode插件快速发布