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

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

3天内不再提示

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

STM32单片机 来源:未知 2023-09-22 17:05 次阅读

29761040-5926-11ee-939d-92fbcf53809c.gif

关键字:回调函数,HAL库

目录预览

1.前言

2.实验

3.使用实例

4.小结

01 前言

有客户反馈,使用STM32F4的TIM2结合DMA,产生的PWM波形不符合预期,但是相同的配置使用在TIM3上,得到的PWM波形就是符合预期的。其代码和配置都是从F1移植过来的,在F1上使用TIM2是没有问题的,对于F4的TIM2发生的问题,客户一直没有找到根本原因。

02

实验

根据客户的反馈,我们进行了实验。

硬件:STM32F401RE-NUCLEO

在STM32CubeMX中,将TIM2和TIM3所有参数均做相同的配置,其中配置DMA两端均为halfword长度。

2981025c-5926-11ee-939d-92fbcf53809c.png

29a89e48-5926-11ee-939d-92fbcf53809c.png

生成代码,并定义两个数组如下图所示:

29c57252-5926-11ee-939d-92fbcf53809c.png

在主函数中开启Timer。

29e214a2-5926-11ee-939d-92fbcf53809c.png

我们可以发现,实验结果如客户反馈的,TIM2输出的PWM是不正确的,TIM3输出的PWM是正确的。

2a022026-5926-11ee-939d-92fbcf53809c.png

03 分析

我们的实验中,TIM2和TIM3的配置是完全一样的,即使传输相同的数据,得到的PWM波形也是不同的。为此我们比较了TIM2和TIM3的硬件属性,可以很容易查看出,TIM2的计数器是32bit的,而TIM3的计数器是16bit的。

我想我们已经知道答案了,TIM2的计数器是32bit的,但是我们配置的DMA是halfword长度,这在AHB总线上解析数据时产生了非预期的结果。在调试界面我们也能看到,当问题发生时,TIM2的CCR1竟然比ARR的值要大,或者出现异常值,所以出现异常波形。

2a1fdee0-5926-11ee-939d-92fbcf53809c.png

根本原因在于,对于大部分STM32系列,主设备基于AHB外设进行寻址是不支持byte/half-word传输的,总线会强制将数据转化为32bit传送到总线上,这就是为什么我们看到CCR1的高半字和低半字的值是相同的原因。

当我们将TIM2的DMA外设端修改为word长度,并将内存数组定义为32bit,再次实验,可以发现PWM的波形就是正常的了:

2a36b39a-5926-11ee-939d-92fbcf53809c.png

2a666b44-5926-11ee-939d-92fbcf53809c.png

2a79522c-5926-11ee-939d-92fbcf53809c.png

04 小结

因为F103上没有32bit计数器的Timer,所以客户在F103上并没有出现类似的问题。在使用DMA访问经过AHB转APB的桥接外设时,我们要注意DMA对外设的访问宽度配置问题。

完整内容请点击“阅读原文”下载原文档。


原文标题:应用笔记 | STM32使用DMA产生PWM时波形异常分析

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


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

    关注

    6037

    文章

    44558

    浏览量

    635206
  • PWM
    PWM
    +关注

    关注

    114

    文章

    5186

    浏览量

    213914
  • STM32
    +关注

    关注

    2270

    文章

    10900

    浏览量

    355977

原文标题:应用笔记 | STM32使用DMA产生PWM时波形异常分析

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

收藏 人收藏

    评论

    相关推荐

    STM32产生的1Mhz PWM波作为时钟信号,波形较差怎么解决?

    我用STM32产生的1Mhz PWM波作为时钟信号,波形较差,然后代码参考CSDN的一位博主的,当我读取校准电阻时,通过串口发送至电脑串口读取时,都是0,不知是何原因,寄存器的配置检
    发表于 12-09 07:09

    PWM波形的特性与优化

    PWM波形的特性 1. 定义与基本原理 PWM是一种通过改变脉冲宽度来控制输出电压或电流的技术。在PWM信号中,一个周期内,脉冲的高电平(ON时间)和低电平(OFF时间)的持续时间可以
    的头像 发表于 11-29 09:13 435次阅读

    波形产生电路的工作原理是什么

    波形产生电路是电子学中一个非常重要的概念,它涉及到将电信号转换成特定波形的电路设计。波形产生电路可以产生
    的头像 发表于 09-25 16:17 1273次阅读

    芯海CSU18P88应用笔记

    本应用笔记旨在为用户提供关于CSU18P88的详细信息和使用指南,帮助用户快速开发基于CSU18P88的应用。*附件:CSU18P88应用笔记V1.5.pdf
    发表于 05-16 10:24

    CSU18MX86应用笔记

    本应用笔记旨在为用户提供关于CSU18MX86的详细信息和使用指南,帮助用户快速开发基于CSU18MX86的应用。*附件:CSU18MX86应用笔记_V1.0.pdf
    发表于 05-16 10:21

    如何通过DMA方式在任意GPIO引脚产生PWM波?

    用定时器2的通道1的PWM功能,但不产生CH1的实际输出。而是在定时器2的更新回调函数和比较回调函数里分别置高/置低指定的GPIO引脚。 后来发现,有can接收中断时,输出的pwm波形
    发表于 04-19 06:09

    STM32F030 MDA+PWM驱动ws2812b,起始的50US的低电平是怎么产生

    STM32F030 MDA+PWM 驱动 ws2812b,起始的50US的低电平怎么产生? 现在dma+pwm,倒是可以产生一个800K h
    发表于 04-12 07:23

    f446rct6在使用dma控制pwm占空比时,pwm波形异常的原因?

    需要更新数据时,启动一次dma传输 现象:pwm波的频率,占空比没有问题,但是在启动dma传输的第一个或第二个波形,经常会 出现一个三角形的奇怪
    发表于 04-09 07:45

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

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

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

    ,新建工程,选择型号STM32F051C8; 选择内部时钟,配置时钟为48Mhz, 配置TIM2 CH1为DMA PWM输出; 生成代码后,加入WS2812b的应用代码;在main函数里增加
    发表于 03-13 06:20

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

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

    STM32F407上使用DMA给TIM2的CCR4写值,高位出现0x64没有波形产生怎么处理?

    STM32F407上使用DMA给TIM2的CCR4写值,输出固定个数PWM波个数时,遇见了CCR4的高位与低位同时被写入相同的值,如图所示 在DEBUG时可以看见CCR4的高16位与低16位同时被赋值了,但是在内存中,我只存
    发表于 03-11 08:04

    STM32H750如何使用DMA改变PWM占空比?

    我想在PWM上溢和下溢时,从数组里读出数据更新PWM占空比。STM32CubeMX配置没有找到DMA的触发源,及源地址的设定
    发表于 03-06 07:36

    STM32U5系列TIMER+DMA+DAC应用演示

    有人使用STM32U575芯片的DAC功能。他希望使用TIMER事件触发DMA,并通过DMA传输内存数据到DAC输出寄存器,进而产生相应的DAC输出
    的头像 发表于 01-24 09:10 1835次阅读
    <b class='flag-5'>STM32</b>U5系列TIMER+<b class='flag-5'>DMA</b>+DAC应用演示

    LTC1624 TG、SW波形异常产生的原因?

    项目中使用LTC1624这个IC,用于24V to 5V@1A,原理图如下 现在测试发现 TG 以及 SW引脚的波形异常,黄色为TG、紫色为SW。但是输出5V是正常的。 请帮忙分析一下为何会
    发表于 01-08 07:49