STMWoodData
发布时间:2024-12-20 17:58
|
上期在TIM定时器上实现了PWM脉冲输出,本次就换成使用DMA方式实现PWM脉冲。通过DMA方式可以实现任意个不同占空比的脉冲。 下面是定时器的DMA设置。通过Add添加DMA,这里最多只能添加3路控制。这里是通过RAM内存设置的占空比数据发送到TIM的外设输出PWM占空比,所以传输内存到外设方向。 接着是内存地址自增,外设地址按半字宽度,内存地址随便BYTE,HALFWORD,或者WORD宽度都行,就是定义缓存的时候要匹配好字节宽度。这里内存使用BYTE宽度,定义的时候使用uint8_t buff[],这样可以节省内存。内存自增是按对齐的宽度增加地址的。
设置完成后生成代码。 接下来实现DMA方式发送增加代码: uint8_t pwmch1[128]; 定义内存缓存 volatile uint8_t pwm_lock = 0; 定义DMA发送完成标识。 在TIM定时器DMA发送完成中回调函数中设置标志。
接下来在主函数中实现发送函数。在缓存中设置每个PWM脉冲的占空比需要的计数值,然后调用HAL_TIM_PWM_Start_DMA(&htim3,TIM_CHANNEL_1,(uint32_t *)pwmch1,128); 实现DMA发送。后面while(pwm_lock);为等待DMA发送完成。
接下来看看DMA发送的效果。可以看到捕捉的GPIO与预期的PWM占空比一致。
|
经验分享 | 利用TIMER定时和捕获功能实现编解码演示
STM32 LSE 不起振排查指南:五大核心原因与快速解决方案
我中奖啦,收到了STM32开发板,足足开心了一整天啊
我心中的ST中文论坛
经验分享 | 利用STM32 TIMER实现同频跟随输出示例
【STM32C0评测】4、驱动Lorasx126x,实现透传
2025软件工具兔哥知道
经验分享 | 利用STM32 TIMER实现同频跟随输出示例
STM32C0 × HDSMART弘大智控解锁旋钮式智能控制器,开启人机交互新体验
经验分享 | 一个基于TIMER事件的中断响应话题_续
微信公众号
手机版