我们想在传输 DMA 模式下使用 UART 外设。使用 CubeMX 配置它时,没有任何反应,在空项目上尝试时发生事件。
在为内存和外设数据寄存器之间的 DMA 传输手动配置各种寄存器时,行为是正确的,所以我怀疑 HAL 库有问题。
我将错误追踪到 Drivers/
STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c 中的函数 HAL_DMA_Init
以下行(第 251 行)应该为适当的 DMA 流设置配置寄存器:
hdma->实例->CR = tmp;
但是,当单步调试时,它似乎对寄存器没有影响(如 SFR 选项卡所示),即使 tmp 变量具有正确的值......这怎么解释?一个奇怪的硅错误,不允许在
单片机的特定状态下设置寄存器?库中的错误?
同时,我们可以从主函数中设置 DMA 流 CR 寄存器。
也许值得一提的是,该问题出现在两个不同的 MCU 上。