浅谈STM32的DMA模块的使用
2013-12-22 20:56
288 查看
下面就以我的一个实例来和大家一起学习。这个实例仿真是成功的,我使用的是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
mega16L Mini开发板,主要是利用了其中的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做其他更复杂一些的项目。祝大家好运!(别拍砖头呀!哈哈!)
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
mega16L Mini开发板,主要是利用了其中的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做其他更复杂一些的项目。祝大家好运!(别拍砖头呀!哈哈!)
相关文章推荐
- 浅谈STM32的DMA模块的使用
- 浅谈STM32的DMA模块的使用 By Jack Chang
- 浅谈STM32的DMA模块的使用
- 浅谈STM32的DMA模块的使用
- 浅谈STM32的DMA模块的使用
- 浅谈STM32的DMA模块的使用
- 浅谈STM32的DMA模块的使用
- STM32 DMA使用浅谈
- 浅谈 STM32 硬件I2C的使用 (中断方式 无DMA 无最高优先级)
- STM32 DMA使用浅谈
- 浅谈 STM32 硬件I2C的使用 (中断方式 无DMA 无最高优先级)
- 浅谈 STM32 硬件I2C的使用 (中断方式 无DMA 无最高优先级)
- 浅谈 STM32 硬件I2C的使用 (中断方式 无DMA 无最高优先级)(转)
- STM32DMA使用详解
- STM32使用串口1配合DMA接收不定长数据,减轻CPU载荷
- 11、STM32 的 DMA 使用 - ADC 采用 DMA 模式
- STM32使用DMA从串口读数据到内存
- STM32使用DMA加串口空闲中断接收数据
- STM32 SPI DMA 的使用
- Stm32作为主设备使用DMA接收SPI数据