STM32L431使用TIM单脉冲模式实现指定数量PWM输出

该博客介绍了如何通过高级定时器的单脉冲模式和重复计数功能,实现生成指定数量的PWM脉冲,并在完成设定次数后自动停止。在示例代码中,详细展示了初始化过程和配置细节,包括定时器时基设置、重复计数配置、输出模式等,以产生50%占空比的PWM信号,并最终启用定时器输出。
摘要由CSDN通过智能技术生成

有些场合我们需要生成指定个数的PWM,实现方法有很多,这里我介绍一个通过高级定时器的单脉冲模式+重复计数实现指定个数PWM输出,生成完成后会自动停止。

实现程序如下:

/**
  * 说明 : 产生指定个数脉冲
  * 参数 : 无
  * 返回 : 无
  */
void Pulse_Timer_Init(void)
{
    LL_TIM_OC_InitTypeDef TIM_OC_InitStruct = {0};	
    LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
	
	LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOA);	
    LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_TIM1);
	
	/** PWM_OUT->PA11->TIM1_CH4 */
	GPIO_InitStruct.Pin=LL_GPIO_PIN_11;
	GPIO_InitStruct.Mode=LL_GPIO_MODE_ALTERNATE;
	GPIO_InitStruct.Speed=LL_GPIO_SPEED_FREQ_HIGH;
	GPIO_InitStruct.Pull=LL_GPIO_PULL_NO;
	GPIO_InitStruct.Alternate=LL_GPIO_AF_1;
	LL_GPIO_Init(GPIOA, &GPIO_InitStruct);	
	
	/** 定时器时基配置(Fpwm=80M/40/10=200KHz) */
	LL_TIM_SetPrescaler(TIM1, 39);	
	LL_TIM_SetAutoReload(TIM1, 9);	  /*!< 200KHz */
	/** 重复计数 */
	LL_TIM_SetRepetitionCounter(TIM1, 7); /*!< 这里设置要输出的PWM个数 这里为7+1=8个 */

	LL_TIM_SetCounterMode(TIM1, LL_TIM_COUNTERMODE_UP);
    LL_TIM_EnableARRPreload(TIM1);
    LL_TIM_SetClockSource(TIM1, LL_TIM_CLOCKSOURCE_INTERNAL);
	/** 不使用触发 */
    LL_TIM_SetTriggerOutput(TIM1, LL_TIM_TRGO_RESET);
    /** 失能从模式 */
    LL_TIM_DisableMasterSlaveMode(TIM1);
	/** 使能单脉冲模式 */
	LL_TIM_SetOnePulseMode(TIM1, LL_TIM_ONEPULSEMODE_SINGLE);
	
	
	/** 输出模式配置:CH4 */
    TIM_OC_InitStruct.OCMode = LL_TIM_OCMODE_PWM1;
    TIM_OC_InitStruct.OCState = LL_TIM_OCSTATE_DISABLE;
    TIM_OC_InitStruct.CompareValue = 5;            /*!< 50%占空比 */
    TIM_OC_InitStruct.OCPolarity = LL_TIM_OCPOLARITY_LOW;
    LL_TIM_OC_Init(TIM1, LL_TIM_CHANNEL_CH4, &TIM_OC_InitStruct);	
	LL_TIM_OC_EnablePreload(TIM1, LL_TIM_CHANNEL_CH4);
    LL_TIM_CC_EnableChannel(TIM1, LL_TIM_CHANNEL_CH4);	
    /** 用高级定时器输出PWM时需要调用这个函数 */
	LL_TIM_EnableAllOutputs(TIM1);
	LL_TIM_GenerateEvent_UPDATE(TIM1); /*!< 记得调用这个函数 */ 
    /** 使能定时器 */
    LL_TIM_EnableCounter(TIM1);
}

测试结果如下:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值