你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32G4 LPTIM+DMAMUX 实现并行输出应用示例

[复制链接]
攻城狮Melo 发布时间:2026-3-13 17:14

有人使用STM32G4系列芯片做产品开发,想实现如下需求:

定时器每触发一次,DMA分别向GPIOA、 GPIOB、 GPIOC 、GPIOD的相应管脚发送一个高低电平的控制。注意,是针对不同GPIO端口的操作。

简单点说就是基于每次的定时器事件并行修改属于不同GPIO模块的输出管脚电平。结合他目前选用的芯片,我前后考虑过几种方案,都不太好实现,或者说实现起来不太流畅。

后来,想到STM32G4芯片内部的LPTIMER,基于它的定时器事件并借助于DMAMUX模块产生DMA请求来完成。准确地说每次基于同一定时器事件产生多个DMA请求,各请求申请DMA来修改相应GPIO寄存器,这里假设是GPIOx->BSRR寄存器。这个思路是可行的,就此简单分享下,供参考。

image.png

下面的测试验证使用STM32G474 Nucleo 板来完成。简单地实现属于不同GPIO模块的管脚电平翻转,它们分别是PA9、 PB3、 PC3、 PD2管脚。

image.png

现在开始使用STM32CubeMx进行相关配置,下面只摆放关键配置的截图。

下面是LPTIM的配置。这里的配置允许波形输出,其实是否做波形输出不是必须的。调试时有个实际输出方便点。

image.png

下面是有关DMA的配置。LPTIM输出信号的边沿事件用来触发DMA请求。一共生成4个DMA请求,均来自LPTIM的定时器输出边沿事件,上沿或下沿都可以。这里选择LPTIM输出的上沿事件。这四个DMA请求除了申请到的DMA通道不一样外,其它配置都一样。换言之,一个LPTIM事件同时产生4个DMA请求。此处DMA是配置在循环模式,具体应用时可按需配置。

image.png

基于STM32CubeMx完成初始化配置后,添加必要的用户代码。

image.png

下面的API函数都是源于STM32HAL库,根据函数名即可知道做什么用的。

image.png

稍作调试后即可查看输出结果。下面截图中四路输出波形,上面三路是三个不同GPIO的翻转输出,最底下的第四路是LPTIM的输出波形。【当时示波器也就4个通道】

image.png

不难看出,在每次LPTIM输出的信号上沿处触发多路DMA传输,同时修改各个GPIO管脚的输出电平。

下面截图是我关闭LPTIM的实际输出后,将上面用于LPTIM输出示波器通道接到另外1路GPIO输出脚的最终输出波形。

image.png

不难看出,上面的实现还是比较简单的。当然,前提是你先得有相关思路和方向,否则一时半会也无从下手。我们在STM32应用时可以根据芯片资源灵活处理,看菜吃饭。

分享就到此打住,愿今日一瞥哪天也能帮到你,或灵感或思路或直接挪用。祝君好运~!

收藏 评论0 发布时间:2026-3-13 17:14

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版