dma接收双缓存 stm32_「STM32学习笔记」USART 新特性
之前的学习笔记“SPI不够用?USART来帮忙”一文中介绍了用如何把USART当做SPI来用的方法。此外,ST的USART还有很多新特性,没准有你不知道的。
在此,我们整理出来以下串口新特性,供大家参考。
支持RXD和TXD管脚互换
很多时候,我们在外接RS232芯片时,很容易将RXD和TXD两根线接反。这类低级错误,一般是老司机才会犯。如果大家知道USART的TXD和RXD管脚可以互换,那么在连接外设RS232芯片时,如果发生错误,就不必再修改硬件,只需直接在软件中将RXD和TXD的管脚反转过来即可修正错误。
参考上图,设置SWAP位,即可将RXD和TXD管脚互换。
支持接收和发送的电平极性反转
第二个特性是,接收和发送的电平极性是可以反转的。通常默认串口电平是高电平为逻辑1,低电平为逻辑0;而在ST的USART中是可以将高电平设置为逻辑0,低电平设置为逻辑1的。这一特性,让我们在一些特殊的场景下灵活使用,举个栗子,USART外接了反相器时就可以直接使用。
在数据接收发送寄存器中,数据也是可以反转的,原来的0变为1,原来的1变为0,这和电平极性反转是类似。需要特别注意的是,在极性反转的时候,起始位和结束位也都反转了,所有的信号电平都反转;而在数据寄存器中只反转了数据位,其中也包含了校验位,没有反转信号的起始位和结束位的极性。
参考上图,在USART_CR2寄存器中TXINV、RXINV和DATAINV位来进行设置。
支持数据高位与低位反序发送或接收
第三个新特性,发送和接收数据时,可在寄存器中设置是先发低位还是先发高位。默认的配置都是先发送或接收低位的信号(bit 0),实际应用中,通过USART_CR2中的MSBFIRST设置后,也可以让USART先发送或接收高位信号(bit 7/8),这一点在对数据进行反序的时候会经常用到它。
我们可以考虑这种情况,如果需要把串口接收到的数据先进行反序操作之后,再进行计算,那这个硬件的功能就可以帮助我们节省很多软件的工作量。
USART支持DMA传输
最后,STM32的USART都是支持DMA的,这一点有利于做数据的连续发送和数据的缓冲接收。在某些STM32产品系列中,如STM32F4和H7系列具有专门的串口FIFO,这就可以用来做串口唤醒,先让MCU进入到Sleep模式,当接收到一个完整的数据包,这个数据包可能是100个字节或者200个字节,之后再唤醒单片机,这样既可以做到不丢数据又可以降低MCU的唤醒频率。
另外,USART的接收还具有超时功能,可以人为设定一个时间,在USART的RTOR寄存器中进行设置,当串口接收的数据帧之间超过了这个设定值,就会引发一个超时中断,串口中会有一个叫RTOF的标志位来显示发生的超时事件,我们通过这个中断中应用的代码就可以知道串口的数据发生了中断现象,近似可认为对方的数据已经发送完成。这种方式,在串口上层协议的开发中,有很多应用场景。
USART 新特性小结
- 支持RXD和TXD管脚的互换
- 支持管脚上的电平逻辑反转和数据寄存器中的逻辑反转
- 支持数据高位与低位反序发送或接收,既可以先发送或接收低位,也可以先发送或接收高位
- 支持接收数据的超时功能,并且每个USART都可以支持DMA传输
dma接收双缓存 stm32_「STM32学习笔记」USART 新特性相关推荐
- dma接收双缓存 stm32_容易被大多数人忽视的STM32串口DMA问题
讨论三个问题: 1.什么叫串口DMA 请求: 2.串口简要复习: 3.串口DMA发送流程. 第一 什么叫串口DMA 请求(战舰STM32开发板) 说这个问题之前先简单回顾DMA的基本特性.先导出原子哥 ...
- stm32学习笔记-9 USART串口
9 USART串口 文章目录 9 USART串口 9.1 串口通信协议 9.2 stm32的片上外设-USART 9.3 USART收发相关实验 9.3.1 实验1:串口发送 9.3.2 实验2:移植 ...
- 「GIS学习笔记」国土空间规划背景下村庄规划的探索研究
[GIS学习笔记·实操篇]国土空间规划背景下村庄规划的研究探索 人送外号徐半仙儿,公众号名称:半仙儿说规划 01 前言 水了这么久终于又有大更新啦 [GIS学习笔记·十篇]系列里面的实操篇-国土空间规 ...
- dma接收双缓存 stm32_STM32和WM8960 I2S 利用DMA双缓冲音频播放和录音(二)
前面简单讲解了WM8960语音芯片工作方式,WM8960做master,之前参数配置ADC/DAC采样速率的是44.1K,有点问题,现在改为16K,下面会解释为什么要改成16K. WM8960参数配置 ...
- python3 byte_「Python3学习笔记」读书笔记—字节数组
生物都是由细胞构成的,但在我们普通人眼中,并不会将鸡.鸭.狗.鸟这些动物当作细胞看待,因为对待事物的角度决定了我们更关心生物的外在形状和行为,而不是它的组织构成. 从计算机底层实现来说,所有的数据都是 ...
- 用户登陆_「python学习笔记」用户登陆需求实现(for/if/str知识点)
本文·导读·目录 1.用户登陆程序需求 2.知识点 3.代码 4.运行结果 一.用户登陆程序需求: 1. 输入用户名和密码: 2. 登陆成功后显示欢迎信息,失败提示重试: 3. 登陆仅有三次机会, 如 ...
- python pow和**_「Python学习笔记」Python函数高级应用
Python, 函数本身也是一个对象函数既可以赋值,也可以用作其他函数的参数,还可作为其他函数的返回值. 使用函数变量 Python的函数也是一种值:所有函数都是function对象,这意味着可以把函 ...
- 「Gradle学习笔记」一、构建工具
构建工具的产生 在项目开发过程中,出于测试或正式发布的目的,需要进行一系列步骤来构建项目生成可执行的二进制文件.一般来说,首先需要确定项目所需的依赖都已正确安装,然后将项目源代码和依赖编译链接生成 ...
- 前端学习笔记之CSS3新特性3D转换 3.23
1 3D转换概念 我们生活的环境是3D的,照片就是3D物体在2D平面呈现的例子. 特点: 1.近大远小. 2.物体后面遮挡不可见 当我们在网页上构建3D效果的时候参考这些特点就能产出3D效果. 三维坐 ...
最新文章
- mybatis的注解开发之三种动态sql
- thinkPHP学习笔记(2)
- python生成器使用场景桌面_Python – 如何更简洁地使用生成器?
- double free or corruption (fasttop)
- 【攻防世界014】tt3441810
- angular 模块构建_通过构建全栈应用程序学习Angular 6
- 论文学习1-DeepPath: A Reinforcement Learning Method for Knowledge Graph Reasoning
- Ubuntu nginx+uwsgi部署Django项目
- Node.js_1.1
- java eden区_(转)可能是把Java内存区域讲的最清楚的一篇文章
- PuTTY 'modmul()' 函数缓冲区下溢漏洞(CVE-2013-4206)
- 思科称可能是宇宙射线触发了路由器bug
- 设为首页 和 收藏本页
- TCL学习心得(2)Tcl语言的语法
- Python实现Iris数据集(鸢尾花卉数据集)kmeans聚类
- Oracle数据库占用磁盘,导致磁盘活动时间为100%的解决方法
- Linux环境下安装tomcat并配置开机自启
- ios开发面试常见问题及答案
- vue的provide的使用
- 谷歌10年,难说再见......
热门文章
- 微软官宣:史上最贵开发工具 75亿美金收购GitHub
- ASP.NET Core 集成测试中结合 WebApplicationFactory 使用 SQLite 内存数据库
- .NET Core 出得云端入得本地,微软让跨平台应用勇敢表达
- Asp.net 批量导入Excel用户数据功能加强版
- 【经典回放】JavaScript学习详细干货笔记之(一)
- Android之国际化部分文字生效而部分文字没有生效的坑
- C语言之去掉https链接的默认443端口
- Andorid之BINDSERVICE的使用方法总结
- 栈和队列之LinekedList(双端队列)
- 无代码iVX编程实现简单 小蜜蜂 经典游戏