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

经验分享 | 使用EXIT0同步触发SPI的DMA发送话题

[复制链接]
攻城狮Melo 发布时间:2026-3-16 09:07

有STM32用户欲使用STM32H743 的EXIT0 来同步触发DMA ,以实现SPI 发送数据。现用PE0 作为EXIT0 触发源,当把PE0 配置为外部中断模式,并使用DMAMUX 同步功能时,能够正常触发DMA 。但是,这种情况下有频繁进EXIT0 中断的困扰,他不想每次触发EXTI 中断响应,只想利用EXTI 事件触发DMA 传输,不知这种方式是否可行。他针对这种方式也做了尝试,发现没办法触发DMA 传输。他想知道这样到底行不行?

我们知道,针对STM32 芯片的GPIO 的电平跳变事件可以配置为 外部中断模式和外部事件模式。

外部中断模式用于在外部信号触发时产生中断请求(IRQ ),并可以软件配置是否需要CPU 来处理这个中断。

外部事件模式用于在外部信号触发时产生事件,但不产生中断请求(IRQ )。这种模式下,CPU 不会被打断,事件可以被CPU 或其它外设使用。

现在的问题是,如果PE0 配置成外部事件模式到底能不能用来同步启动SPI 的DMA 传输。我们一起来看看这个话题。

我们不妨先基于外部中断模式做下验证。这里大体要做的事情就是,PE0 配置成外部中断模式,上沿触发。SPI1 基于DMA 方式自发自收,SPI1 的DMA 发送需借助EXTI0 的外部中断事件做启动同步。 先看PE0 的配置,选择外部中断模式,上沿触发有效,平时下拉。另外,通过NVIC 启用CPU 对EXTI0 的中断响应。

image.png

下面是SPI 的DMA 配置,重点看SPI 发送的DMA 配置:

image.png

测试代码很简单。

我定义了用于SPI 收发的两个字符串数组。

uint8_t TXData[]="EXTI trig DMA";

uint8_t RXData[sizeof(TXData)];

然后就是调用相关HAL 库函数,启用DMA 方式的SPI 收发。

HAL_SPI_TransmitReceive_DMA(&hspi1, ( uint8_t )TXData, (uint8_t )RXData,sizeof(TXData));

我用跳线将PE0 管脚与高电平相连,产生触发。可以看到如下验证结果。 image.png

结果符合预期。

下面继续基于外部事件模式做验证。

配置方面只有PE0 的配置有变动,SPI 及DMA 的配置跟上面一样的。PE0 的配置变成下面样子,因为是事件模式,不存在NVIC 配置。

image.png

基于当前PE0 的配置和之前SPI 的DMA 配置,我们发现无论如何调整PE0 的电平都无法触发SPI 的传输。也就是说,基于GPIO的外部事件模式无法作为DMAMUX的同步触发信号。

那么,如果使用PE0 的外部中断模式,但又不启用它的中断响应会怎么样呢?也就是开篇客户的问题。我们来一起来看看。PE0 的配置如下,注意虽然选择了PE0 的外部中断模式,但我没有在NVIC 里开启它的中断响应。见下图配置:

image.png

基于上面PE0 配置和之前的SPI DMA 配置,我们经过测试,将PE0 接到高电平时是可以触发SPI 的DMA 传输的。我们再行验证,可以看到如下结果。见下图:

image.png

好,今天的话题就聊到这里,对于开篇的问题相信看官也有了结论。

文章出处:茶话MCU

收藏 评论0 发布时间:2026-3-16 09:07

举报

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