赞
踩
目的:用定时器8通道1、2产生相位分别25%50%的PWM波
如图所示设置为比较输出模式,向上计数。当计数值大于比较直输出时产生翻转。即便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); } }
MX_base_time_Init(1000-1,84-1);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。