前言
今天总结“STM32F103DMA_USART”,DMA学习过计算机人都明白它是什么意思,就是直接存储器存取(Direct Memory Access),很多人都知道它的意思,但基本上不知道的怎么用,或者不知道它的用途。其实DMA在计算机里面是非常重要的,它可以减少CPU的资源。大家都用U盘拷贝过数据,这就是很常见的DMA应用。假如不适用DMA传输数据,我们拷贝大文件的时候,我们的电脑操作其他应用程序的时候估计会把电脑卡死。
今天就总结一下DMA常用于串口通信的例子,实例源代码请自行下载。由于时间有限,只讲解了DMA发送及中断,接收这一块还没有来得及整理,后期我将以实例讲解,请持续关注。
下载
提供下载的“软件工程”都是在硬件板子上进行多次测试、并保证没问题才上传至360云盘。
今天的软件工程下载地址(360云盘):
https://yunpan.cn/cSdzWimMT8v7S访问密码 4a02
STM32F10x的资料可以在我360云盘下载:
https://yunpan.cn/crBUdUGdYKam2访问密码 ca90
内容讲解
工程概要说明: 今天使用DMA1通道4(这里是重点,下面讲解)传输串口发送的数据。工程配置串口使能DMA传输,DMA按要求发送完成会响应DMA中断,这时在中断里变化一次LED,以提示的作用。关于串口使用DMA接收的原理类似,后期我会举例讲解。
提供的工程以简单为原则,详细中文注释,方便自己方便大家。
关于“STM32F103 DMA_USART”我把重要的几点在下面分别讲述:
一、RCC时钟
该函数位于bsp.c文件下面;
注意:
这里是使用RCC_AHBPeriphClockCmd,我开始调试的时候,使用RCC_APB1PeriphClockCmd,怎么都不行,结果我才发现时钟错了。
二、DMA的NVIC配置
该函数位于bsp.c文件下面;
由于使用DMA中断,这里必须配置才能响应中断。
三、DMA输出配置
该函数位于main.c文件下面;
主要就是我框出来的两点比较重要,串口发送数据寄存器地址,中断需要配置。
这里我封装成一个发送函数接口,所以下面是直接调用这个函数。
四、DMA中断
该函数位于stm32f10x_it.c文件下面;
提出来说,有两点:1、函数必须有。2、需要清除标志位。
五、今天的重点
为什么是“DMA1_Channel4”,开始学习的人很纳闷,其实这里是规定的(定的要求,见手册)。
说明
今天提供的软件工程基于STM32F103大容量芯片,其实只要适当修改工程的部分配置,STM32F1的芯片都适用。