SPI

关于DMA的中断回调函数

我目前使用的是STM32cubeIDE来写一段使用DMA读取SPI,

根据网上的示例和经验,SPI使能为发送和接受的主机的情况下,想用DMA读取或发送的话也需要同时使能rx和tx的DMA。

在实际使用中遇到了下面的中断相关的问题,cube mx 中我的相关设置如图所示,在自动生成的代码基础上添加如下的串口发送部分来检查所进入的中断。



Windows_NT2020-03-05_08-18-16.png


image.png


在我的main.c中调用了SPI_Receive_DMA函数来接收数据,


然而最终执行的效果是

image.png


在发送一半的时候进入了接收通道的DMA中断,但是发送结束的时候同时进入了SPI DMA的接收和发送中断,这是为什么呢?是因为SPI是全双工的?那为什么没有同时进入发送一半数据时的中呢?利用DMA接收数据的情况下我是不是不用设置SPI的相关中断,只利用DMA发送完成中断就可以(包括但不限于SPI,串口应该也可以这样吧)?如何关闭发送一半的中断呢?

已邀请:

SSSLENG

赞同来自:

image.png

使能SPI中断后添加接收回调函数,

image.png

自己先回答一下,在DMA发送完成的情况下好像是在image.png中调用了SPI发送完成中断,但是为什么通道一二都在发送完成后进入了中断依然不知道原因。

DIKr

赞同来自:

好几个中断源,你可以进入image.png函数里每个中断元放一个断点,你会发现很神奇

要回复问题请先登录注册