一.问题环境
整活了一套APM32F407的板子,用了APM32F4xx_SDK_V1.4的标准外设库,正在搭建移植底层BSP框架串口部分,BSP底层配置逻辑是从STM32F407移植过来的。DMA发送时才使能通道及配置外设地址及缓存大小。
串口1DMA配置过程如下:
static USART_DMAConfig_t USART_ComDmaTx(DMA_ChannelType_t channel,DMA_StreamType_t stream,uint32_t peripheralBaseAddr,uint8_t IRQChannel,uint32_t dmaFlag)
{
USART_DMAConfig_t dmaConfig = {
0};
dmaConfig.channel = channel;
dmaConfig.stream = stream;
dmaConfig.dma.channel = channel;
dmaConfig.dma.peripheralBaseAddr = peripheralBaseAddr; //DMA外设地址:USART数据寄存器地址
dmaConfig.dma.memoryBaseAddr = (uint32_t)0; //内存地址,使用时再配置
dmaConfig.dma.dir = DMA_DIR_MEMORYTOPERIPHERAL; //外设地址为目的地址
dmaConfig.dma.bufferSize = (uint32_t)0; //传输时缓冲区大小,使用时再配置
dmaConfig.dma.peripheralInc = DMA_PERIPHERAL_INC_DISABLE; //外设地址固定,不递增
dmaConfig.dma.memoryInc = DMA_MEMORY_INC_ENABLE; //内存地址递增
dmaConfig.dma.peripheralDataSize = DMA_PERIPHERAL_DATA_SIZE_BYTE; //外设数据格式为字节
dmaConfig.dma.memoryDataSize = DMA_MEMORY_DATA_SIZE_BYTE; //内存数据格式为字节
dmaConfig.dma.loopMode = DMA_MODE_NORMAL; //工作在正常模式,不循环
dmaConfig.dma.priority = DMA_PRIORITY_HIGH; //DMA传输优先级为高(VeryHigh/High/Medium/Low)
dmaConfig.dma.fifoMode = DMA_FIFOMODE_DISABLE; //禁能DMA的两个Memory中变量相互访问
dmaConfig.dma.peripheralBurst = DMA_PERIPHERALBURST_SINGLE;
dmaConfig.dma.fifoThreshold = DMA_FIFOTHRESHOLD_QUARTER;
dmaConfig.dma.memoryBurst = DMA_MEMORYBURST_SINGLE;
dmaConfig.nvic.NVIC_IRQChannel = IRQChannel;
dmaConfig.nvic.NVIC_IRQChannelPreemptionPriority = 6; //抢占优先级
dmaConfig.</

最低0.47元/天 解锁文章
92

被折叠的 条评论
为什么被折叠?



