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

什么是 GPIO 事件?如何将事件关联到外设

[复制链接]
patch1582 提问时间:2026-8-26 15:56 / 未解决

在 GPIO 的各类信号中可以产生事件。事件能够连接到外设,从而在无需 CPU 介入的情况下实现相关控制。 但如何建立这种关联、配置外设。我希望可以实现这样一种功能:不借助定时器,直接通过 GPIO 触发 DMA 通道进行数据传输。

能否利用 GPIO 事件,通过外部信号触发 DMA 传输?中断的速度太慢。

如何配置GPIO以触发DMA传输?

除了GPIO,还有哪些外设可以触发DMA传输?

DMA传输的速度有多快?

收藏 评论3 发布时间:2026-8-26 15:56

举报

3个回答
zhoupxa 回答时间:2026-8-26 22:49:55

查查看DMA的触发源有哪些

butterflyspring 回答时间:2026-8-27 09:41:49
前两个问题在之前的贴子里有


什么是 GPIO 事件?如何将事件绑定到外设

哪些外设可以触发DMA可以参考外设描述或者总线架构图。
至于DMA传输多快没有固定公式,与很多因素有关

  • 具体 STM32 型号
  • DMA 类型(DMA / BDMA / MDMA /     GPDMA / DMA2D 等)
  • 总线架构(AHBAPBAXID1/D2/D3 domain
  • 外设与存储器访问宽度(8/16/32/64 bit
  • 是否有总线竞争
  • 是否有 FIFO / burst 传输
  • 源地址和目标地址所在的总线域
  • 时钟频率
直接的方式就是测试一下
DazzlingOkami 回答时间:2026-8-27 16:04:41

如果是STM32F系列的单片机,GPIO无法直接触发DMA传输,但可以通过定时器的输入捕获模式间接实现。

如果是STM32H系列或G系列的单片机,则有DMAMUX功能来通过GPIO触发DMA传输。

将GPIO配置为事件输出模式,GPIO_InitStruct.Mode = GPIO_MODE_EVT_RISING;

最后在配置DMA时将触发源改为DMAMUX hdma.Init.Request = BDMA_REQUEST_GENERATOR0;

然后配置DMAMUX,大概是调用HAL_DMAEx_ConfigMuxRequestGenerator进行配置,可以实现当GPIO触发后,执行一次或多次DMA传输。

整个过程都不会触发中断。

STM32单片机上支持数据传输的外设和定时器基本上都支持触发DMA请求,但是需要进行适当的配置来使得当特定事件执行时触发DMA请求。

DMA传输的速度并不是一个容易量化的参数,抛开那些拖慢传输速度低速外设(如串口),传输速度主要受限与数据搬运的那两条总线,即数据的输入通道和输出通道,可以去看看参考手册的System architecture章节。其中有各个通道的数据宽度。以STM32H7这样的单片机来说DMA传输甚至没有CPU直接传输来的快,但是DMA存在的意义不是快,而是它将CPU从重复的数据搬运工作中解放出来去做更重要的事。只有当外设的速度高于DMA的速度时(UNDER_RUN故障)才考虑DMA传输速度是否需要优化,比如开启FIFO、增加burst、减少总线竞争。

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