|
配置代码如下: // 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的adc采样不稳?
STM32F407VET6 能适配哪些FATFS版本文件
stm32 定时器外部时钟1的TI1FP1及TI2FP2的设置问题
STM32F1定时器中触发信号TRC的来源及选择配置是怎么样的
STM32H7A3VGTA QSPI读W25Q128J DMA模式不能工作
stm32 SPI 实现biss.c
无刷电机PWM输出配置
//STM32H7A3VGT6 QSPI的DMA方式无法正常工作
CubeMX+STM32F407VGT6+配置lwip的httpd功能,工程编译报错
workbench5.3.1生成代码问题
微信公众号
手机版
大概率会出现你说的情形。关于这点我这边也验证过了,如果每次DMA传输1个数据,我的测试结果是100%会出现你说的情形。
当然,即时保持不在中断里清标志位,随着传输数据量加大,就不容易出现你说的情况。这点不难理解,随着数据量的加多,就有更多时间来运行后续启动代码。
如果是这个原因导致的异常的话,应该说跟SPI的初始化先后顺序没关系的,严格地讲是跟使能哪个SPI DMA传输的顺序有关。
多个SPI的DMA传输为何仅1个有效?