0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

工程师笔记|TIM DMA burst 输出变频 PWM 波形

STM32单片机 来源:未知 2022-12-26 20:15 次阅读

关键词:TIM, GPDMA

目录预览

1.问题背景

2.TIM DMA burst

3.产生 PWM

4.结论

1.问题背景

客户需要 MCU 输出一组变频的 PWM 波形来控制外围器件,并且不同频率脉冲的个数也不同。STM32U5 芯片拥有 TIM1/TIM8 高级定时器,还有通用定时器TIM2/TIM3/TIM4/TIM5 以及 TIM15/TIM16/TIM17。

TIM 模块中,可通过修改 ARR 寄存器的值来修改 PWM 的频率。如果使用 TIM1/TIM8 或者 TIM15/TIM16/TIM17,则可以通过修改 RCR 与 CCR 寄存器,来控制脉冲个数及占空比。由于要同时修改多个 TIM 寄存器,需要使用 TIM 的 DMA burst 功能来实现此需求。

2.TIM DMA burst

STM32 片内部分 TIMER 在产生单个定时器事件情况下可以基于特定硬件机制触发多个 DMA 请求,这样产生多个连续的 DMA 传输来实现对多个 TIMER 寄存器的批量访问。

这就是所谓的 TIM DMA burst 功能,这里有两个专用寄存器:

TIMx_DCR :DBSS : 触发 DMA burst 的事件源DBL : DMA burst 传输个数 DBA : DMA burst 传输的 TIM 寄存器基地址索引

TIMx_DMAR :TIM DMA Burst 时,DMA 访问此寄存

3.产生 PWM

本文使用 TIM1 来产生 PWM,在 U575 NECLEO 板上测试,MCU 主频为 100MHz。

使用两个频率分别对应 TIM 寄存器组的值如下:ARR/ RCR/ CCR1

uint32_t pulse1[3] = {1000, 2, 500} ;

uint32_t pulse2[3] = {5000, 1, 2500} ;

即输出 3 个 pulse1 的脉冲后,再输出 2 个 pulse2 脉冲,这样交替输出。

3.1.1. TIM1 配置

TIM1 配置如下,使能寄存器预装载功能。

3de6edb0-8514-11ed-bfe3-dac502259ad0.png

3.1.2. GPDMA 配置

使用 GPDMA 通道 12 的 linked list 模式,并配置为循环模式:

3df8049c-8514-11ed-bfe3-dac502259ad0.png

Linked List 配置中,创建一个 list queue,并添加两个 list node,选择 GPDMA 来执行此 list queue,同样配置为循环模式,指定循环起始节点为 TN1,如下图。

3e112e22-8514-11ed-bfe3-dac502259ad0.png

Linked List 节点配置中,使用 TIM1 update 事件来产生 DMA 请求,指定 DMA 目的地址为 TIMx_DMAR 寄存器,源地址为 pulse1 数组地址。TN2 只需将 pulse1 修改为 pulse2即可。

3e2a4d62-8514-11ed-bfe3-dac502259ad0.png

3.1.3. TIM DMA burst

在 CubeMX 生成代码后,添加以下代码,将 TIM 与 DMA 通道绑定,并配置TIMx_DCR 寄存器:

3e430de8-8514-11ed-bfe3-dac502259ad0.png

3.1.4. 测试结果

测试结果如下图,可以看到两个频率的 PWM 波形交替输出,且脉冲个数也符合需求:

3e5ae9c2-8514-11ed-bfe3-dac502259ad0.png

本篇工程师笔记主要通过在TIM 模块中,修改 ARR 寄存器的值来修改 PWM 的频率满足客户需要 MCU 输出一组变频的 PWM 波形控制外围器件的需求。由于文章篇幅有限,完整内容请点击“阅读原文”下载原文档阅读。

3e73f444-8514-11ed-bfe3-dac502259ad0.png

长按扫码关注公众号

更多资讯,尽在STM32

点击“阅读原文”,可下载原文档


原文标题:工程师笔记|TIM DMA burst 输出变频 PWM 波形

文章出处:【微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6002

    文章

    43990

    浏览量

    621068
  • STM32
    +关注

    关注

    2240

    文章

    10675

    浏览量

    348909

原文标题:工程师笔记|TIM DMA burst 输出变频 PWM 波形

文章出处:【微信号:STM32_STM8_MCU,微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    DMA传输控制PWM输出占空比遇到的疑问求解

    问题是这样的: 定义了一个数组,内容为PWM波的占空比对应的脉冲数,本人利用DMA通道将数组传输至TIM1的CCR,TIM1设置为PWM
    发表于 04-25 08:11

    STM32F103VET6使用定时器DMA做比较输出PWM输出波形第一次不正确是怎么回事?

    输出,第二路使用PWM输出的方式,第一路的相位差想到了用DMA方式,我在程序烧录进硬件电路后示波器观察波形
    发表于 03-28 07:27

    STM32F407配置DMA TIM PWM一直无法生效的原因?

    使用HAL库配置 TIM 输出DMA PWM ,几乎差不多的 代码,F103可以启动,但F407无法启动。可否有例程可以参考,感觉资料太少了。 if (HAL_
    发表于 03-21 06:07

    STM32G070CB TIM1使用DMA 方式来产生PWM不同duty的波形,无法进入中断的原因?

    TIM1使用DMA 方式来产生PWM不同duty 的波形,想监控一下DMA 是否完成,但是无法进入中断。以下初始化的配置:(
    发表于 03-20 08:28

    STM32F051C8 PA0不能以DMA的方式输出PWM,没有正确波形输出是哪里出了问题?

    ,新建工程,选择型号STM32F051C8; 选择内部时钟,配置时钟为48Mhz, 配置TIM2 CH1为DMA PWM输出; 生
    发表于 03-13 06:20

    STM32U575 pwmDMA输出波形少一段怎么处理?

    这是我的 DMA 的配置 这是我的PWM配置 上面的波形是F103输出波形。 下面的波形
    发表于 03-13 06:10

    实战经验 | Timer 结合 DMA 2D 通道实现不同波形输出

    不足,建议尝试使用 PWM加滤波方式产生正弦波。同时要求正弦波与固定电平交替输出。因此可用一个 TIM 输出PWM,同时用另一个
    的头像 发表于 10-26 15:20 526次阅读
    实战经验 | Timer 结合 <b class='flag-5'>DMA</b> 2D 通道实现不同<b class='flag-5'>波形</b><b class='flag-5'>输出</b>

    使用MM32F0270 定时器DMA方式输出PWM

    使用MM32F0270 定时器DMA方式输出PWM
    的头像 发表于 10-17 14:47 535次阅读
    使用MM32F0270 定时器<b class='flag-5'>DMA</b>方式<b class='flag-5'>输出</b><b class='flag-5'>PWM</b>

    STM32 TIMER+DMA输出PWM异常案例的问题解析

    有人使用STM32U575的TIMER加上DMAPWM输出。具体就是利用某TIMER的一个通道的比较事件触发DMA,通过DMA修改CCR值
    的头像 发表于 09-28 09:04 4285次阅读
    STM32 TIMER+<b class='flag-5'>DMA</b><b class='flag-5'>输出</b><b class='flag-5'>PWM</b>异常案例的问题解析

    应用笔记 | STM32使用DMA产生PWM波形异常分析

    关键字:回调函数,HAL库   目录预览 1.前言 2.实验 3.使用实例 4.小结 0 1 前言 有客户反馈,使用STM32F4的TIM2结合DMA,产生的PWM波形不符合预期,但是
    的头像 发表于 09-22 17:05 1919次阅读
    应用<b class='flag-5'>笔记</b> | STM32使用<b class='flag-5'>DMA</b>产生<b class='flag-5'>PWM</b>时<b class='flag-5'>波形</b>异常分析

    TIM DMA burst输出变频PWM波形

    电子发烧友网站提供《TIM DMA burst输出变频PWM
    发表于 09-19 17:06 2次下载
    <b class='flag-5'>TIM</b> <b class='flag-5'>DMA</b> <b class='flag-5'>burst</b><b class='flag-5'>输出</b><b class='flag-5'>变频</b><b class='flag-5'>PWM</b><b class='flag-5'>波形</b>

    工程师笔记 | 使用 TIMER 输出比较模式输出相移信号

    工程师笔记 | 使用 TIMER 输出比较模式输出相移信号
    的头像 发表于 09-18 10:58 305次阅读
    <b class='flag-5'>工程师</b><b class='flag-5'>笔记</b> | 使用 TIMER <b class='flag-5'>输出</b>比较模式<b class='flag-5'>输出</b>相移信号

    为什么STM32F401cdu用HAL_TIM_DMABurst_WriteStart无法输出PWM波形

    的定时器中断方式、用HAL_TIM_PWM_Start_DMA都是可以输出波形的。 考虑HAL_TIM_DMABurst_WriteStart的方式,可以随时发既定数量的脉冲,改
    发表于 08-07 12:26

    TIMPWM输出模式写一个步进电机的Stepper库函数

    这是之前写平衡小车时自己用TIMPWM输出模式写了一个步进电机的Stepper库函数。
    的头像 发表于 07-24 14:36 1696次阅读
    用<b class='flag-5'>TIM</b>的<b class='flag-5'>PWM</b><b class='flag-5'>输出</b>模式写一个步进电机的Stepper库函数

    定时器DMA Burst传输无法实现

    有人使用STM32F4系列开发产品,程序运行过程中需要不时地对外输出一串驱动脉冲,并要求这几串脉冲的频率可变、占空比固定。他想到使用基于STM32定时器的DMA BURST传输。具体点说,他期望不时
    的头像 发表于 06-21 16:21 562次阅读
    定时器<b class='flag-5'>DMA</b> <b class='flag-5'>Burst</b>传输无法实现