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

SPI+DMA一直发会进入HAL_BUSY无法跳出

[复制链接]
Rosireity 提问时间:2025-6-25 16:45 / 未解决

image.png

在while中一直使用HAL_SPI_TransmitReceive_DMA发送接收数据,循环几次后就会一直为HAL_BUSY状态,查看SPI状态结构体可看到State始终为HAL_SPI_STATE_BUSY_TX_RX状态。

image.png

通过查看HAL库,可以找到State在HAL_SPI_IRQHandler中可被设置为READY状态。但实际使用时,会有中断函数不触发的情况出现,因此State始终为HAL_SPI_STATE_BUSY_TX_RX状态,导致HAL_SPI_TransmitReceive_DMA无法正常运行,我不知道是不是哪里设置不对还是其他问题导致的。

这是STM32Cube的中断设置

image.png

收藏 评论11 发布时间:2025-6-25 16:45

举报

11个回答
butterflyspring 回答时间:2025-6-26 16:06:19
你的SPI 的时钟频率是多少?

我这边测试,当时钟频率高的时候,如果IO 速度设置过低会导致 SPI的完成中断没触发。
且波形已经变形了,应该超出了范围。

可以试着检查一下IO 速度或降低一下时钟频率试试。
Rosireity 回答时间:2025-6-27 10:46:35

butterflyspring 发表于 2025-6-26 16:06
你的SPI 的时钟频率是多少?</p>
<p>我这边测试,当时钟频率高的时候,如果IO 速度设置过低会导致 SPI的完成中断 ...

时钟频率我已经拉到3.9MBits左右了 在主频250Mhz下做了64分频 依然会出现

butterflyspring 回答时间:2025-6-27 15:30:12

Rosireity 发表于 2025-6-27 10:46
时钟频率我已经拉到3.9MBits左右了 在主频250Mhz下做了64分频 依然会出现
...

看一下时钟波形是否正常。

我这边验证时,发现输出波形不正常,就无法触发完成中断。

可以将clock继续降低到几百k,验证一下。

Rosireity 回答时间:7 天前

butterflyspring 发表于 2025-6-27 15:30
看一下时钟波形是否正常。</p>
<p>

image.png

查看波形是正常的 此为中断不触发前最后一个发送的sclk

image.png

这是整个的,20s前时刻上电启动,25s后左右由于中断不触发,标志位不置位,停止发波

butterflyspring 回答时间:7 天前
这个图是逻辑分析的吧。它比较直观的看出有没有,看不出来波形的幅值,上升沿等信息。

最好找个示波器看一下具体波形的样子。
Rosireity 回答时间:6 天前

butterflyspring 发表于 2025-6-30 14:34
这个图是逻辑分析的吧。它比较直观的看出有没有,看不出来波形的幅值,上升沿等信息。</p>
<p>最好找个示波器看一 ...

我又深度测试了一下,发现一个明显的对比,我在mxcube初始化了lpuart1,uart4,uart5三个串口,但是我没有使用它们,只是初始化,如果我将三个串口的初始化屏蔽掉,中断触发就是正常的,我打开任意一个串口,都会出现中断不触发,而且初始化越多串口,出现屏蔽不触发的时候越早

butterflyspring 回答时间:6 天前
我刚才也添加了这三个外设,没调用,测试了一会儿,一直都正常。


附件是我测试的代码,当然SPI1是悬空的,可以在你的板上试试看。

STM32H563 SPIDMA busy.PNG

TEST SPIDMA ready signal.7z

下载

7.96 MB, 下载次数: 1, 下载积分: ST金币 -1

Rosireity 回答时间:6 天前

butterflyspring 发表于 2025-7-1 14:54
我刚才也添加了这三个外设,没调用,测试了一会儿,一直都正常。</p>
<p>

多谢,不过方便帮我导出一个Keil的工程吗,我没有EWARM,我打开IOC发现咱们的IOC版本不一致,我想用你的IOC版本生成的工程来测试

啦啦啦啦啦啦啦啦 回答时间:5 天前

可以用HAL_SPI_Transmit+HAL_SPI_Receive重写写一下收发逻辑试试

Rosireity 回答时间:5 天前

啦啦啦啦啦啦啦啦 发表于 2025-7-2 16:55
可以用HAL_SPI_Transmit+HAL_SPI_Receive重写写一下收发逻辑试试

没用 我测试了只用HAL_SPI_Transmit_DMA/IT 一样不触发中断

butterflyspring 回答时间:4 天前
附件是导出来的KEIL 工程,试试看。

Core.zip

下载

7.7 MB, 下载次数: 0, 下载积分: ST金币 -1

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