你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F0xx_DMA收发USART数据配置详细过程

[复制链接]
ybhuangfugui 提问时间:2016-5-30 21:33 /
前言
    关于DMA(Direct Memory Access)的功能,前面关注我微信的人应该知道,其实我已经在F1芯片上简单讲了一下。有网友要求在F0讲解一下使用DMA收发串口数据。今天就应网友要求总结一下在F0芯片上,使用DMA方式传输(收发)USART数据的功能。
    在多种芯片上(F0、F1、F2、F3、F4)了解过DMA模块功能的朋友可能会发现一个特点,就是DMA的功能有很多相似的地方,甚至是一样。其实,每一个模块在不同系列芯片(甚至不同厂商)基本上是大同小异,这就是所谓的触类旁通。对于软件开发也是一样的,当你学会某一项语言的开发,接触其他语言的开发就很容易了。这里我想说,其实我对ST大部分芯片(全系列芯片STM8、STM32)都了解过,很多都是相似,只要有时间,后期还会总结一下STM8开发的的文章。当然,更多精彩内容也会出现(如:UCOS操作系统等)。
     DMA的功能和用途这里就不在讲述了,今天重点以查询方式总结STM32F0xx使用DMA收发USART数据配置详细过程 。另外提供一种以中断方式使用DMA收发USART数据的软件工程,感兴趣的朋友请自行下载软件工程源代码进行研究。


下载
    ST标准外设库和参考手册、数据手册等都可以在ST官网下载。关于F0系列芯片的参考手册有多个版本(针对F0不同芯片),但有一个通用版本,就是“STM32F0x128参考手册V8(英文)2015-07”建议参考该手册,以后如果你换用一种型号芯片也方便了解。

今天的软件工程下载地址(360云盘):
查询方式:
http://yunpan.cn/cSbcTa9ijncY2  访问密码 152a

中断方式:
http://yunpan.cn/cSbc7T4cxqWah  访问密码 7e7f

STM32F0xx的资料可以在我360云盘下载:
http://yunpan.cn/cS2PVuHn6X2Bj  访问密码 8c37


准备工作
    在昨天的软件工程基础上,新建源程序文件(dma.c 和 dma.h),在工程中添加新建的源程序文件dma.c和使用到标准外设库stm32f0xx_dma.c。如何在工程中添加源文件请看以前的文章“STM32F0_新建软件工程详细过程”,添加完成如下图:
DMA收发USART数据配置详细过程1.png
注意:
文件所在位置最好对应目录,方便管理。比如:dma.c放在bsp文件下,添加在工程中Bsp组下面。


数据传输原理
    DMA是介于内存(如:一个数组)和外设(如:USART、ADC等)之间进行数据交换的一个模块控制器。从DMA的系统框图(下图)中也能大概看得出整个模块数据传输的原理。关于DMA模块在F0芯片中有几点需要注意,请看最后重点。
DMA收发USART数据配置详细过程2.png


配置过程详情
①RCC时钟
DMA收发USART数据配置详细过程3.png
该函数位于bsp.c文件下面;
我个人习惯第一步配置时钟,ST官方提供的例程也是把配置时钟放在前面。关于RCC时钟的配置比较重要,有好几次我就是由于没有配置相应RCC时钟,让我找了很久的问题,最后才发现是RCC时钟没有配置。
注意:
外设时钟不要随便添加,比如:RCC_APB1外设不要配置在RCC_APB2时钟里面【如:RCC_APB2PeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);这样能编译过,但是错误的
我每次都提醒RCC时钟,是因为很多人就是因为时钟而导致软件运行有问题,所以,提醒更多人要注意配置RCC.


②DMA传输(内存->外设)的配置
DMA收发USART数据配置详细过程4.png
该函数位于dma.c文件下面;
重点注意:
1、传输方向:这里是内存(数组) -> 外设(串口);
2、通道:使用MDA1通道2(串口发送)。


③DMA传输(外设->内存)的配置
DMA收发USART数据配置详细过程5.png
该函数位于dma.c文件下面;
和上面注意的地方一样,也是这两个函数接口之间的差异。


④DMA传输串口的效果
DMA收发USART数据配置详细过程6.png
该函数位于main.c文件下面;
这是实际运行的效果函数。
1、上电发送数据“DMA_Start...”;
2、等待接收10字节数据(DMA方式接收10字节数据);
3、DMA方式发送该10字节数据,等待发送完成。
4、依次循环下去。


今天的重点
A、通道的选择
由于F0芯片有些芯片只有DMA1,没有DMA2,有些DMA15个通道,有些DMA17个通道,这些需要根据手册针对型号进行配置,这里不能选择错误,否则不能使用DMA功能。
DMA收发USART数据配置详细过程7.png
B、传输的长度
由于最大只能传输数量为65536,在实际项目开发中,可能有更大的数据需要传输,这时就需要分开传输才行。
C、传输数据宽度
数据的宽度如果传输两者之间一样的话,其实没什么需要注意的。但是,如果数据宽度不同的话,这里就需要注意了,具体见手册,这里只是提出来是重点,感兴趣的朋友请自行研究啊。
DMA收发USART数据配置详细过程8.png


说明
STM32F0的芯片软件兼容性很好,可以适用于F0其他很多型号的芯片(具体请看手册、或者亲自测试)。
今天的工程是基于工程“STM32F0xx_TIM基本延时配置详细过程”修改而来,以上实例总结仅供参考,若有不对之处,敬请谅解。

收藏 评论6 发布时间:2016-5-30 21:33

举报

6个回答
lzts 回答时间:2016-5-30 22:23:01
学习了.
anny 回答时间:2016-5-31 08:26:23
谢谢分享!!
yklstudent 回答时间:2016-5-31 12:53:46
这个跟串口查询接收与查询发送一样,实际项目中会这么干吗?
lagran 回答时间:2017-9-26 17:22:18
学习了,谢谢分享!
例程的云盘链接失效了,能重新再上传一下吗?
pusiyu-167815 回答时间:2017-11-2 22:57:45
链接失效了,能不能更新一个啊,
游龙_1 回答时间:2018-2-3 16:47:46
地址失效  能发给我一下该贴子的工程学习一下吗

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版