STM32F0xx_DMA收发USART数据配置详细过程
前言
关于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数据的软件工程,感兴趣的朋友请自行下载软件工程源代码进行研究。
本着免费分享的原则,如果你觉得分享内容对你有用,请关注微信公众号“EmbeddDeveloper”还有更多精彩内容等着你。
下载
ST标准外设库和参考手册、数据手册等都可以在ST官网下载,你也可以到我的360云盘下载。关于F0系列芯片的参考手册有多个版本(针对F0不同芯片),但有一个通用版本,就是“STM32F0x128参考手册V8(英文)2015-07”建议参考该手册,以后如果你换用一种型号芯片也方便了解。
今天的软件工程下载地址(360云盘):
查询方式:
https://yunpan.cn/cSbcTa9ijncY2 访问密码 152a
中断方式:
https://yunpan.cn/cSbc7T4cxqWah 访问密码 7e7f
STM32F0xx的资料可以在我360云盘下载:
https://yunpan.cn/cS2PVuHn6X2Bj 访问密码 8c37
准备工作
在昨天的软件工程基础上,新建源程序文件(dma.c 和 dma.h),在工程中添加新建的源程序文件dma.c和使用到标准外设库stm32f0xx_dma.c。如何在工程中添加源文件请看以前的文章“STM32F0_新建软件工程详细过程”,添加完成如下图:
注意:
文件所在位置最好对应目录,方便管理。比如:dma.c放在bsp文件下,添加在工程中Bsp组下面。
数据传输原理
DMA是介于内存(如:一个数组)和外设(如:USART、ADC等)之间进行数据交换的一个模块控制器。从DMA的系统框图(下图)中也能大概看得出整个模块数据传输的原理。关于DMA模块在F0芯片中有几点需要注意,请看最后重点。
配置过程详情
①RCC时钟
该函数位于bsp.c文件下面;
我个人习惯第一步配置时钟,ST官方提供的例程也是把配置时钟放在前面。关于RCC时钟的配置比较重要,有好几次我就是由于没有配置相应RCC时钟,让我找了很久的问题,最后才发现是RCC时钟没有配置。
注意:
外设时钟不要随便添加,比如:RCC_APB1外设不要配置在RCC_APB2时钟里面【如:RCC_APB2PeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);这样能编译过,但是错误的】
我每次都提醒RCC时钟,是因为很多人就是因为时钟而导致软件运行有问题,所以,提醒更多人要注意配置RCC.
②DMA传输(内存->外设)的配置
该函数位于dma.c文件下面;
重点注意:
1、传输方向:这里是内存(数组) -> 外设(串口);
2、通道:使用MDA1通道2(串口发送)。
③DMA传输(外设->内存)的配置
该函数位于dma.c文件下面;
和上面注意的地方一样,也是这两个函数接口之间的差异。
④DMA传输串口的效果
该函数位于main.c文件下面;
这是实际运行的效果函数。
1、上电发送数据“DMA_Start...”;
2、等待接收10字节数据(DMA方式接收10字节数据);
3、DMA方式发送该10字节数据,等待发送完成。
4、依次循环下去。
今天的重点
A、通道的选择
由于F0芯片有些芯片只有DMA1,没有DMA2,有些DMA1有5个通道,有些DMA1有7个通道,这些需要根据手册针对型号进行配置,这里不能选择错误,否则不能使用DMA功能。
B、传输的长度
由于最大只能传输数量为65536,在实际项目开发中,可能有更大的数据需要传输,这时就需要分开传输才行。
C、传输数据宽度
数据的宽度如果传输两者之间一样的话,其实没什么需要注意的。但是,如果数据宽度不同的话,这里就需要注意了,具体见手册,这里只是提出来是重点,感兴趣的朋友请自行研究啊。
说明
STM32F0的芯片软件兼容性很好,可以适用于F0其他很多型号的芯片(具体请看手册、或者亲自测试)。
今天的工程是基于工程“STM32F0xx_TIM基本延时配置详细过程”修改而来,以上实例总结仅供参考,若有不对之处,敬请谅解。
最后
如果你喜欢我分享的内容,你又想了解更多相关内容,请关注文章开头的微信公众号,新内容持续更新中,后期将会有更多精彩内容出现。
STM32F0xx_DMA收发USART数据配置详细过程的更多相关文章
- STM32F0xx_PWR低功耗配置详细过程
Ⅰ.概述 今天总结PWR部分知识,请看“STM32F0x128参考手册V8”第六章.提供的软件工程是关于电源管理中的停机模式,工程比较常见,但也是比较简单的一个实例,根据项目的不同还需要适当修改或者添 ...
- STM32F0xx_FLASH编程(片内)配置详细过程
Ⅰ.概述 关于数据的储存,我觉得编程的人基本上都会使用到,只是看你储存在哪里.STM32的芯片内部FLASH都是可以进行编程的,也就是说可以拿来储存数据.但是,很多做一些小应用程序开发的人都没有利用好 ...
- STM32F0xx_SPI读写(Flash)配置详细过程
Ⅰ.概述 关于SPI(Serial Peripheral Interface)串行外设接口可以说是单片机或者嵌入式软件开发人员必须掌握的一项通信方式,就是你在面试相关工作的时候都可能会问及这个问题.在 ...
- STM32F0xx_DAC输出电压配置详细过程
前言 数模转换DAC的功能在现实应用中所占的分量,相对定时器TIM.串口USART等要小的多,这也是ST为什么内部集成DAC模块相对来说不是那么多的原因.但在有需要使用数模转换功能的项目中,自带的这个 ...
- STM32F0xx_TIM基本延时配置详细过程
前言 关于定时器大家都应该不会陌生,因为处理器都有这个功能.今天总结的F0系列芯片的定时器根据芯片型号不同,数量也不同.定时器分类:基本定时器.通用定时器和高级定时器.计数位数也有不同,有16位的,有 ...
- Redis主从配置详细过程
Redis的主从复制功能非常强大,一个master可以拥有多个slave,而一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构.下面楼主简单的进行一下配置. 1.上面安装 ...
- STM32F0xx_EXIT中断配置详细过程
Ⅰ.概述 EXIT外部中断在使用到按键或者开关控制等应用中比较常见,低功耗中断唤醒也是很常见的一种.因此,EXIT在实际项目开发中也是比较常见的一种. STM32F0中外部中断EXIT属于中断和事件的 ...
- STM32F0xx_看门狗(独立+窗口)配置详细过程
Ⅰ.概述 对于看门狗,我觉得做单片机或者嵌入式开发的人员来说并不陌生,今天总结STM32F0看门狗的功能,F0的看门狗有两种:独立和窗口看门狗. 今天提供两种看门狗的软件工程实例,供大家下载. 两种看 ...
- STM32F0xx_RTC实时时钟配置详细过程
Ⅰ.概述 今天总结RTC(Real Time Clock)实时时钟相关的知识,顺带将BKP简单总结一下. STM32的RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域,即在系统复位或从待 ...
随机推荐
- Spark Standalone模式伪分布式环境搭建
前提:安装好jdk1.7,hadoop 安装步骤: 1.安装scala 下载地址:http://www.scala-lang.org/download/ 配置环境变量: export SCALA_HO ...
- Linux下查看文件和文件夹大小(转)
觉得挺有用的,就转到了自己的博客里,方便以后查询: 转自:http://www.cnblogs.com/benio/archive/2010/10/13/1849946.html 当磁盘大小超过标准时 ...
- [Java] 我的Coding Style 总结
1. 缩进 采用4个空格的缩进方式 2. tab 不采用"hard" tab. 需要更改编辑器的默认配置.将tab值改成4个空格. 3. 换行 3.1 一行不超过75个字符 3.2 ...
- svn老鸟转用git必须理解的概念
不都是SCM代码管理嘛,有很大区别么?很多svn老鸟都是抱着这样的心态去学习git,然后无一幸免地陷入“查阅过很多资料,依然掌握不好”的困境,至少我们团队是这样的. 网上的资料确实已经很多了,却没有把 ...
- Unity AssetBundles and Resources指引 (一)
本文内容主要翻译自下面这篇文章 https://unity3d.com/cn/learn/tutorials/topics/best-practices/guide-assetbundles-and- ...
- gis 导出 dwg,shp
当我们在webgis 想要把某个地块或者多个地块导出dwg或者shp文件的时候怎么办?这个时候最好就是用后台的方式.首先把web gis上的graphic 的polygon提取为坐标的形式(类似于x, ...
- Flex 日期选择器控件
在构建用户界面时,经常用到日期的输入和选择. 输入日期时,用户可以使用键盘输入,也可以在类似于日历的弹出式对话框中,通过鼠标单击所选日期. 在Flex中可以通过日期输入控件实现输入和选择日期.Flex ...
- Swift开发中的一些琐碎
1.Swift中使用OC 1.创建 pch 文件,直接引用需要的头文件 #import"SQLite3.h" 2.修改 pct 路径 ,如下图,就可以使用了 2. Swift 没 ...
- 学习总结 html一般标签的使用
body的属性: bgcolor 页面背景色 background 背景壁纸.图片 text 文字颜色 topmargin 上边距 leftmargin 左边距 rightmargin 右边 ...
- 百度地图API的使用方法
百度地图API 开始学习百度地图API最简单的方式是看一个简单的示例.以下代码创建了一个520x340大小的地图区域并以天安门作为地图的中心: 1. <html> 2. <head& ...