【STM32杂记】CUEBMX配置---使用DMA精确控制PWM脉冲个数

前言

之前有一个人让我帮他配置了一下用DMA控制脉冲个数的程序,他有固件库的版本,让我帮他弄个CUBEMX版本的,我之前也没弄过,试了一下,感觉这个还是挺有价值,虽然也不是很难,不过有些细节问题还是需要注意一下。后面一些做步进电机控制的同学可能会参考。

CUBEMX配置:

上面是控制4路PWM,存储4路PWM的占空比数据,声明的是4000,所以就是存储4000个占空比数据,也就是,最多控制4000个脉冲,如果需要增加,自行修改。

代码:

/**
  ******************************************************************************
  * 文件名 :       pulse.c
  * 描述   :      此文件用于控制可控数目的脉冲
	* 作者   :      
  ******************************************************************************
			此文件用于控制可控数目的脉冲
		
  *
  ******************************************************************************
  */

#include "pulse.h"
#include "tim.h"

PULSE Pulse;

/****************************************************************************
 *
 * 函数名:          pulse_StructInit
 * 输入:            无
 * 输出:            无
 * 返回值:           无
 * 描述:            结构体初始化
 ***************************************************************************/
void pulse_StructInit (PULSE *pPulse)
{
	uint32_t i = 0;
	for(i = 0; i < 4000; i++)
	{
		pPulse->u32_pulseBuf1[i] = 500;
		pPulse->u32_pulseBuf2[i] = 500;
		pPulse->u32_pulseBuf3[i] = 500;
		pPulse->u32_pulseBuf4[i] = 500;
	}
}

/****************************************************************************
 *
 * 函数名:          pulse_Tim1Ch1Counter
 * 输入:            脉冲个数
 * 输出:            无
 * 返回值:           无
 * 描述:            TIM1通道1脉冲输出
 ***************************************************************************/
void pulse_Tim1Ch1Counter (uint32_t num , PULSE *pPulse)
{
	uint32_t pulseNum = (num * 4);
	HAL_TIM_PWM_Init(&htim1);
	HAL_TIM_PWM_Start_DMA(&htim1, TIM_CHANNEL_1,(uint32_t *)pPulse->u32_pulseBuf1,pulseNum);		
}

/****************************************************************************
 *
 * 函数名:          pulse_Tim1Ch4Counter
 * 输入:            脉冲个数
 * 输出:            无
 * 返回值:           无
 * 描述:            TIM1通道4脉冲输出
 ***************************************************************************/
void pulse_Tim1Ch4Counter (uint32_t num , PULSE *pPulse)
{
	uint32_t pulseNum = (num * 4);
	HAL_TIM_PWM_Init(&htim1);
	HAL_TIM_PWM_Start_DMA(&htim1, TIM_CHANNEL_4,(uint32_t *)pPulse->u32_pulseBuf2,pulseNum);		
}

/****************************************************************************
 *
 * 函数名:          pulse_Tim2Ch3Counter
 * 输入:            脉冲个数
 * 输出:            无
 * 返回值:           无
 * 描述:            TIM2通道3脉冲输出
 ***************************************************************************/
void pulse_Tim2Ch3Counter (uint32_t num , PULSE *pPulse)
{
	uint32_t pulseNum = (num * 4);
	HAL_TIM_PWM_Init(&htim2);
	HAL_TIM_PWM_Start_DMA(&htim2, TIM_CHANNEL_3,(uint32_t *)pPulse->u32_pulseBuf3,pulseNum);		
}

/****************************************************************************
 *
 * 函数名:          pulse_Tim2Ch4Counter
 * 输入:            脉冲个数
 * 输出:            无
 * 返回值:           无
 * 描述:            TIM2通道4脉冲输出
 ***************************************************************************/
void pulse_Tim2Ch4Counter(uint32_t num , PULSE *pPulse)
{
	uint32_t pulseNum = (num * 4);
	HAL_TIM_PWM_Init(&htim2);
	HAL_TIM_PWM_Start_DMA(&htim2, TIM_CHANNEL_4,(uint32_t *)pPulse->u32_pulseBuf4,pulseNum);	
}
  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值