配置代码如下: // 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都工作正常。 看了手册,也没有找到原因,请高手指教!! |
STM32F7中FMC接多个通信外设
STM32H7打开DCache后,串口1DMA接受数据位空
关于在做项目时候选用芯片的问题。
STM32G0B1adc+dma采样数据错位
STM32F401下载失败问题
STM32H743+USB3300传输采集的数据前几次会丢包问题
关于F407嵌入式SRAM映射为0x20020000的问题。
Boot0通过10k电阻接地,Boot1作为输入使用被配置成外部中断,现在存在的问题是可能会导致单片机加密无法运行,且无法解密,RDP显示为FF,这是怎么导致的?
STM32F407IGT6烧录异常
RM0090文档和KEIL上的ETH_MMCTIMR寄存器的TGFM位不一致
大概率会出现你说的情形。关于这点我这边也验证过了,如果每次DMA传输1个数据,我的测试结果是100%会出现你说的情形。
当然,即时保持不在中断里清标志位,随着传输数据量加大,就不容易出现你说的情况。这点不难理解,随着数据量的加多,就有更多时间来运行后续启动代码。
如果是这个原因导致的异常的话,应该说跟SPI的初始化先后顺序没关系的,严格地讲是跟使能哪个SPI DMA传输的顺序有关。
多个SPI的DMA传输为何仅1个有效?