当前位置:   article > 正文

stm32#高级定时器比较输出实验_stm32 定时器 输出比较模式周期

stm32 定时器 输出比较模式周期

目的

目的:用定时器8通道1、2产生相位分别25%50%的PWM波
  • 1

原理

在这里插入图片描述
如图所示设置为比较输出模式,向上计数。当计数值大于比较直输出时产生翻转。即便CNT值清零重新计数也会保持当前电平。这个模式和通用定时器PWM输出比较模式不同。
由上图可以看出PWM的占空比永远为50%,周期为2(ARR+1)*Tcnt。
故ARR影响周期,CCRx 影响初相。
在这里插入图片描述
在这里插入图片描述

代码

void MX_base_time_Init(uint16_t arr,uint16_t psc)
{
	TIM_OC_InitTypeDef timx_oc_cop_pwm={0};
	g_timx_handle.Instance=TIM8;
	g_timx_handle.Init.CounterMode=TIM_COUNTERMODE_UP;
	//预分频值
	g_timx_handle.Init.Prescaler=psc;
	//重装载值
	g_timx_handle.Init.Period=arr;
	
	g_timx_handle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; /* 使能TIMx_ARR进行缓冲 */
	
	g_timx_handle.Init.RepetitionCounter=0;  /* 重复计数器初始值 0*/
	
	HAL_TIM_OC_Init(&g_timx_handle);/* 输出比较模式初始化 */
	
	
	timx_oc_cop_pwm.OCMode=TIM_OCMODE_TOGGLE;       /* 比较输出模式翻转功能 */

	timx_oc_cop_pwm.Pulse=250-1;/* 设置输出比较寄存器的值  设置CCRx的值*/
	
	timx_oc_cop_pwm.OCPolarity=TIM_OCPOLARITY_HIGH; /* 输出比较极性为高   CNT <CCRx为高*/
	
	HAL_TIM_OC_ConfigChannel(&g_timx_handle,&timx_oc_cop_pwm,TIM_CHANNEL_1);/* 初始化定时器的输出比较通道1 */
	
	__HAL_TIM_ENABLE_OCxPRELOAD(&g_timx_handle,TIM_CHANNEL_1);/* 通道1 预装载使能  CCRx有影子寄存器 */
	
	
		timx_oc_cop_pwm.Pulse=500-1;/* 设置输出比较寄存器的值  设置CCRx的值*/
		
		HAL_TIM_OC_ConfigChannel(&g_timx_handle,&timx_oc_cop_pwm,TIM_CHANNEL_3);/* 初始化定时器的输出比较通道1 */
	
	__HAL_TIM_ENABLE_OCxPRELOAD(&g_timx_handle,TIM_CHANNEL_3);/* 通道1 预装载使能  CCRx有影子寄存器 */
	
	HAL_TIM_OC_Start(&g_timx_handle,TIM_CHANNEL_1);
	
	HAL_TIM_OC_Start(&g_timx_handle,TIM_CHANNEL_3);
	
	

}
void HAL_TIM_OC_MspInit(TIM_HandleTypeDef *htim)
{
	if(htim->Instance==g_timx_handle.Instance)
	{
		//使能时钟
		__HAL_RCC_TIM8_CLK_ENABLE();
		__HAL_RCC_GPIOC_CLK_ENABLE();
		GPIO_InitTypeDef gpio_init_struct;
		gpio_init_struct.Pin=GPIO_PIN_6|GPIO_PIN_8;
		gpio_init_struct.Mode=GPIO_MODE_AF_PP;
		gpio_init_struct.Pull=GPIO_PULLUP;
		gpio_init_struct.Speed=GPIO_SPEED_FREQ_VERY_HIGH;
		gpio_init_struct.Alternate=GPIO_AF3_TIM8;
		HAL_GPIO_Init(GPIOC,&gpio_init_struct);


	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
	MX_base_time_Init(1000-1,84-1);
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/791358
推荐阅读
相关标签
  

闽ICP备14008679号