27. USART, Universal synchronous asynchronous receiver transmitter
27.1 USART introduction
通用同步异步接收发射机(USART)对需要NRZ异步串行数据格式行业标准的外部设备,提供了一个灵活的全双工数据交换的方法。USART使用分数波特率生成器提供非常广泛的波特率。
它支持同步单向通信和半双工单线通信.它还支持LIN(本地互连网络)、SmartCard协议和IRDA(红外数据关联)SIR ENDEC规范和调制解调器操作(CTS/RTS)。它允许多处理器通信。
采用DMA进行多缓冲配置,可以实现高速数据通信。
说明:现在仅补充需要且用的内容,没有使用的内容虚位以待。
27.3 USART functional description
overrun error
RXNE标志是在每个字节接收后被置位的。如果在接收到下一个数据时置位了RXNE标志,或者之前的DMA请求未被服务,则会发生溢出错误。
当发生溢出错误时:
- ORE置位。
- RDR内容不会丢失。当执行对USART_DR的读取时,可以获得先前的数据。
- shift register 将被覆盖。在此之后,在溢出期间收到的任何数据都会丢失。
- 如果设置了RXNEIE位或同时设置了EIE和DMAR位,则会生成中断。
ORE位清零:先读取USART_SR寄存器,然后读取USART_DR寄存器。
Framing error
在下列情况下检测到帧错误:在去同步或过度噪声之后,在预期时间点无法被识别停止位。
当检测到帧错误时:
- The FE bit is set by hardware
- The invalid data is transferred from the Shift register to the USART_DR register.
- 在单字节通信情况下不产生中断。但是,此位(FE )与RXNE位同时上升,RXNE位本身生成一个中断。如果在USART_CR3寄存器中设置EIE位,则在多缓冲区通信时将发出中断。
FE 位清零:先读取USART_SR寄存器,然后读取USART_DR寄存器。
27.3.6 Multiprocessor communication
有可能与USART(一个网络中连接的几个USART)执行多处理器通信。例如,一个USART可以是主程序,它的TX输出连接到另一个USART的RX输入。其余的是从级输出,它们各自的TX输出逻辑地连接在一起,并连接到主服务器的RX输入。
在多处理器配置中,通常希望只有预期的消息接收方主动接收完整的消息内容,从而减少所有非地址接收器的冗余USART服务开销。
此处略……
27.3.7 Parity control
所以,当8bit通信使用奇偶校验位时,M应该置位,也就是使用9bit字长。
27.3.8 LIN (local interconnection network) mode
此处略……
27.3.9 USART synchronous mode
此处略……
27.3.10 Single-wire half-duplex communication
通过在USART_CR 3寄存器中设置HDSEL位来选择单线半双工模式。在这种模式下,必须清除下列比特:
- LINEN and CLKEN bits in the USART_CR2 register,
- SCEN and IREN bits in the USART_CR3 register.
USART可以配置为采用单线半双工协议。在单线半双工模式下,TX和RX引脚内部连接.半双工通信和全双工通信之间的选择是使用控制位‘HALF DUPLEX SEL’(在USART_CR 3中的HDSEL)进行的。
一旦 HDSEL 写到1:
- RX不再使用,
- 当没有传输数据时,总是释放TX。因此,它在空闲或接收时充当标准IO。这意味着IO必须配置,以便TX在不受USART驱动时被配置为浮动输入(或输出高开漏)。
除此之外,这些通信方式与在一般USART模式下所做的类似。线路上的冲突必须由软件来管理(例如,通过使用集中仲裁器)。
需要注意的是,当TE置位时,只要往数据寄存器里写入数据时硬件就不能阻断数据的传输。
27.3.11 Smartcard
此处略……
27.3.12 IrDA SIR ENDEC block
27.3.13 Continuous communication using DMA
USART能够使用DMA继续通信。对Rx缓冲区和TX缓冲区的DMA请求是独立生成的。
Transmission using DMA
通过在USART_CR3寄存器中设置DMAT位,可以启用DMA模式进行传输。每当TXE置位时,数据就从使用DMA通道配置的SRAM区域(对应peripheral地址)加载到USART_DR寄存器。要为USART传输映射DMA信道,请使用以下过程(x表示信道号):
- 在DMA控制寄存器中写入USART_DR寄存器地址,将其配置为传输的目的地。数据将在每次TXE事件发生后从内存中移到此地址。
- 在DMA控制寄存器中写入内存地址,将其配置为传输源。在每个TXE事件后,这些数据将从这个内存区域中加载到USART_DR寄存器中。
- 配置要传输到DMA控制寄存器的字节总数。
- 在DMA寄存器中配置信道优先级
- 根据应用程序的要求,在一半/全部传输后配置DMA中断生成。
- Clear the TC bit in the SR register by writing 0 to it.
- Activate the channel in the DMA register.
当到达DMA控制器中编程的数据传输数时,DMA控制器在DMA通道中断向量上产生中断。
Reception using DMA
DMA mode can be enabled for reception by setting the DMAR bit in USART_CR3 register. Data is loaded from the USART_DR register to a SRAM area configured using the DMA peripheral (refer to the DMA specification) whenever a data byte is received.
To map a DMA channel for USART reception, use the following procedure:
- Write the USART_DR register address in the DMA control register to configure it as the source of the transfer. The data will be moved from this address to the memory after each RXNE event.
Write the memory address in the DMA control register to configure it as the destination of the transfer. The data will be loaded from USART_DR to this memory area after each RXNE event.
- Configure the total number of bytes to be transferred in the DMA control register.
- Configure the channel priority in the DMA control register
- Configure interrupt generation after half/ full transfer as required by the application.
- Activate the channel in the DMA control register.
When the number of data transfers programmed in the DMA Controller is reached, the DMA controller generates an interrupt on the DMA channel interrupt vector.
remapping
27. USART, Universal synchronous asynchronous receiver transmitter的更多相关文章
- Universal Asynchronous Receiver/Transmitter
USART簡介與特性 NRZ標準資料格式(Mark/Space) 半雙工/全雙工 Synchronous 同步傳輸 CLOCK SKEW Asynchronous 非同步傳輸 半/全雙工.同步/非同步 ...
- Universal asynchronous receiver transmitter (UART)
UART基本介绍: 通用异步收发器UART他的功能非常强大 我们只使用UART的全双工异步通信功能,使用中断接收数据. UART_RX:串行数据输入. UART_TX:串行数据输出. 硬件支持: 连接 ...
- STM8S——Universal asynchronous receiver transmitter (UART)
UART基本介绍: 通用异步收发器UART他的功能非常强大 我们只使用UART的全双工异步通信功能,使用中断接收数据. UART_RX:串行数据输入. UART_TX:串行数据输出. 硬件支持: 连接 ...
- k64 datasheet学习笔记52---Universal Asynchronous Receiver/Transmitter (UART)
1.前言 UART实现与外设或CPU的通信 2. UART概述 2.1基本特性 (1)Full-duplex operation (2)Standard mark/space non-return-t ...
- Synchronous/Asynchronous:任务的同步异步,以及asynchronous callback异步回调
两个线程执行任务有同步和异步之分,看了Quora上的一些问答有了更深的认识. When you execute something synchronously, you wait for it to ...
- pthread thread mutex synchronous asynchronous communication
设置进程绑定状态的函数pthread_attr_setscopepthread_attr_t 指向属性结构的指针第二个参数 绑定类型 pthread_scope_system()pthread_sco ...
- 单片机stm32 USART串口实际应用解析
stm32作为现在嵌入式物联网单片机行业中经常要用多的技术,相信大家都有所接触,今天这篇就给大家详细的分析下有关于stm32的出口,还不是很清楚的朋友要注意看看了哦,在最后还会为大家分享有些关于stm ...
- 微控制器(MCU)架构介绍
微控制器(MicroController)又可简称MCU或μC,也有人称为单芯片微控制器(Single Chip Microcontroller),将ROM.RAM.CPU.I/O集合在同一个芯片中, ...
- stm32手册上的英文
crystal-less 无晶振 USB FS(Full-speed)此外还有High-speed接口(简称HS),Low-speed接口(简称LS) frequency频率 CRC(Cyclic ...
随机推荐
- NOIP模拟测试29(A)
T1: 题目大意:有一张有向无环图,第$x$次经过边$i$的代价为$a_ix+b_i$,最多经过$c_i$次,起点为1,$s$个点可作为终点,求走$k$次的最小代价. 我们新建一个汇点,将所有可做为终 ...
- Arduino与无源蜂鸣器
1.Arduino无源蜂鸣器传感器模块 我们可以使用Arduino进行很多互动作品,其中最常用的是声光显示器.之前的所有实验都与LED有关.但是,这个实验中的电路可以产生声音.通常,实验是通过蜂鸣器或 ...
- (转)OpenFire源码学习之二十七:Smack源码解析
转:http://blog.csdn.net/huwenfeng_2011/article/details/43484199 Smack Smack是一个用于和XMPP服务器通信的类库,由此可以实现即 ...
- /etc/fstab修改及mkfs(e2label)相关应用与疑问
http://blog.chinaunix.net/uid-23392298-id-62318.html 我们将以问题开始说明: 案例: 由于n年前的误操作,导致系统启动的时候,提示如下错误:Coul ...
- MFC的回调函数
MFC中应该有两类回调函数:一类是源自C的传统回调函数,此类回调函数若非定义为全局函数,而定义在类中的话,要添加static约束,常见的有EnumXXX():一类是消息响应函数,通过成员函数指针实 ...
- js 为什么计算结果老是出现NaN
js 为什么计算结果老是出现NaN 可能原因: 1.操作的两个数,类型不一致 2.有一个值为NaN,计算後为NaN 1. 转换函数: js提供了parseInt()和parseFloat()两个转换函 ...
- Flink 配置文件详解
前面文章我们已经知道 Flink 是什么东西了,安装好 Flink 后,我们再来看下安装路径下的配置文件吧. 安装目录下主要有 flink-conf.yaml 配置.日志的配置文件.zk 配置.Fli ...
- 真实的『REM』手机屏幕适配
rem 作为一个低调的长度单位,由于手机端网页的兴起,在屏幕适配中得到重用.使用 rem 前端开发者可以很方便的在各种屏幕尺寸下,通过等比缩放的方式达到设计图要求的效果. rem 的官方定义『The ...
- rmq +二分暴力 hdu 5726
参考博客 题意:n 个数字的数列,有m个询问:求出 L 到 R 的 gcd(最大公约数 ),然后问这整个序列中有多少个区间的 gcd 和这个一样. 分析:L 到 R的gcd直接用RM ...
- 令人清爽的异步函数async、await
1.什么是async.await? async用于声明一个函数是异步的.而await从字面意思上是"等待"的意思,就是用于等待异步完成.并且await只能在async函数中使用; ...