STM32
直播中

杨春林

7年用户 914经验值
私信 关注
[问答]

STM32H750使能内存保护后DMA异常的原因?怎么解决?

STM32H750 在使能内存保护后启用cache 导致SPI+DMA传输不准确,具体就是调用HAL_SPI_TransmitReceive_DMA 这个函数,读到的数据全是0,但是拿逻辑分析仪看上面显示的数据是正确的。

回帖(2)

魏紫瑜

2024-5-24 14:38:54
开启了D-Cache了话,你要么将相应的缓冲区配置透写属性,要么在读取数据前做CacheInvalidate操作,类似如下函数 SCB_InvalidateDCache_by_Addr ()
。另外,此时申请的内存还需注意32字节对齐,类似  ALIGN_32BYTES(uint8_t aRxBufferBUFFER_ALIGNED_SIZE])的写法。
举报

刘静

2024-5-24 16:55:04
以下是一些建议来解决这个问题:

1. 关闭cache:如果不需要使用cache来提高性能,可以考虑关闭cache,以避免可能的传输问题。

2. 确保DMA传输配置正确:检查DMA传输的配置,确保源地址、目标地址、数据大小等参数设置正确。

3. 检查SPI配置:确保SPI的配置正确,包括时钟设置、数据格式等。

4. 使用中断而非轮询:在DMA传输过程中,可以考虑使用中断而非轮询的方式来处理数据传输完成的事件,以减少可能的延迟。

5. 确保数据对齐:在进行DMA传输时,确保数据对齐,避免由于数据不对齐导致的传输错误。

6. 检查硬件连接:使用逻辑分析仪检查硬件连接,确保SPI和DMA之间的连接没有问题。


举报

更多回帖

发帖
×
20
完善资料,
赚取积分