
配置代码如下: // SPI2 DMA1: RX-STREAM_3,TX-STREAM_4 LL_DMA_ConfigAddresses(DMA1, LL_DMA_STREAM_3, (uint32_t)&(SPI2->DR), (uint32_t)AIData,LL_DMA_DIRECTION_PERIPH_TO_MEMORY); LL_DMA_SetDataLength(DMA1, LL_DMA_STREAM_3, 6); LL_DMA_EnableIT_TC(DMA1, LL_DMA_STREAM_3); LL_SPI_EnableDMAReq_RX(SPI2); LL_DMA_ConfigAddresses(DMA1, LL_DMA_STREAM_4, (uint32_t)AIData,LL_SPI_DMA_GetRegAddr(SPI2), LL_DMA_GetDataTransferDirection(DMA1, LL_DMA_STREAM_4)); LL_DMA_SetDataLength(DMA1, LL_DMA_STREAM_4, 6); LL_DMA_EnableIT_TC(DMA1, LL_DMA_STREAM_4); LL_SPI_EnableDMAReq_TX(SPI2); // SPI3 DMA1: RX-STREAM_0,TX-STREAM_5 LL_DMA_ConfigAddresses(DMA1, LL_DMA_STREAM_0, (uint32_t)&(SPI3->DR), (uint32_t)&AIData2[6],LL_DMA_DIRECTION_PERIPH_TO_MEMORY); LL_DMA_SetDataLength(DMA1, LL_DMA_STREAM_0, 6); LL_DMA_EnableIT_TC(DMA1, LL_DMA_STREAM_0); LL_SPI_EnableDMAReq_RX(SPI3); LL_DMA_ConfigAddresses(DMA1, LL_DMA_STREAM_5, (uint32_t)&AIData2[6],LL_SPI_DMA_GetRegAddr(SPI3), LL_DMA_GetDataTransferDirection(DMA1, LL_DMA_STREAM_5)); LL_DMA_SetDataLength(DMA1, LL_DMA_STREAM_5, 6); LL_DMA_EnableIT_TC(DMA1, LL_DMA_STREAM_5); LL_SPI_EnableDMAReq_TX(SPI3); 现象: 如果SPI2的配置代码在前,SPI2的DMA就工作正常(触发:LL_DMA_EnableStream(DMA1, LL_DMA_STREAM_3); LL_DMA_EnableStream(DMA1, LL_DMA_STREAM_4);),SPI3就不工作; 如果SPI3的配置代码在前,SPI3的DMA就工作正常(触发:LL_DMA_EnableStream(DMA1, LL_DMA_STREAM_0); LL_DMA_EnableStream(DMA1, LL_DMA_STREAM_5);),SPI2就不工作。 上面的配置代码,只配置1个SPI,SPI2或SPI3的DMA都工作正常。 看了手册,也没有找到原因,请高手指教!! |
STM32 F407骄阳电机版用DMA双缓存接收串口数据时,上电第一次接收区是memory1而不是memory0?
STM32F407骄阳版用DMA双缓存区接收串口数据,上电第一次接收到的数据在memory1而不是memory0
stm32f407无法配置定时器2为全部dma
FreeRTOS问题求解
使用stm32F407连接PHY芯片进行以太网通讯,一插网线就会进入错误中断。
定时器使用DMA突发传输功能时,传入指针从常量数组改为变量数组后,传输功能异常。测试官方用例一样,是何原因?
ST的IMU和地磁计用motionfx库融合后航向角异常的问题
CUEBIDE生成的APP程序,在写入FLASH之后无法正常跳转。
有关Cubeide IAP 问题
STM32U3 IIC通信后,SPI+GPDMA 进入循环发送,DMA无法使能 寄存器USEF=1
大概率会出现你说的情形。关于这点我这边也验证过了,如果每次DMA传输1个数据,我的测试结果是100%会出现你说的情形。
当然,即时保持不在中断里清标志位,随着传输数据量加大,就不容易出现你说的情况。这点不难理解,随着数据量的加多,就有更多时间来运行后续启动代码。
如果是这个原因导致的异常的话,应该说跟SPI的初始化先后顺序没关系的,严格地讲是跟使能哪个SPI DMA传输的顺序有关。
多个SPI的DMA传输为何仅1个有效?