这篇文章是串口中断的文章——STM32基于CubeMX的高速串口收发程序(中断模式)比较有帮助。

http://www.stmcu.org.cn/module/forum/thread-616613-1-1.html

看到大家经常写一些关于串口的问题,我也尝试开一个使用串口的工程。

简单的要求是,USART1和USART2之间互相转发。

发现使用CubeMX平台,建立测试工程没有难度,情况如下:

1. 配置管脚,使用BluePill最小板,PC13接有LED:

MCU是STM32F103C8T6,这个不重要. 不要忘记配置SWD调试接口。

(看得出,中断里面是收到一个字符发送一个字符。 发送是直接发送,不处理发送中断。)

大功告成了!! 编译后烧录。

测试条件,使用两个UART转USB板子(FTDI)和sscom5上位机程序(开两个),发送区都摆放700多个字符,以10ms的间隔连续发送。

测试结果,速度115200bps和1Mbps,双向同时收发100万字符无差错。 2Mbps,单方向100万字符无差错。

(高速测试时,需要修改main.c里面的串口速度BaudRate配置。 我没有测试“自动波特率”的模式是否正常。)

最后,完整的工程见附件。

此外,http://www.waveshare.net/study/article-644-1.html

微雪教程也是很不错的学习cubemx的资料。这里讲述了两个实例的手把手过程,空闲中断提供了源码,这个移植到了C8T6中,可以实现单片机接收串口助手发送的消息,然后,发送会串口助手中。

中断接收的方式也可以按照网页的步骤完成。这个比较简单。如果接收的数据比较频繁,100ms以内发送一次,那比较适合空闲dma接收,如果300mx以上发送一次,则中断接收没问题,stm毕竟是世界级的厂商。可靠性还是可以的。上面例程中以10ms的间隔连续发送,单方向100万字符都无差错。当然系统工程大了还是需要考虑的,否则cpu比较满负荷。

数据量大的首选空闲+dma方式。

[原创] STM32基于CubeMX的高速串口收发程序(DMA模式)http://www.stmcu.org.cn/module/forum/thread-619702-1-1.html

这个文章的说明如下:

周末有时间,测试了一下STM32F103的DMA串口收发程序,基于CubeMX的,结果却是令人大失所望。

我在去年,测试了一下【中断模式】的,结果是速度超快。

速度115200bps和1Mbps,双向同时收发100万字符无差错。 2Mbps,单方向100万字符无差错。

详情请见:  STM32基于CubeMX的高速串口收发程序(中断模式)

那时就有网友,问我为什么不用DMA模式,我也认为DMA的好处多多,只是没有时间验证一下。

现在,我得到的结果是,DMA模式用在UART这种低速外设上面,可能性能并不好,不如中断模式的。

请网友们给看一看,希望我的代码有问题。

先说我的测试结果吧:

STM32F103C8T6 Bluepill板,MCU时钟72MHz,用CubeMX配置出DMA模式的两个串口收发。

添加少量代码,就做成了两个串口互相收发。 与上面说的中断模式的用法一样。

结果是,115200波特率,以10ms间隔发送接收40个字符,单方向正常,双方向同时收发就丢失数据。

如果时间间隔放到200ms,双方向同时收发,也能正常了。

下面,看看我用的代码:

CubeMX的配置过程,就不累叙了,附件里面有配置文件。

上面的代码,也是参考了网上网友的帖子。 希望网友指出问题,和给出更好的代码方案。

也还听说串口DMA有三种方法,我这里用的只是其中之一的“空闲中断”法。

附完整代码:

今天,有做了一些测试。从使用的角度来看,一楼附件的程序是可以使用的,只要,

1. 数据包长度不超过DMA缓存的长度。2. 发送的间隔不少于200ms。

就可以115200双向同时收发无差错。

至于单方向收发,1Mbps,2Mbps,都没有问题的,放心使用。

cubemx学习tm32可以首选微雪课堂,比较好,翔实,易懂。

stmcu的帖子有下载的代码,微雪提供了空闲中断的串口代码。

cubemx+stm32串口学习汇总资料的更多相关文章

  1. stm32串口学习笔记

    stm32作为现在嵌入式物联网单片机行业中经常要用多的技术,相信大家都有所接触,今天这篇就给大家详细的分析下有关于stm32的出口,还不是很清楚的朋友要注意看看了哦,在最后还会为大家分享有些关于stm ...

  2. stm32串口学习(二)

    今天继续学习stm32的串口编程(利用库函数).上次我们说了串口的发送,这次我们说接收. 接收可以用查询的方法,也可以用中断.显然,工程中多用中断的方式,那么就来看看中断接收. 代码其实很简单,基本的 ...

  3. stm32串口学习(一)

    串口在工作中经常用到,今天我们从零开始学习stm32的串口编程(利用库函数). 先从最简单的情况开始,假设我们要实现的功能就是串口发送一个字节,不考虑接收,也不考虑中断. 那么要解决两个问题: 1 串 ...

  4. 机器学习&深度学习经典资料汇总,data.gov.uk大量公开数据

    <Brief History of Machine Learning> 介绍:这是一篇介绍机器学习历史的文章,介绍很全面,从感知机.神经网络.决策树.SVM.Adaboost到随机森林.D ...

  5. [转载]机器学习&深度学习经典资料汇总,全到让人震惊

    自学成才秘籍!机器学习&深度学习经典资料汇总 转自:中国大数据: http://www.thebigdata.cn/JiShuBoKe/13299.html [日期:2015-01-27] 来 ...

  6. STM32串口中断的一些资料

    在研究STM32串口接收发送中断的时候找到不少不错的资料,现在备份在这里.以供自己查阅,以及方便其他人. TC ====TXE 顺便预告下最近会写个有关串口处理数据的帖子,从查询和中断方面以及数据处理 ...

  7. STM32串口通信配置(USART1+USART2+USART3+UART4) (转)

    一.串口一的配置(初始化+中断配置+中断接收函数) 1 /*====================================================================== ...

  8. 嵌入式单片机之stm32串口你懂了多少!!

    stm32作为现在嵌入式物联网单片机行业中经常要用多的技术,相信大家都有所接触,今天这篇就给大家详细的分析下有关于stm32的出口,还不是很清楚的朋友要注意看看了哦,在最后还会为大家分享有些关于stm ...

  9. 单片机stm32串口分析

    stm32作为现在嵌入式物联网单片机行业中经常要用多的技术,相信大家都有所接触,今天这篇就给大家详细的分析下有关于stm32的出口,还不是很清楚的朋友要注意看看了哦,在最后还会为大家分享有些关于stm ...

随机推荐

  1. jqGrid只向服务器请求一次的设置

    也就是说,在表格初始化时请求一次服务器,以后翻页就不再请求服务器,翻页的也只是初始化数据. 一次复制别人的代码时,一直不知道为什么翻页不请求服务器. 搞到人都爆炸,原来只是一个设置的地方. loado ...

  2. java核心技术(第四章)对象与类

    4.1 面向对象程序设计概述 每个对象包含对用户公开的特定功能部分和隐藏的实现部分. 4.1.1类 由类构造对象的过程称为创建类的实例. 封装(数据隐藏)是与对象有关的.从形式上看,封装不过是将数据和 ...

  3. 【51nod】2606 Secondary Substring

    51nod 2606 Secondary Substring 感觉有趣的一道计数,实际上不难 感觉好久没用这种技巧了,导致我还在错误的道路上想了好久... 观察题目性质,可以发现就是左边第一次出现两遍 ...

  4. Photon Server 实现注册与登录(四) --- 服务端响应登陆和注册

    前面已经整理过了服务端代码,MyGameServer.cs 和 ClientPeer.cs 对请求和响应进行了拆分.接下来处理对前端的响应 一.响应登陆请求 之前整理中,响应前端请求主要在类Clien ...

  5. css 颜色自动变化 炫彩

    .layui-icon-login-qq:hover{ color:rgb(0, 156, 255); transition: 0.5s; animation:change 10s linear 0s ...

  6. 网络编程[第二篇]基于udp协议的套接字编程

    udp协议下的套接字编程 一.udp是无链接的    不可靠的 而上篇的tcp协议是可靠的,会有反馈信息来确认信息交换的完成与否 基于udp协议写成的服务端与客户端,各司其职,不管对方是否接收到信息, ...

  7. MySQL SELECT语法(二)SELECT...INTO语法

    源自MySQL 5.7 官方手册 SELECT...INTO Syntax 一.SELECT...INTO介绍 SELECT...INTO用来将查询结果存储在变量或者写入文件中. SELECT ... ...

  8. 怎样理解Cookie

    一. 什么是Cookie Cookie是服务器保存在浏览器里的一小段文本信息, 大小一般不超过4KB, 浏览器每次向服务器发起HTTP请求时就会自动附带上这段信息. 二. Cookie 的主要作用 1 ...

  9. c# http文件上传

    /// <summary> /// 上传文件的api /// </summary> [HttpPost] public string UploadFile(op_client_ ...

  10. MyEclipse Derby 这么玩

    首先得把MYECLIPSE自带的JDK的DERBY数据库的JAR文件给导入工程,反正没事把几个都导进来,如下: derby.jar,derbyclient.jar,derbynet.jar,derby ...