关于APM32F407配置串口DMA收发没有数据的问题记录

一.问题环境

​ 整活了一套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.</
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值