微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 浅谈STM32的DMA模块的使用

浅谈STM32的DMA模块的使用

时间:11-28 来源:互联网 点击:
下面就以我的一个实例来和大家一起学习。这个实例仿真是成功的,我使用的是IAR Embedded Workbench IDE(v4.42)和Manley Mini-kit评估板+ST-Link II来调试,是一个USART+ADC+DMA的例子。

首先,按照相关的资料提示,建立好项目路径、拷贝库文件和相关必要的文件,并建立一个新工程;还有就是设置好IAR IDE的相关设置。一切准备就绪后就开始修改相关的文档:

conf.h文档的修改是根据应用中有启用的相关功能Module。如下图:

ADC模块的启用设置:

DMA模块的启用设置:

USART模块启用的设置:

其他的如flash、GPIO、RCC、NVIC、HSE等就不一一举例,因为这些几乎每个工程都要用到。

再回头看看我的main.c文档,

下图是相关的私有定义

USART的配制如下(9600,8,N,1):

DMA的配置如下:

ADC的配置如下图(采用了2路A/D多通道的ADC模式):

给各个模块配置的时钟使能如下图;在此想罗嗦一句就是在这个位置的设置我没有给DMA配置时钟,造成DMA功能无法正常使用,也就是前面所有说的与我原先的编程风格有较大的变化的原因,想说一句:在项目中所使用的所有功能模块都要在此配置时钟才能正常工作。

GPIO的配置

如果有开中断子程序,请在在NVIC中配置,还可以定义每个中断子程序的优先级别,由于我的工程没有用到,在此就不罗嗦了。

我项目应用到的文件目录如下图:

我的项目仿真结果如下;PA0与GND间接了一个1.5V的干电池,其结果是如中ADC_ConvertedValue[0]的值;PA1悬空,未接模拟信号。

我的硬件仿真平台如下2图:红色的是我AVR mega16LMini开发板,主要是利用了其中的POWER和RS232

用PC端USART数据采集结果:(图中的显示是我将ADC转换后的值给字符串化了)

ST-link II仿真窗口的测试结果与USART采集到的数据结果差异说明:由于Manley的stme32 Mini-kit评估板套件无法给ADC和USART同时组合仿真,我是分别分开仿真和USART数据传输的,所以出现差异。

心得:1、这次学习STM32的MCU,最大的心得是改变我原有的编程思维,原来学习AVR的时候,文件库需要自己写,属于底层操作,如要自己写直接操作各外设的寄存器,复杂的还需要自己写设置函数,对底层要有非常的清楚的认识,编写的代码的工作量也比较大;稍有不慎,容易把寄存器弄错;调试也会花费较大的时间。而STM32的编程风格给我一个全新的视角(哈哈!别拍砖,虽然属菜鸟级别,但比较容易接受新的东西),感觉只要按其提供的资料建立起工程的基本构架,很多都是ST公司提供封装好的接口(类似windows的API),直接调用接口和做少许修改就可以完成你想要的工程结果。

2、清晰的工程构架:ST提供一些工程案例的基本构架,只要熟悉这些构架,对构架做一些适当的修改,你将很轻松的完成你的任务,开发周期也可以缩短很多。请记住:牢记工程构架;

3、哈哈!不想罗嗦的是STM32的速度和丰富的外设。(再罗嗦可能会被成批的砖头拍死,哈哈哈哈!)

4、更有信心用STM32做其他更复杂一些的项目。祝大家好运!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top