14. USART接口控制器 (USART)

14.1. 概述

USART 除了支持普通UART的功能外,还支持更完善的LIN功能。

14.2. 特性

  • 5-9位数据,1、1.5或2位停止位

  • 奇偶校验位发送和检测,帧错误检测,溢出错误检测

  • 支持先发送高位、或先发送低位可配

  • 支持接收超时中断、超时时间可配

  • LIN支持主/从模式,遵循LIN 1.3和LIN 1.2协议规格

  • LIN从机模式支持自同步功能

14.3. 功能描述

14.3.1. 字符格式

字符格式如 图 65 所示。

../../_images/%E5%AD%97%E7%AC%A6%E6%A0%BC%E5%BC%8F.svg

图 65 USART字符格式

空闲时通信线保持高电平,以低电平的起始位启动一个字符的传输,其后紧跟5-9位的数据位、可选的奇偶校验位、1-2位固定高电平的停止位。接收方和发送方必须设定完全相同的字符格式,且每位的宽度必须相同(误差不超过3%),才能正确通信。

14.3.2. 接收器和发送器控制

复位后,接收器被禁用。用户必须通过设置控制寄存器(USART_CR)中的 RXEN 位来启用接收器。但是,可以在启用接收器时钟之前对接收器寄存器进行编程。

复位后,发送器被禁用。用户必须通过设置控制寄存器(USART_CR)中的 TXEN 位来启用它。但是,可以在启用之前对发送器寄存器进行编程。

接收器和发送器可以一起启用或单独启用。

在任何时候,软件都可以通过在 USART_CR 中分别设置相应的位 RSTRX 和 RSTTX 对 USART 的接收器或发送器执行复位。软件复位会清除状态标志并复位内部状态机,但用户界面配置寄存器会保存软件复位前配置的值。无论接收器或发送器正在执行什么操作,通信都会立即停止。

用户还可以通过在 USART_CR 中分别设置 RXDIS 和 TXDIS 来单独禁用接收器或发送器。如果在字符接收期间禁用接收器,USART 将等待直到当前字符接收结束,然后停止接收。如果在操作期间禁用发送器,USART 将等待当前字符和存储在发送保持寄存器(USART_THR)中的字符的传输结束。

14.3.3. 发送器操作

在编程的串行时钟的每个下降沿,一个起始位、最多 9 个数据位、一个可选奇偶校验位和最多两个停止位依次从 TXD 引脚移出。

数据位数由模式寄存器 (USART_MR) 中的 NBDATA 字段和 DATA9b 位选择。通过设置 DATA9b 位来选择九位,而不管 NBDATA 字段如何。

奇偶校验位根据 USART_MR 中的 PARITY 字段设置。可以配置偶校验位、奇校验位、空格校验位、标记校验位或无校验位。USART_MR 中的 MSBF 字段配置首先发送哪个数据位。如果写入 1,则首先发送最高有效位。如果写入 0,则首先发送最低有效位。停止位数由 USART_MR 中的 NBSTOP 字段选择。

字符通过写入发送保持寄存器(USART_THR)来发送。发送器通过 USART_ISR 中的如下两个状态位报告发送状态:TXRDY(发送器就绪)表示 USART_THR 为空,可以写入新的数据发送;TXEMPTY,表示已处理写入 USART_THR 的所有字符。

../../_images/%E5%8F%91%E9%80%81%E5%99%A8.svg

图 66 USART 发送器操作示意图

当前字符处理完成后,写入 USART_THR 的最后一个字符将传输到发送器的移位寄存器中,USART_THR 变为空,因此 TXRDY 上升。在 TXRDY 为低时向 USART_THR 写入字符不会产生任何影响,写入的字符将丢失。

14.3.4. 接收器操作

USART接收器对 RXD 输入线进行过采样,过采样是波特率时钟的 16 倍或 8 倍,具体取决于 USART_MR 中的 OVER8 位。

如果过采样为 16(OVER8 = 0),则在检测到0后第八个采样时检测到一个起始位。然后,在每个 16 个采样时钟周期对数据位、奇偶校验位和停止位进行采样。如果过采样为8(OVER8 = 1),则在检测到0后第四个采样时检测到一个起始位。然后,在每个 8 个采样时钟周期对数据位、奇偶校验位和停止位进行采样。

数据位数、发送的第一个位和奇偶校验模式由与发送器相同的字段和位选择,即分别为 NBDATA、DATA9b、MSBF 和 PARITY。一旦对停止位进行采样,接收器就会开始寻找新的起始位,这样当发送器以一个停止位运行时也可以完成重新同步。

USART Start Detection (x16)

../../_images/%E6%8E%A5%E6%94%B6%E5%99%A8.svg

图 67 USART 接收器操作示意图

第二个波形中,在第八个采样点检测到了高电平,因此起始位检测失败。

当字符接收完成时,它将被传输到接收保持寄存器(USART_RHR),并且 USART_ISR 中的 RXRDY 位置位。如果在字符接收完成时 RXRDY 已经置位,则设置 OVRE(溢出错误)位。最后一个字符将传输到 USART_RHR 并覆盖前一个字符。通过向 USART_CR.RSTSTA(复位状态)位写入1可以清除 OVRE 位。

14.3.5. LIN报头传输(主节点配置)

所有 LIN 帧都以主节点发送的报头开始,该报头由同步中断字段、同步字段和标识符字段组成。

在主节点配置中,帧处理从发送报头开始。

标识符写入 LIN 标识符寄存器(USART_LINID)后,报头立即传输。此时,TXRDY 标志清零。

中断字段、同步字段和标识符字段自动相继发送。

中断字段由 13 个显性位和 1 个隐性位组成,同步字段为字符 0x55,标识符对应于 LIN 标识符寄存器(USART_LINID)中写入的字符。标识符奇偶校验位可以自动计算和发送。

当标识符字符传输到发送器的移位寄存器时,TXRDY 标志置位。

一旦传输了同步中断字段,USART_ISR 中的标志 BRK 就会设置为 1。同样,一旦发送了标识符字段,USART_ISR 中的标志位 ID 就会设置为 1。通过将 1 写入USART_CR 中的 RSTSTA 位来重置这些标志。

../../_images/LIN%E5%8F%91%E9%80%81.svg

图 68 LIN 发送操作示意图

14.3.6. LIN报头接收(从节点配置)

所有 LIN 帧都以主节点发送的报头开始,该报头由同步中断字段、同步字段和标识符字段组成。

在从节点配置中,帧处理从接收报头开始。

USART 使用实际波特率下 11 个标称位时间的中断检测阈值。在任何时候,如果在总线上检测到 11 个连续的隐性位,则 USART 检测到中断字段。只要没有检测到中断字段,USART 就会保持空闲状态,并且不会考虑接收到的数据。

当检测到中断字段时,USART_ISR 中的标志 BRK 设置为 1,并且 USART 期望同步字段字符为 0x55。此字段用于更新实际波特率以保持同步。如果接收到的同步字符不是 0x55,则会产生不一致同步字段错误。

接收到同步字段后,USART 期望接收标识符字段。

接收到标识符字段后,USART_ISR 中的标志位 ID 设置为 1。此时,LINID 中的字段 IDCHR 将使用接收到的字符进行更新。标识符奇偶校验位可以自动计算和检查。

如果未在报头最大长度 THeader_Maximum 给出的时间内完全接收到报头,则 USART_ISR 中的错误标志 HDRTO 设置为 1。

通过将 1 写入 USART_CR 中的 RSTSTA 位,可以重置标志位 BRK、ID 和 HDRTO。

../../_images/LIN%E6%8E%A5%E6%94%B6.svg

图 69 LIN 接收操作示意图

14.3.7. LIN从节点同步

同步仅在从节点配置中完成。该过程基于同步场下降沿之间的时间测量。下降沿的距离为 2、4、6 和 8 位时间。

../../_images/LIN%E4%BB%8E%E8%8A%82%E7%82%B9%E5%90%8C%E6%AD%A5.svg

图 70 LIN 从节点同步

时间测量由 19 位计数器进行,该计数器由采样时钟计时。

当检测到同步场的起始位时,计数器将重置。然后在同步场的下一个 8 Tbits 期间,计数器将递增。在这 8 Tbits 结束时,计数器将停止。此时,计数器的 16 个最高有效位(值除以 8)给出新的时钟分频器(IDIV),该值的 3 个最低有效位(余数)给出新的小数部分(FDIV)。

如果采样的同步字符不等于 0x55,则USART_ISR中的错误标志 SYNCERR 设置为 1。通过在 USART_CR 中将 RSTSTA 位写入 1 来重置它。

一旦完全接收到同步字段,如果 LIN 模式寄存器(USART_LINMR)中的 SYNCDIS 位未禁用同步,则 USART_BAUD 中的时钟分频器(IDIV)和小数部分(FDIV)将使用计算值更新。

接收到同步字段后:

  • 如果与初始波特率相比,计算出的波特率偏差大于最大容差 FTol_Unsynch (±15%),则 USART_BAUD 不会更新,并且 USART_ISR 中的错误标志 SYNCTERR 设置为 1。

  • 如果采样的同步字符似乎不等于 0x55,则 USART_BAUD 不会更新,并且USART_ISR 中的错误标志 SYNCERR 设置为 1。

通过将 USART_CR 中的 RSTSTA 位写入 1 来重置标志 SYNCERR 和 SYNCTERR。

14.3.8. LIN ID奇偶校验

受保护的标识符由两个子字段组成;标识符和标识符奇偶校验。位 0 至 5 分配给标识符,位 6 和 7 分配给奇偶校验。

USART 接口可以生成/检查这些奇偶校验位,但此功能也可以禁用。用户可以通过 LIN 模式寄存器(USART_LINMR)的 PARDIS 位在两种模式之间进行选择:

  • PARDIS = 0:

    • 在报头传输期间,计算奇偶校验位并与 LIN 标识符寄存器(USART_LINIR)的 IDCHR 字段的 6 个最低有效位一起发送。此寄存器的位 6 和 7 被丢弃。

    • 在报头接收期间,检查标识符的奇偶校验位。如果奇偶校验位错误,则发生标识符奇偶校验错误。只有 IDCHR 字段的 6 个最低有效位会使用接收到的标识符进行更新。位 6 和位 7 固定为 0。

  • PARDIS = 1:

    • 在报头传输期间,LIN 标识符寄存器(USART_LINIR)的 IDCHR 字段的所有位均在总线上发送。

    • 在报头接收期间,IDCHR 字段的所有位均使用接收到的标识符进行更新。

14.3.9. LIN节点动作

根据标识符的功能,节点是否关注 LIN 响应。因此,在发送或接收标识符后,必须配置 USART。有三种可能的配置:

  • PUBLISH:节点发送响应

  • SUBSCRIBE:节点接收响应

  • IGNORE:节点不关注响应,它不发送也不接收响应

此配置由 US_LINMR 寄存器中的字段 “节点动作(NACT)” 完成。

示例: 包含一个主设备和两个从设备的 LIN 集群:

  • 数据从主设备传输到从设备 1 和从设备 2:

    NACT(主设备)= PUBLISH

    NACT(从设备 1)= SUBSCRIBE

    NACT(从设备 2)= SUBSCRIBE

  • 数据仅从主设备传输到从设备 1:

    NACT(主设备)= PUBLISH

    NACT(从设备 1)= SUBSCRIBE

    NACT(从设备 2)= IGNORE

  • 数据从从设备 1 传输到主设备:

    NACT(主设备)= SUBSCRIBE

    NACT(从设备 1)= PUBLISH

    NACT(从设备 2)= IGNORE

  • 数据从从设备 1 传输到从设备 2:

    NACT(主设备)= IGNORE

    NACT(从设备 1)= PUBLISH

    NACT(从设备 2)= SUBSCRIBE

  • 数据从从设备 2 传输到从设备 1:从属设备 2 到主设备以及从属设备 1:

    NACT(主设备)= SUBSCRIBE

    NACT(从属设备 1)= SUBSCRIBE

    NACT(从属设备 2)= PUBLISH

14.4. 寄存器映射

名称

偏移

复位值

USART0 BASE:0x40047000

CR

0x00

0x00000000

MR

0x04

0x00000000

IER

0x08

0x00000000

IDR

0x0C

0x00000000

IMR

0x10

0x00000000

ISR

0x14

0x00000000

RHR

0x18

0x00000000

THR

0x1C

0x00000000

BAUD

0x20

0x00000000

RXTO

0x24

0x00000000

LINMR

0x54

0x00000000

LINID

0x58

0x00000000

LINBR

0x5C

0x00000000

14.5. 寄存器描述

14.5.1. 控制寄存器CR

偏移: 0x00

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

LINWKUP

LINABT

15

14

13

12

11

10

9

8

RETTO

STTTO

STPBRK

STTBRK

RSTSTA

7

6

5

4

3

2

1

0

TXDIS

TXEN

RXDIS

RXEN

RSTTX

RSTRX

位域

名称

类型

描述

21

LINWKUP

WO

发送wakeup信号

20

LINABT

WO

终止LIN传输

15

RETTO

WO

重启接收超时检测

11

STTTO

WO

开始接收超时检测

10

STPBRK

WO

停止发送break

9

STTBRK

WO

开始发送 break

8

RSTSTA

WO

复位状态位

7

TXDIS

WO

发送禁止

6

TXEN

WO

发送使能

5

RXDIS

WO

接收禁止

4

RXEN

WO

接收使能

3

RSTTX

WO

复位发送器

2

RSTRX

WO

复位接收器

14.5.2. 模式寄存器MR

偏移: 0x04

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

OVER8

DATA9b

MSBF

15

14

13

12

11

10

9

8

NBSTOP

PARITY

7

6

5

4

3

2

1

0

NBDATA

CLKS

MODE

位域

名称

类型

描述

19

OVER8

R/W

1 8x Oversampling,0 16x Oversampling

17

DATA9b

R/W

1 数据位位数为9,0 数据位位数由NBDATA定义

16

MSBF

R/W

MSB first

13:12

NBSTOP

R/W

停止位位数,0 1bit 1 1.5bit 2 2bit

11:9

PARITY

R/W

校验位,0 Even parity 1 Odd parity 2 force 0 3 force 1 4 No parity

7:6

NBDATA

R/W

数据位位数,0 5bit 1 6bit 2 7bit 3 8bit

5:4

CLKS

R/W

时钟源选择

3:0

MODE

R/W

0 UART 10 LIN Master 11 LIN Slave

14.5.3. 中断使能寄存器IER

偏移: 0x08

复位值: 0x00000000

31

30

29

28

27

26

25

24

HDRTO

NAKERR

CHKERR

IDERR

SYNCERR

BITERR

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

DONE

ID

BRK

RXBFULL

TXBEMPTY

TXEMPTY

RXTO

7

6

5

4

3

2

1

0

PARITYERR

FRAMERR

OVRERR

RXBRK

TXRDY

RXRDY

位域

名称

类型

描述

31

HDRTO

WO

LIN头超时中断

29

NAKERR

WO

LIN无从机响应错误中断

28

CHKERR

WO

LIN校验和错误中断

27

IDERR

WO

LIN ID校验错误中断

26

SYNCERR

WO

LIN同步域错误中断

25

BITERR

WO

位错误中断

15

DONE

WO

LIN传输完成中断

14

ID

WO

发送出或接收到LIN ID中断

13

BRK

WO

发送出或接收到break中断

12

RXBFULL

WO

接收缓冲满中断

11

TXBEMPTY

WO

发送缓冲空中断

9

TXEMPTY

WO

发送空中断

8

RXTO

WO

接收超时中断

7

PARITYERR

WO

接收奇偶校验错误中断

6

FRAMERR

WO

接收帧错误中断

5

OVRERR

WO

接收数据溢出中断

2

RXBRK

WO

接收到break 中断

1

TXRDY

WO

发送出数据中断,即THR为空

0

RXRDY

WO

接收到数据中断,即 RHR 非空

14.5.4. 中断禁止寄存器IDR

偏移: 0x0C

复位值: 0x00000000

31

30

29

28

27

26

25

24

HDRTO

NAKERR

CHKERR

IDERR

SYNCERR

BITERR

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

DONE

ID

BRK

RXBFULL

TXBEMPTY

TXEMPTY

RXTO

7

6

5

4

3

2

1

0

PARITYERR

FRAMERR

OVRERR

RXBRK

TXRDY

RXRDY

位域

名称

类型

描述

31

HDRTO

WO

LIN头超时中断

29

NAKERR

WO

LIN无从机响应错误中断

28

CHKERR

WO

LIN校验和错误中断

27

IDERR

WO

LIN ID校验错误中断

26

SYNCERR

WO

LIN同步域错误中断

25

BITERR

WO

位错误中断

15

DONE

WO

LIN传输完成中断

14

ID

WO

发送出或接收到LIN ID中断

13

BRK

WO

发送出或接收到break中断

12

RXBFULL

WO

接收缓冲满中断

11

TXBEMPTY

WO

发送缓冲空中断

9

TXEMPTY

WO

发送空中断

8

RXTO

WO

接收超时中断

7

PARITYERR

WO

接收奇偶校验错误中断

6

FRAMERR

WO

接收帧错误中断

5

OVRERR

WO

接收数据移除中断

2

RXBRK

WO

接收到break 中断

1

TXRDY

WO

发送出数据中断,即THR为空

0

RXRDY

WO

接收到数据中断,即 RHR 非空

14.5.5. 中断屏蔽寄存器IMR

偏移: 0x10

复位值: 0x00000000

31

30

29

28

27

26

25

24

HDRTO

NAKERR

CHKERR

IDERR

SYNCERR

BITERR

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

DONE

ID

BRK

RXBFULL

TXBEMPTY

TXEMPTY

RXTO

7

6

5

4

3

2

1

0

PARITYERR

FRAMERR

OVRERR

RXBRK

TXRDY

RXRDY

位域

名称

类型

描述

31

HDRTO

RO

LIN头超时中断

29

NAKERR

RO

LIN无从机响应错误中断

28

CHKERR

RO

LIN校验和错误中断

27

IDERR

RO

LIN ID校验错误中断

26

SYNCERR

RO

LIN同步域错误中断

25

BITERR

RO

位错误中断

15

DONE

RO

LIN传输完成中断

14

ID

RO

发送出或接收到LIN ID中断

13

BRK

RO

发送出或接收到break中断

12

RXBFULL

RO

接收缓冲满中断

11

TXBEMPTY

RO

发送缓冲空中断

9

TXEMPTY

RO

发送空中断

8

RXTO

RO

接收超时中断

7

PARITYERR

RO

接收奇偶校验错误中断

6

FRAMERR

RO

接收帧错误中断

5

OVRERR

RO

接收数据移除中断

2

RXBRK

RO

接收到break 中断

1

TXRDY

RO

发送出数据中断,即THR为空

0

RXRDY

RO

接收到数据中断,即 RHR 非空

14.5.6. 中断状态寄存器ISR

偏移: 0x14

复位值: 0x00000000

31

30

29

28

27

26

25

24

HDRTO

NAKERR

CHKERR

IDERR

SYNCERR

BITERR

23

22

21

20

19

18

17

16

BUSSTA

15

14

13

12

11

10

9

8

DONE

ID

BRK

RXBFULL

TXBEMPTY

TXEMPTY

RXTO

7

6

5

4

3

2

1

0

PARITYERR

FRAMERR

OVRERR

RXBRK

TXRDY

RXRDY

位域

名称

类型

描述

31

HDRTO

RO

LIN头超时中断

29

NAKERR

RO

LIN无从机响应错误中断

28

CHKERR

RO

LIN校验和错误中断

27

IDERR

RO

LIN ID校验错误中断

26

SYNCERR

RO

LIN同步域错误中断

25

BITERR

RO

位错误中断

23

BUSSTA

RO

LIN总线当前状态

15

DONE

RO

LIN传输完成中断

14

ID

RO

发送出或接收到LIN ID中断

13

BRK

RO

发送出或接收到break中断

12

RXBFULL

RO

接收缓冲满中断

11

TXBEMPTY

RO

发送缓冲空中断

9

TXEMPTY

RO

发送空中断

8

RXTO

RO

接收超时中断

7

PARITYERR

RO

接收奇偶校验错误中断

6

FRAMERR

RO

接收帧错误中断

5

OVRERR

RO

接收数据移除中断

2

RXBRK

RO

接收到break 中断

1

TXRDY

RO

发送出数据中断,即THR为空

0

RXRDY

RO

接收到数据中断,即 RHR 非空

14.5.7. 接收保持寄存器RHR

偏移: 0x18

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

DATA

7

6

5

4

3

2

1

0

DATA

位域

名称

类型

描述

8:0

DATA

RO

接收到的数据

14.5.8. 发送保持寄存器THR

偏移: 0x1C

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

DATA

7

6

5

4

3

2

1

0

DATA

位域

名称

类型

描述

8:0

DATA

WO

写入要发送的数据

14.5.9. 波特率寄存器BAUD

偏移: 0x20

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

FDIV

15

14

13

12

11

10

9

8

IDIV

7

6

5

4

3

2

1

0

IDIV

位域

名称

类型

描述

18:16

FDIV

R/W

小数分频部分

15:0

IDIV

R/W

整数分频部分

14.5.10. 接收超时寄存器RXTO

偏移: 0x24

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

Timeout

7

6

5

4

3

2

1

0

Timeout

位域

名称

类型

描述

15:0

Timeout

R/W

接收超时时间

14.5.11. LIN模式寄存器LINMR

偏移: 0x54

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

SYNCDIS

15

14

13

12

11

10

9

8

DLC

7

6

5

4

3

2

1

0

WKUPTYP

FSMDIS

RDLMOD

CHKTYP

CHKDIS

PARDIS

NACT

位域

名称

类型

描述

17

SYNCDIS

R/W

同步禁止

15:8

DLC

R/W

response data length is equal to DLC+1 bytes

7

WKUPTYP

R/W

0 LIN 2.0 wakeup signal 1 LIN 1.3 wakeup signal

6

FSMDIS

R/W

Frame Slot Mode Disable

5

RDLMOD

R/W

响应数据长度 defined by: 0 DLC field 1 the bits 5 and 6 of LINID register

4

CHKTYP

R/W

校验类型,0 LIN 2.0 Enhanced Checksum 1 LIN 1.3 Classic Checksum

3

CHKDIS

R/W

校验和禁止

2

PARDIS

R/W

奇偶校验禁止

1:0

NACT

R/W

节点动作,0 transmit the response 1 receive the response 2 ignore

14.5.12. LIN ID寄存器LINID

偏移: 0x58

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

ID

位域

名称

类型

描述

7:0

ID

R/W

LIN ID 字符

14.5.13. LIN 波特率寄存器LINBR

偏移: 0x5C

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

FDIV

15

14

13

12

11

10

9

8

IDIV

7

6

5

4

3

2

1

0

IDIV

位域

名称

类型

描述

18:16

FDIV

RO

小数分频部分

15:0

IDIV

RO

整数分频部分,同步后读取返回当前波特率分频值