stm32#高级定时器比较输出实验

目的

目的:用定时器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);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值