实现DMA从存储器到外设的数据传输

本文详细介绍了如何使用DMA从存储器向USART串口传输字符串。通过设置传输长度为字符串的整数倍,实现了串口的连续发送。在DMA编程中,重点包括初始化、取消初始化和数据传输的监控。在初始化和传输过程中,确保了DMA的正确配置,并利用特定的判断语句保证数据的正常写入。

本文讲解的是存储器到USART串口上的传输内容为字符串,设置长度为所发字符串的整数倍,这样就连续在串口发送对应整数次的字符串。

DMA编程实现

在文章的开头,我先列出实现DMA传输的步骤:
程序实现步骤
这里要注意的一个地方是我们有使能对应外设的DMA请求,在DMA的传输中,我们要时刻检测剩余的数据量,当数据传输完毕后,及时反馈提示信息。在该实验中我们要借助串口调试助手和正点原子的电容触摸屏进行显示。

在实现的外设文件dma.c和dma.h中,与DMA相关的功能函数只有两个,那自然不难想到一个用于DMA的配置,一个用于传输。

void MYDMA_Config(DMA_Stream_TypeDef *DMA_Streamx,u32 chx,u32 par,u32 mar,u16 ndtr)
void MYDMA_Enable(DMA_Stream_TypeDef *DMA_Streamx,u16 ndtr);	//使能一次DMA传输

取消初始化

在MYDMA_Config函数里面我们对之前设置过的DMA配置信息进行了清除,见代码

if((u32)DMA_Streamx>(u32)DMA2)//得到当前stream是属于DMA2还是DMA1
	{
	  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2,ENABLE);//DMA2时钟使能 
		
	}else 
	{
	  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1,ENABLE);//DMA1时钟使能 
	}
  DMA_DeInit(DMA_Streamx);
	
	while (DMA_GetCmdStatus(DMA_Streamx) != DISABLE){}//等待DMA可配置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值