【STM32】【CubeMX】DMA正常模式和循环模式的区别

以定时器输出PWM的DMA配置为例

注意:

正常模式和循环模式开启之后,如果不调用相应的停止传输函数,DMA都会一直传输数据。

还是以定时器输出PWM为例,相应的DMA开启函数和停止函数如下:

//开始传输 
HAL_TIM_PWM_Start_DMA(&htim3, TIM_CHANNEL_1, Data, ONCE_PWM_CNT);//Data为控制占空比的数组ONCE_PWM_CNT为数组大小

//停止传输
HAL_TIM_PWM_Stop_DMA(&htim3, TIM_CHANNEL_1);

区别一:

正常模式传输完一次后会一直传输最后一位数据,且保持下去,逻辑分析仪抓取的数据如下:

DMA模式传输完一次之后又从头开始传输

区别二: 

进回调的次数不同,正常模式只进一次回调,不管关不关闭DMA,之后都不再进回调;而循环模式传输完一次进一次回调,不关闭DMA传输会一直进回调。

//DMA传输完一次进回调函数
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef * htim)
{
    if(htim == &htim3)
    {

		HAL_TIM_PWM_Stop_DMA(&htim3, TIM_CHANNEL_1);
      
    }
}

使用场景:

看情况,如果只传输一次的,可以选正常模式,传输完一次后在回调里关闭DMA

如果是传输一段数据,且要循环发送,可以选循环模式

如果是要传输占空比全一样的pwm,也就是数组里面的数据都是一样的,用来驱动步进电机,那其实选哪个模式都是一样的。

总之原理就是上面的原理,只要能满足实际需求即可。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值