|
配置代码如下: // 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都工作正常。 看了手册,也没有找到原因,请高手指教!! |
STM32F407 FLASH写入超过最大空间依旧能成功。
简单聊聊STM32的SPI外设
DMAMUX 使用内部外设Request Event(不使用TIM12和LPTIM)
有没有好用的日志系统推荐
STM32N6 SPI无信号问题
全球论坛无法登录
简单平稳过度-回顾2025&说说我心中的ST中文论坛
我最近在用stm32f407做CAN通讯的回环+静默,但是现在显示可以成功发送数据,FIFO接收不到数据,这是什么原因啊
DMA传输完成后,串口与DMA一直处于忙状态
CubeAI如何加载caffe模型
微信公众号
手机版
大概率会出现你说的情形。关于这点我这边也验证过了,如果每次DMA传输1个数据,我的测试结果是100%会出现你说的情形。
当然,即时保持不在中断里清标志位,随着传输数据量加大,就不容易出现你说的情况。这点不难理解,随着数据量的加多,就有更多时间来运行后续启动代码。
如果是这个原因导致的异常的话,应该说跟SPI的初始化先后顺序没关系的,严格地讲是跟使能哪个SPI DMA传输的顺序有关。
多个SPI的DMA传输为何仅1个有效?