在STM32的Memory-to-Peripheral DMA传输中,避免数据错位的关键在于正确配置外设地址、内存地址、数据宽度和传输方向。首先,外设地址(如USART->DR)必须设置为固定地址,而内存地址(如数组)应设置为递增模式(PINC=0, MINC=1)。其次,数据宽度(PSIZE和MSIZE)必须与外设寄存器宽度匹配,例如USART为8位,则PSIZE=MSIZE=8bit,否则高位数据会错位。此外,传输方向(DIR)设为Memory-to-Peripheral,并确保外设DMA请求使能(如USART_DMACmd)。最后,在启动DMA前,务必先配置外设(如USART)的波特率和模式,再初始化DMA,并检查DMA_CNDTR寄存器确认传输长度。实操建议:使用STM32CubeMX生成初始化代码,可自动配置参数,减少人为错误。若仍错位,检查内存对齐(数组建议使用__align(8))和DMA中断标志清除。
mcuku 阿沐 · 2026-08-27