Embedded 无法在stm32f412上写入DMA_SxCR启用位

Embedded 无法在stm32f412上写入DMA_SxCR启用位,embedded,stm32,stm32f4,Embedded,Stm32,Stm32f4,我正在尝试在我的stm32f412上启动DMA传输,我已经将所有设置设置到我正在为TX和RX设置DMA通道/流上的控制寄存器的位置。我可以在TX上设置启用(位0),但不能在RX上设置启用 对于硬件清除的位,数据表有3个选项:1.)在DMA传输结束时(流准备好配置)2.)如果AHB主总线上发生传输错误3.)当内存AHB端口上的FIFO阈值与突发大小不兼容时 我不认为这是第一次或第三次,因为DMA传输还没有开始,而且没有配置突发,它只是一次传输。我不太确定第二个是什么意思,但是错误寄存器中没有标记传

我正在尝试在我的stm32f412上启动DMA传输,我已经将所有设置设置到我正在为TX和RX设置DMA通道/流上的控制寄存器的位置。我可以在TX上设置启用(位0),但不能在RX上设置启用

对于硬件清除的位,数据表有3个选项:1.)在DMA传输结束时(流准备好配置)2.)如果AHB主总线上发生传输错误3.)当内存AHB端口上的FIFO阈值与突发大小不兼容时

我不认为这是第一次或第三次,因为DMA传输还没有开始,而且没有配置突发,它只是一次传输。我不太确定第二个是什么意思,但是错误寄存器中没有标记传输错误

如有任何途径可供研究,将不胜感激


编辑:啊,我在找错误的寄存器来查找DMA_LISR和_HISR。在我的RX通道上有一个传输错误。

参考手册中对DMA_SxCR_EN位的描述:

注意:在将EN位设置为“1”以开始新传输之前,与 必须清除DMA_LISR或DMA_HISR寄存器中的流

根据我的经验,这些事件标志不仅包括错误标志,还包括常规事件标志,如传输完成或半传输。在某些情况下,我还清除了FIFO错误标志,尽管我记不起它背后的原因


这个问题表现为“DMA只能工作一次”。在您的情况下,它甚至一次都不起作用,因此可能存在其他问题。尽管如此,我认为在启用流之前尝试清除所有状态标志是值得的。

哦,该死,我看到的是DMA_LISR和HISR的错误寄存器。用L/HIFCR清除通道状态是解决方案,甚至不需要清除所有错误。当我第一次尝试将一些F0和F1代码移植到F4时,我感到非常困惑。F0和F1 DMA的工作方式完全不同,我完全没有注意到这一点。是的,超级特定SPI/DMA启用顺序的整个过程非常令人沮丧。