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单片机】欢迎添加关注!文章转载请注明出处。


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

    关注

    6074

    文章

    45335

    浏览量

    663333
  • PWM
    PWM
    +关注

    关注

    116

    文章

    5847

    浏览量

    223734
  • STM32
    +关注

    关注

    2305

    文章

    11120

    浏览量

    371069

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    SPI主机/从机接收发送都开启DMA通信

    和发送;SPI 作为从机时,接收和发送同时开启 DMA 进行数据接收和发送。 注:本应用笔记对应的代码是基于雅特力提供的V2.x.x 板级支持包(BSP)而开发,对于其他版本BSP,需要注意使用上
    发表于 09-10 16:56

    STM32多通道FFT运算异常的原因?怎么解决?

    问题报告:STM32多通道FFT运算异常 报告人:XXX日期:2025年X月X日硬件平台:STM32F407VGT6开发环境:STM32CubeMX + KeilCMSIS-DSP库版
    发表于 06-19 06:27

    STM32H743定时器使用DMA突发传输功能时,传入指针从常量数组改为变量数组后,传输功能异常,为什么?

    用的是STM32H743开发板。 代码如下: static const uint32_t s_tim_dma[] = {1600, 0x00000000, 500}; //定义为const
    发表于 06-10 06:57

    GPDV6624C应用笔记1.0版

    电子发烧友网站提供《GPDV6624C应用笔记1.0版.pdf》资料免费下载
    发表于 06-06 17:20 0次下载

    搞SK6812灯珠的控制,选择了PWM+DMA的方式,遇到的问题求解决

    最近在搞SK6812灯珠的控制,选择了PWM+DMA的方式,在执行HAL_TIM_PWM_Start_DMA的时候能看到长度和数据都是我配置的值: 但是输出的波形就是不对: DMA
    发表于 04-23 07:44

    STM32使用外部中断触发ADC采样DMA搬运出现两次进入DMA中断的异常情况,怎么解决?

    STM32使用外部中断触发ADC采样DMA搬运出现两次进入DMA中断的异常情况,使用的HAL库+MX配置的,示波器观察波形ADC中断进入一次
    发表于 03-14 12:46

    了解ISL28022的电流和功率计算应用笔记

    本应用笔记讨论数字电源监控器(DPM) ISL28022的内部计算程序。它解释了数据寄存器的位格式,并举例说明了内部数学处理器从测得的分流和总线电压导出电流和功率值的程序步骤。本应用笔记是ISL28022数据手册的摘要。
    的头像 发表于 02-21 11:30 970次阅读
    了解ISL28022的电流和功率计算应<b class='flag-5'>用笔记</b>

    CDK应用笔记

    电子发烧友网站提供《CDK应用笔记.pdf》资料免费下载
    发表于 01-16 16:17 0次下载
    CDK应<b class='flag-5'>用笔记</b>

    ES32VF2264应用笔记

    电子发烧友网站提供《ES32VF2264应用笔记.pdf》资料免费下载
    发表于 01-16 16:14 0次下载
    ES32VF2264应<b class='flag-5'>用笔记</b>

    ES7P0214应用笔记

    电子发烧友网站提供《ES7P0214应用笔记.pdf》资料免费下载
    发表于 01-16 16:06 0次下载
    ES7P0214应<b class='flag-5'>用笔记</b>

    ES7P0213应用笔记

    电子发烧友网站提供《ES7P0213应用笔记.pdf》资料免费下载
    发表于 01-16 15:26 0次下载
    ES7P0213应<b class='flag-5'>用笔记</b>

    AT32F423 PWC应用笔记

    电子发烧友网站提供《AT32F423 PWC应用笔记.pdf》资料免费下载
    发表于 01-15 15:30 0次下载
    AT32F423 PWC应<b class='flag-5'>用笔记</b>

    S32K3系列汽车级MCU应用笔记

    电子发烧友网站提供《S32K3系列汽车级MCU应用笔记.docx》资料免费下载
    发表于 12-30 15:43 2次下载

    S32K3xxICU应用笔记

    S32K3xxICU应用笔记
    发表于 12-30 15:38 2次下载

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

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