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

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

3天内不再提示

STM32G4 UART+TIMER+DMA应用示例

茶话MCU 来源:茶话MCU 2023-11-27 10:42 次阅读

这里使用STM32G4系列Nucleo开发板演示如下需求的实现过程。

TIMER2使用3个通道的PWM输出,占空比可能被不时修改。修改的数据通过UART传输过来,UART接收的数据通过DMA传输到内存。新的数据接收后,基于TIMER更新事件触发DMA,利用TIMER的更新事件触发DMA Burst 而一次性用新数据修改3个通道的CCR值以调整PWM输出。每次新数据的接收允许以产生按键动作为准,即每次按键动作允许一次数据更新。

73121b38-8c23-11ee-939d-92fbcf53809c.png

这里有两点要注意,TIM2是32位定时器,3个CCR数据使用32位格式。另外,3个数据的修改基于更新事件一次性修改,不能出现混乱,即不可以某一个时刻3个CCR寄存器的数据不是来自同一批的。为了避免数据混乱这种情况,我这里平常禁止TIMER2的更新事件的产生,只有每次收到新数据后才临时允许更新事件的产生,并在TIMER触发的DMA完成中断里再次禁止更新事件的产生。

使用LPUART从外部接收新数据,选用LPUART主要原因是它的TX/RX刚好跟G4Nucleo开发板的虚拟串口接在一起的,并无其它特别原因。至于按键就选用板载按键PC13,并开启了对应的外部中断。

大致的数据传输流程如下图所示:

73255220-8c23-11ee-939d-92fbcf53809c.png

关于定时器更新事件的能否产生的控制由TIMER的控制寄存器里的UDIS位决定:

734d78ea-8c23-11ee-939d-92fbcf53809c.png

我在代码里对该位的操作,写成宏的方式,便于阅读。

73766a7a-8c23-11ee-939d-92fbcf53809c.png

该位默认为0。若该位被软件置1,定时器的更新事件将不能产生,意味着开启预装功能时,影子寄存器内容不能被更新,同时也不能因溢出操作、计数器复位操作而触发相应中断或DMA请求 。

测试代码的里几个主要的基本操作:

一、响应按键事件,启动UART的DMA接收。

HAL_UART_Receive_DMA(&hlpuart1,(uint8_t*)CCR_rx, 12);

二、基于UART事件的DMA接收完成中断,允许TIMER更新事件的产生,并启动基于TIMER更新事件的DMA Burst 传输。

Permit_UpdateEvt; //Updated event permitted

HAL_TIM_DMABurst_MultiWriteStart(&htim2,TIM_DMABASE_CCR1,TIM_DMA_UPDATE,(uint32_t*)CCR_rx,TIM_DMABURSTLENGTH_3TRANSFERS,3);

三、基于TIMER事件的DMA完成中断,禁止更新事件的产生,并基于串口通信提示可以接受下次数据更新。

__HAL_TIM_CLEAR_FLAG(&htim2,TIM_FLAG_UPDATE);

Forbid_UpdateEvt;//update event forbidden

Indicating_CCR_Updated();

再看看基本的CubeMx配置,配置比较简单。下面是LPUART的配置贴图。

73839f4c-8c23-11ee-939d-92fbcf53809c.png

739e7fc4-8c23-11ee-939d-92fbcf53809c.png

我开启LPUART 的DMA接收,其发送功能使用查询阻塞模式,主要用来输出一些提示信息

下面是TIM2的一些基本配置截图。开启3个通道的PWM输出和基于TIMER更新事件的DMA传输。

73affb46-8c23-11ee-939d-92fbcf53809c.png

73c055c2-8c23-11ee-939d-92fbcf53809c.png

最后,我们来简单验证下。下面截图就是通过串口助手键入新数据后TIMER的输出结果。

73d42066-8c23-11ee-939d-92fbcf53809c.png

整体上,操作流程就是每次按键操作提示可以修改占空比了;串口终端键入新的3个字的数据,基于UART接收事件的DMA传输完成后提示数据收到;基于TIMER事件的DMA完成完成后提示数据更新结束,提示等待下次按键动作。

好,今天的分享就到这里,下次再聊。如果有人想要完整的测试工程代码的话,可以私下留言,只要时间不是过去太久且我这边有保存的话,都可以分享供参考。

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

    关注

    8

    文章

    2767

    浏览量

    72765
  • STM32
    +关注

    关注

    2239

    文章

    10671

    浏览量

    348755
  • uart
    +关注

    关注

    22

    文章

    1159

    浏览量

    99961
  • dma
    dma
    +关注

    关注

    3

    文章

    535

    浏览量

    99021
  • 开发板
    +关注

    关注

    25

    文章

    4429

    浏览量

    93995

原文标题:STM32G4 UART+TIMER+DMA应用示例

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

收藏 人收藏

    评论

    相关推荐

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

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

    请问STM32G4的推挽PWM如何配置?

    STM32G4的推挽PWM如何配置?
    发表于 04-03 06:17

    STM32G4微控制器推出数字电源和电机控制两版探索套件

    意法半导体加大对STM32G4微控制器的开发支持力度,推出数字电源和电机控制两版探索套件,并在最新的STM32CubeG4软件包(v 1.1.0)中增加新的固件示例,帮助开发者探讨竞赛级无人机、专业无人机和小型电动车等应用的数字
    发表于 10-30 08:51

    STM32G4的应用

    STM32G4系列发布也有一段时间了,但是网上关于G4的开发板一直很少,所以一直想体验一下G4的MCU,在我画板的时候,我已经体验到了G4的外设的恐怖,非常非常多的外设。尤其是在定时器
    发表于 08-06 07:42

    STM32G4 TIM PWM输出的使用步骤是怎样的?

    STM32G4 TIM PWM输出的使用步骤是怎样的?
    发表于 01-26 06:03

    STM32G4的相关资料推荐

    有人使用STM32G4系列芯片开发产品。他发现程序中如果遇到除以0的操作时,会跑进出错异常中断而影响程序运行。他想知道能否通过设置,即使发生除以0操作也不让程序跑进异常中断,并期望此时的除...
    发表于 02-07 08:07

    STM32G4软件复位后程序无法运行怎么解决?

    STM32G4软件复位后程序无法运行怎么解决?
    发表于 02-14 07:48

    如何使用STM32CubeMX HAL通过DMA + DAC生成STM32G474信号?

    我正在尝试使用 DMASTM32G474 上使用 DAC 生成周期信号。有很多这样的例子,我过去用 STM32L4 和 F4 也做过同样的事情,没有任何问题。但是,我不确定
    发表于 12-15 07:17

    请问STM32G4是不是不具备双缓冲DMA功能啊?

    请问STM32G4是不是不具备双缓冲DMA功能啊?
    发表于 12-16 06:08

    STM32G4中的HRTIM是否可用?

    大家好,关于应用笔记AN4539 ,STM32G4的所有 MCU 都应支持 HRTIM 外设,参考手册也描述了所有 STM32G4 的 HRTIM 功能,但在某些页面和数据表上没有关于 HRTIM
    发表于 02-08 06:25

    基于STM32G4的电机控制项目开发

    程序在CCM SRAM中才能完美发挥出STM32G4的性能MC SDK V5.4.3中STM32G4默认并未使用CCM SRAM
    发表于 09-08 06:54

    如何使用STM32G4系列微控制器存储器和外围设备

    本参考手册面向应用程序开发人员。它提供了关于如何使用STM32G4系列微控制器存储器和外围设备。 STM32G4系列是一系列具有不同内存大小和封装的微控制器以及外围设备。 有关订购信息、机械
    发表于 09-08 06:59

    基于STM32G4芯片的DAC应用示例分享

    。这里要演示的基本功能就是让DAM将内存数据周期性传输给DAC数据寄存器,最后输出一路正弦波。 结合STM32G4芯片的特性,这里可以有两种实现方式。 第一种,DMA的请求来自于DAC1的转换事件。第二种,DMA的请求来自于定时
    的头像 发表于 11-26 11:39 3919次阅读
    基于<b class='flag-5'>STM32G4</b>芯片的DAC应用<b class='flag-5'>示例</b>分享

    通过STM32 UARTDMA修改TIMER占空比示例

    现在有人谈到这样一个需求,他使用STM32F429芯片做开发,其中用到TIM2做3路PWM输出。另外有个上位机跟STM32UART接口相连,上位机可能不定期地需要通过UART接口给
    的头像 发表于 11-12 15:33 1578次阅读

    STM32G4 Advanced Timer Break功能详解

    电子发烧友网站提供《STM32G4 Advanced Timer Break功能详解.pdf》资料免费下载
    发表于 09-19 15:09 1次下载
    <b class='flag-5'>STM32G4</b> Advanced <b class='flag-5'>Timer</b> Break功能详解