关于dma无法使用的问题,在这里解决:
看了手册上关于dma的介绍,手册上有一个dma的映射图,如下:

I2C1应该用通道6和通道7,所以修改如下:
#define sEE_I2C_DMA DMA1
#define sEE_I2C_DMA_CHANNEL_TX DMA1_Channel6
#define sEE_I2C_DMA_CHANNEL_RX DMA1_Channel7
#define sEE_I2C_DMA_FLAG_TX_TC DMA1_IT_TC6
#define sEE_I2C_DMA_FLAG_TX_GL DMA1_IT_GL6
#define sEE_I2C_DMA_FLAG_RX_TC DMA1_IT_TC7
#define sEE_I2C_DMA_FLAG_RX_GL DMA1_IT_GL7
#define sEE_I2C_DMA_CLK RCC_AHBPeriph_DMA1
#define sEE_I2C_DR_Address ((uint32_t)0x40005410)
/////////////////////////////
#define sEE_USE_DMA
#define sEE_I2C_DMA_TX_IRQn DMA1_Channel6_IRQn
#define sEE_I2C_DMA_RX_IRQn DMA1_Channel7_IRQn
#define sEE_I2C_DMA_TX_IRQHandler DMA1_Channel6_IRQHandler
#define sEE_I2C_DMA_RX_IRQHandler DMA1_Channel7_IRQHandler
#define sEE_I2C_DMA_PREPRIO 0
#define sEE_I2C_DMA_SUBPRIO 0
iic的dma问题解决了,现在可以进行写陀螺仪的程序了,哈哈。
本文主要介绍了在STM32中遇到I2C DMA无法使用的问题及其解决方案。通过查阅手册,确定了I2C1应使用DMA1的通道6和7。通过设置相应的宏定义,如DMA通道、中断标志和时钟,成功解决了DMA问题,现在可以继续进行陀螺仪写入程序的开发。
1371





