LIN 发送
与正常 USART 发送存在如下区别:清除 M 位来设置 8 位字长度;设置 LINEN 位进入 LIN 模式,此情况下,
设置 SBK 位来发送 13 个“0”作为间隙符,然后发送一个“1”来开启其实检测
2、LIN 接收
当 LIN 模式被使能时,间隙检测电路被激活。检测和正常 USART 接收器完全独立。间隙不管是在空闲时或
者接收帧期间发生都能被检测到
检测起始位的方法和寻找间隙符或者数据是一样的。发现起始位后,电路采样下面的位。若 10(LBDL=0)或
者 11 位(LBDL=1)连续的位都是 0,且金钩一个分隔符,USART_SR 寄存器的 LBD 标志被置 1
如果第 10 或者 11 次采样之前采样到 1,间隙检测电路取消当前的检测而重新查找一个起始位
LIN 模式被使能,一旦发生了帧错误,接收器不会停止直到间隙字没有完成时接收到一个“1”或检测到间
隙后接收到一个分隔符
USART 同步模式
同步模式是通过往 USART_CR2 寄存器中的 CLKEN 位写 1 来选择。此模式下,下面这些位必须保持清除状态:
LINEN,SCEN,HDSEL,IREN
USART 允许用户在主模式下控制双向同步串行通信。SCLK 引脚是 USART 发送者时钟的输出。起始位和停止
位期间不会往 SCLK 发送时钟脉冲。
在空闲,实际数据到来前和发送间隙期间,外部时钟不会被激活
SCLK 和 TX 同步,TX 上的数据也是同步的。USART 接收器和异步模式采用不同的工作方式。若 RE=1,数据
在 SCLK 上采样而没有任何过采样
SCLK 引脚和 TX 引脚一起工作,故只有在发送使能时且数据在发送时才会提供时钟,这就意味着不可能在
不发送数据时接收到同步数据
LBCL,CPOL,CPHA 必须在发送器和接收器都禁能时选择,这些为在发送器或者接收器使能时不能改变
建议在同一条指令中设置 TE 和 RE 位以保证接收器的建立时间和保持时间最小
单线半双工模式
此模式通过设置 USART_CR3 寄存器中的 HDSEL 位来选择。此模式下必须保持下面这些位的清除状态:
LINEN,CLKEN,SCEN,HDSEL,IREN
一旦 HDSEL 被写 1:RX 不再被使用;无数据传输时,TX 总是被释放的。因此,它在空闲状态或接收状态时
表现为一个标准 I/O 口,该 I/O 口在不被 USART 驱动时,必须配置成悬空呼入或开漏的输出高。
特别的是,发送***都不会被硬件阻止,一旦 TE 位被置 1 并且数据写入数据寄存器,发送就会连续发生智能卡
智能卡模式是通过设置 USART_CR3 寄存器中的 SCEN 位来选择。此模式下,下面这些为必须保持清除状态:
LINEN,HDSEL,IREN
CLKEN 位可能被设置,从而为智能卡提供时钟
智能卡接口设计是支持 ISO7816-3 标准中定义的一部协议的智能卡。USART 应做如下配置:8 位数据家奇偶
校验,USART_CR1 寄存器中的 M=1,PCE=1,并且满足如下条件之一:
接收时 0.5 停止位:USART_CR2 中的 STOP=01
发送时 1.5 停止位,USART_CR2 中的 STOP=11
当与智能卡相连时,USART 的 TX 输出驱动一个智能卡也驱动的双向线(SW_RX 和 TX 必须连接到相同的 I/O)。
在发送起始位和数据字节时,TX_EN 被置有效,而在停止位被置无效。这样接收器只能在出现奇偶错误时
才能驱动这条线路。若没有使用 TX_EN,在停止位期间 TX 被拉高,这样只要 TX 被配置成开漏,接受者也可
以驱动这条线路
智能卡是一个单线半双工通信协议
通过发送移位寄存器的数据发送至少延迟 1/2 的波特时钟
如果在接收 1/2 停止位帧时检测到奇偶错误,发送线路在完成接收帧时拉低并保持一个波特时钟
置 TC 标记有效可以通过设置保护时间寄存器延迟
TC 标志的撤销不会受智能卡模式影响
如果发送器检测到帧错误,NACK 不会被发送器的接收模块当做起始位
在接收器端,若检测到奇偶错误并且发送了 NACK,接收器不会把 NACK 当做起始位
智能卡模式下,间隙符是没有意义的,带帧错误的 00H 数据被看做是数据而不是间隙符
当来回切换 TE 位时,不会发送空闲帧。ISO 协议没有定义空闲帧
USART 能够通过 SCLK 输出位智能卡提供时钟。在智能卡模式下,SCLK 和通信无关,而是先通过一个 5 位预
分频器简单地用内部的外设输入时钟来驱动智能卡的时钟。
IrDA SIR ENDEC 模块
IrDA 模式是通过设置 USART_CR3 寄存器中的 IREN 位来选择的。此模式下,下面这些位必须保持清除状态:
LINE,STOP,CLKEN,SCEN,HDSEL
SIR 发送编码器对从 USART 输出的 NRZ 比特流进行调制。正常模式下,发送的脉宽定义在 3/16 位周期
SIR 接收解码器借条来自红外检测器归零位流,且向 USART 输出 NRZ 串行比特流。在空闲状态里,解码器
的输入就通常是高。发送器输出和解码器输入有相反的极性。
IrDA 是一个半双工通信协议,如果发送器忙,IrDA 解码器将忽略所有 IRDA 接收线路上的数据。如果接收
器忙,TX 上从 USART 到 IrDA 的数据不会被 IrDA 编码。在接收数据时,应避免发送数据,否则要发送的数
据可能被破坏
“0”是作为高脉冲发送,而“1”是作为“0”发送
SIR 解码器把 IrDA 兼容的接收信号转变成 USART 的比特流
SIR 接收逻辑把高状态逻辑“1”,而低脉冲看做逻辑“0”
发送编码器输出和解码器输入有相反的极性。空闲时 SIR 的输出是低电平
IrDA 规范要求可接受的脉冲大于 1.41 微秒,可接受的脉冲宽度是可设置的。
接收器可以和低功耗发送器通信
在 IrDA 模式下,USART_CR2 寄存器中的 STOP 位必须设置城 1 停止位
IrDA 低功耗模式叙述如下:
发送器:脉宽 3 倍于低功耗波特率。低功耗模式下可设置预分频值对系统时钟分频接收器:与正常模式下接收类似。USART 应忽略宽度小于 1PSC 的脉冲
使用 DMA 的连续通信
USART 可以利用 DMA 进行连续通信。RX 和 TX 缓冲器可以独立产生 DMA 请求
1、使用 DMA 发送
DMA 模式发送可以通过设置 USART_CR3 寄存器中的 DMAT 位使能。只要 TXE 位被置 1,数据就可以通过 DMA
外设从配置好的 SARM 区域导入到 USART_DR 寄存器。使用下面的流程映射一个用于发送的 DMA 通道
把 USART_DR 寄存器的地址写到 DMA 控制寄存器,配置成传输的目标地址,每次 TXE 事件发生时,数据将从
存储器转移到这个地址
把存储器的地址写到 DMA 控制寄存器,配置成传输的源地址,每次 TXE 时间发生时,数据将从这个存储器
区域转移到 USART_DR 寄存器
把要发送的字节总数写入 DMA 控制寄存器
在 DMA 寄存器中设置通道的优先级
根据应用需要,设置半/全传输的 DMA 中断
利用 DMA 寄存器激活通道
当传输的数目达到 DMA 控制寄存器中设置的值时,DMA 控制寄存器在 DMA 通道中断向量上产生一个中断。
若要使用 DMA 来发送,不要使能 TXEIE |