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

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

3天内不再提示

远程修改STM32 TIMER占空比的方案

茶话MCU 来源:茶话MCU 作者:茶话MCU 2022-09-30 09:23 次阅读

现在有人有这样一个需求,他使用STM32F429芯片做开发,其中用到32位的TIM2实现3路PWM输出。

另外有上位机跟STM32的UART接口相连,上位机可能不定期地需要通过UART接口给STM32发送新的占空比参数,而且每次都发送3个比较输出通道的参数【12个字节】。

如何快捷地实现这个功能呢?要求收到数据后尽快修改3个比较通道的参数。

e850fd1c-3ffb-11ed-b1c7-dac502259ad0.png

前一篇重点介绍了利用DMAFIFO和UART接收事件触发DMA传输实现了3个CCR寄存器的批量修改。

我们不妨就该话题稍作拓展,不再局限于某个STM32系列,而是从整个STM32的资源上考虑当前需求。上次提到3种实现方案,我想借此机会再给大家介绍另外一种实现方案,以拓宽未来解决类似问题的思路。

STM32 家族里有些系列是内置DMAMUX模块的,即DMA路由器,利用DMAMUX可以实现DMA请求与DMA传输通道的灵活配置;可以将一些通常不能直接产生DMA请求的事件通过它后而可以产生DMA请求;或者基于部分DMA完成事件产生新的DMA请求发起新的传输。目前,STM32家族中内置DMAMUX模块的系列有下面这些:

e8be6a0a-3ffb-11ed-b1c7-dac502259ad0.png

那么 我这里就利用DMAMUX的其中一个特性,即通过它可以让部分DMA完成事件产生新的DMA请求从而发起新的DMA传输。具体到这里,我们让UART 的DMA接收完成事件映射到DMAMUX的DMA generator,再申请新的DMA请求,让DMA将UART 接收到的数据从内存搬运到定时器的3个CCR寄存器,形成一个级联模式。大致流程是:

上位机数据 经UARTRX+DMA 接收到内存, 然后DMA 接收完成事件 经DMAMUX申请的新的DMA请求和 DMA通道,再将内存数据写到定时器的3个比较寄存器控制占空比。

下面我使用STM32G4系列芯片重点演示下实现过程,配置是关键。至于原理细节还请阅读相关手册。

我还是用UART1自发自收来模拟上位机发送新的CCR数据。

TIM2使用3个通道做PWM输出,使用CubeMx工具的参考配置如下:

e8fe104c-3ffb-11ed-b1c7-dac502259ad0.png

我同样开启USART1的TX/RX事件的DMA传输功能。参考配置如下【注意UART RX DMA的配置与前一篇的差别】:

e9191c3e-3ffb-11ed-b1c7-dac502259ad0.png

e9b1e400-3ffb-11ed-b1c7-dac502259ad0.png

注意上图中的事件使能及DMA请求配置。接着看看下面关于DMA generator的相关配置:

e9e4260e-3ffb-11ed-b1c7-dac502259ad0.png

请关注上图中所有配置。其中,DMAMUX生成的DMA请求由DMA2_CH2响应,工作在Circular模式。

我依然使用32位TxData【3】数组存放待传输的3个CCR值,用RxData[3]存放接收的数据。使用CubeMx配置完成后,添加相关用户代码。【基于HAL库组织代码】

ea04b9be-3ffb-11ed-b1c7-dac502259ad0.png

我在UARTDMA接收完成中断的回调函数里对接收到新数据事件做标志更新。

ea912034-3ffb-11ed-b1c7-dac502259ad0.png

为了便于演示,我依然在主程序里循环模拟远程命令,动态修改CCR寄存器的值。参考代码如下截图:

eab43a92-3ffb-11ed-b1c7-dac502259ad0.png

稍作调试我们就可以查看输出结果【借助断点实时查看内存和寄存器的数据】:

eb8415aa-3ffb-11ed-b1c7-dac502259ad0.png

ebb9100c-3ffb-11ed-b1c7-dac502259ad0.png

从上面贴图不难看出,从UART的发送数据、接收到的内存数据、寄存器的数据都在保持同步更新。

在上面演示过程中,我是将DMAMUX生成的新DMA请求申请的 DMA通道配置为Circular模式来着手测试的,如果配置为Normal模式也应该是可以的,只是需将Generator生成的新的DMA配置以及用户代码稍微做些调整,有兴趣的话可以自行测试验证。

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

    关注

    2239

    文章

    10671

    浏览量

    348739
  • 占空比
    +关注

    关注

    0

    文章

    83

    浏览量

    28766
  • uart
    +关注

    关注

    22

    文章

    1159

    浏览量

    99961

原文标题:远程修改STM32 TIMER占空比的方案续1

文章出处:【微信号:stmcu832,微信公众号:茶话MCU】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

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

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

    STM32F103 timer8配置PWM输出中间出现无法输出PWM现象

    我使用STM32F103中的timer8作为PWM的定时器,来驱动电机的控制桥,发现有的时候修改占空比后,配置的IO口无法输出PWM波形,并且使用keil调试是程序上面没有问题。同时我
    发表于 05-03 16:15

    教你一手 基于STM32Cube库的Timer捕获应用

    STMCU官网更新了一则实战经验文件,重点介绍利用STM32CubeMx初始化配置工具和STM32Cube库如何通过TIMER的捕获功能完成对频率、占空比的测试,同时我们对如何解决实
    发表于 06-25 15:05

    CC2530 Timer3 P1_3做为PWM输出,可以修改输出频率,无法修改占空比,请问怎么办?

    CC2530 Timer3 P1_3做为PWM输出,可以修改输出频率,无法修改占空比
    发表于 08-13 08:26

    如何才能找到STM32F4 tim2修改占空比和频率的函数?

    如何才能找到STM32F4 tim2修改占空比和频率的函数?
    发表于 11-15 07:29

    请问STM32输出比较模式如何同时修改占空比和相位?

    STM32输出比较模式如何同时修改占空比和相位?
    发表于 10-15 11:29

    基于STM32f103的输入捕获测频率和占空比

    基于STM32f103的输入捕获测频率和占空比
    发表于 08-02 10:10 122次下载

    stm32捕获占空比_基于STM32超声波避障小车

    stm32捕获占空比_基于STM32超声波避障小车
    发表于 11-22 19:21 46次下载
    <b class='flag-5'>stm32</b>捕获<b class='flag-5'>占空比</b>_基于<b class='flag-5'>STM32</b>超声波避障小车

    stm32捕获占空比_基于STM32超声波避障小车

    stm32捕获占空比_基于STM32超声波避障小车
    发表于 11-23 16:21 56次下载
    <b class='flag-5'>stm32</b>捕获<b class='flag-5'>占空比</b>_基于<b class='flag-5'>STM32</b>超声波避障小车

    STM32产生固定频率和占空比可变的PWM

    STM32产生PWM在笔者的上一个博客《STM32F103C8T6编写简单的程序并烧录到板卡上》中,简单介绍了如何产生一个PWM波,但读者可能对设置PWM过程中修改的参数不是很理解。本篇博客将重点
    发表于 12-01 13:36 72次下载
    <b class='flag-5'>STM32</b>产生固定频率和<b class='flag-5'>占空比</b>可变的PWM

    STC用PCA测量脉宽_「话说定时器系列」之十:PWM输入模式测量脉宽及占空比实验...

    TIMER 的基本应用原理、常规应用等。现在将课程内容整理为文章,针对STM32定时器有基本了解的用户,分享具体的应用实现环节及常见问题解决。1. 实验内容使用STM32定时器PWM输入模式测量脉宽及
    发表于 12-27 19:02 2次下载
    STC用PCA测量脉宽_「话说定时器系列」之十:PWM输入模式测量脉宽及<b class='flag-5'>占空比</b>实验...

    STM32芯片和GD芯片修改外部晶振的方法

    STM32芯片和GD芯片修改外部晶振的方法STM32芯片修改外部晶振的方法GD芯片修改外部晶振的方法注意事项
    发表于 12-31 19:24 34次下载
    <b class='flag-5'>STM32</b>芯片和GD芯片<b class='flag-5'>修改</b>外部晶振的方法

    通过STM32 UART及DMA修改TIMER占空比示例

    新的占空比参数,而且每次都发送3个输出通道的比较参数。如何快捷地实现这个功能呢?要求收到数据后尽快修改3个比较通道的参数。
    的头像 发表于 11-12 15:33 1576次阅读

    如何远程调试修改PLC

    PLC在现场,客户拉一条能通网的网线,远程就可以调试修改PLC。
    的头像 发表于 07-05 10:12 1436次阅读
    如何<b class='flag-5'>远程</b>调试<b class='flag-5'>修改</b>PLC

    STM32L4定时器(TIMER)介绍

    电子发烧友网站提供《STM32L4定时器(TIMER)介绍.pdf》资料免费下载
    发表于 08-01 14:24 0次下载
    <b class='flag-5'>STM32</b>L4定时器(<b class='flag-5'>TIMER</b>)介绍