这篇文章是串口中断的文章——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. IOS div上下滑动效果

    内容放在div中 div加样式:width: 100%;height: 100%;z-index: 70;overflow: auto;

  2. Javascript性能优化阅读笔记

    第一章 加载和执行 大多数浏览器都是用单一进程处理UI界面的刷新和JavaScript的脚本执行,所以同一时间只能做一件事,Javascript执行过程耗时越久,浏览器等待响应的时间就越长. 所以,H ...

  3. 在Ubuntu中搭建Python3的虚拟环境并开始django项目

    搭建环境: 1.首先安装virtualenv: pip install virtualenv 2.创建虚拟环境:(指定安装Python3,若不写-p python3,默认安装Python2.7),en ...

  4. centos7 宝塔php7安装mongodb扩展

    一.下载.解压源码 下载地址:https://pecl.php.net/package/mongodb wget -c https://pecl.php.net/get/mongodb-1.5.3.t ...

  5. php 栈、 出栈、入栈

    最近在面试的时候被问到栈,回来做个总结,希望对大家有帮助 栈是线性表的一种,他的特点是后入先出,可以这么理解,栈就像一个存东西的盒子,先放进去的在最底层,后放进去的在上层,因为上层的东西把底层的东西压 ...

  6. mysqlbinlog实战

    关于mysqlbinlog命令,下列参数应用频率较高:--base64-output:选项有三个参数,never表示不处理ROW格式日志,只处理传统的基于STATEMENT格式日志.decode-ro ...

  7. Zynq-7000 MiZ701 SOC硬件使用手册

    一.整体概述 4 二.应用领域及人群 4 三.硬件配置 4 BANK资源分配 6 四.MiZ701开发板功能描述 7 4.1 全编程SOC(All Programmable SoC) 7 4.2 内存 ...

  8. JAVA对存储过程的调用方法(本文源于网络)

    博客分类: java java存储过程sql  一:Java如何实现对存储过程的调用:   A:不带输出参数的   ---------------不带输出参数的-------------------- ...

  9. Oracle练习(一)

    Oracle 1.检索部门编号.部门名称.部门所在地及其每个部门的员工总数. select d.deptno,d.dname,d.loc,count(*) from emp e,dept d wher ...

  10. 怎样理解ECMAScript 和 JavaScript的关系

    JavaScript可以分为三大部分: 1. 核心语法 2. DOM 3. BOM 而核心语法实际上就是指的ECMAScript, 而JS又是不断在发展的, 而这个发展实际上最主要的就是ECMAScr ...