0% found this document useful (0 votes)
254 views62 pages

PY32F002B Reference Manual v0.5-4

Manual Referencia para el microcontrolador ARM M0+ PY32F002B

Uploaded by

palurdo2
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
254 views62 pages

PY32F002B Reference Manual v0.5-4

Manual Referencia para el microcontrolador ARM M0+ PY32F002B

Uploaded by

palurdo2
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 62

PY32F002B 参考手册

— 在 ADDR 事件里,清零 ACK 位


— 清零 ADDR
— 写 STOP 或者 START 位
— 在 RxNE 标志置位后,读数据

7-bit master receiver

S Address A DATA1 NA P

EV5 EV6_3 EV7

图 19-9 方法 2: N=1 时主模式发送时的时序


Legend: S= Start, Sr= Repeated Start, P= Stop, A= Acknowledge, EVx= Event(with interrupt if ITEVFEN= 1)
EV5:SB=1, 先读 SR1 寄存器,再写 DR 寄存器,清零该位
EV6_3:ADDR=1,写 ACK=0。先读 SR1 寄存器,后读 SR2 寄存器,清零 ADDR 位。在 ADDR 被清零后,写
STOP=1
EV7:RxNE=1, 读 DR 寄存器清零该位
Note:
EV5,EV6_3 事件会拉长 SCL 的低电平,直到相应的软件 sequence 执行结束。

19.3.6. 错误状态

19.3.6.1. 总线错误
在一个地址或数据字节传输期间,当 I2C 接口检测到一个外部的停止或起始条件则产生总线错误。此时:
● BERR 位被置位为’1’;如果设置了 ITERREN 位,则产生一个中断;
● 在 slave 模式:数据被丢弃,硬件释放总线:
─ 如果是错误的 Start 条件,slave 认为是一个 Restart,并等待地址或停止条件
─ 如果是错误的 Stop 条件,slave 按正常的停止条件操作,同时硬件释放总线
● 在 master 模式:硬件不释放总线,同时不影响当前的传输状态。此时由软件决定是否要中止当前的传输。

19.3.6.2. 应答失败(AF)
当接口检测到一个无应答位时,产生应答错误。此时:
● AF 位被置位,如果设置了 ITERREN 位,则产生一个中断
● 当发送器接收到一个 NACK 时,必须复位通讯:
─ 如果是处于 slave 模式,硬件释放总线。
─ 如果是处于 master 模式,软件必须生成一个停止条件或者 repeated start。

19.3.6.3. 仲裁丢失 (ARLO)


当 I2C 接口检测到仲裁丢失时产生仲裁丢失错误,此时:
● ARLO 位被硬件置位,如果设置了 ITERREN 位,则产生一个中断
● I2C 接口自动回到从模式(MSL 位被清除)。当 I2C 接口丢失了仲裁,则它无法在同一个传输中响应它的从地
址,但它可以在赢得总线的 master 发送 repeated start 条件之后响应
● 硬件释放总线

244/305
PY32F002B 参考手册

19.3.6.4. 过载 overrun /欠载 underrun(OVR)


在 slave 模式下,如果禁止时钟延长,I2C 接口正在接收数据时,当它已经接收到一个字节(RxNE=1),但
在 DR 寄存器中前一个字节数据还没有被读出,则发生过载错误。
此时:
● 最后接收的数据被丢弃
● 在 over 正常运行错误时,软件应清除 RxNE 位,发送器应该重新发送最后一次发送的字节
在 slave 模式下,如果禁止时钟延长,I2C 接口正在发送数据时,在下一个字节的时钟到达之前,新的数据
还未写入 DR 寄存器(TxE=1),则发生欠载错误。此时:
● 在 DR 寄存器中的前一个字节将被重复发出
● 用户应该确定在发生 underrun 运行错误时,接收端应丢弃重复接收到的数据。发送端应按 I2C 总线标准在规
定的时间更新 DR 寄存器
在发送第一个字节时,必须在清除 ADDR 之后且在第一个 SCL 上升沿之前写入 DR 寄存器;如果不能做到
这点,则接收方应该丢弃第一个数据。

19.3.7. SDA/SCL 控制

● 如果允许时钟延长:
─ 发送器模式:如果 TxE=1 且 BTF=1:I2C 接口在传输前保持时钟线为低,以等待软件读取 SR1,然后把数据
写进数据寄存器(DR 和 shift 寄存器都是空的)。
─ 接收器模式:如果 RxNE=1 且 BTF=1:I2C 接口在接收到数据字节后保持时钟线为低,以等待软件读 SR1,
然后读数据寄存器 DR(DR 和 shift 寄存器都是满的)。
● 如果在 slave 模式中禁止时钟延长:
─ 如果 RxNE=1,在接收到下个字节前 DR 还没有被读出,则发生 overrun 运行。接收到的最后一个字节丢失。
─ 如果 TxE=1,在必须发送下个字节之前却没有新数据写进 DR,则发生 underrun 运行。相同的字节将被重复
发出。
─ 硬件未实现对重复写冲突的控制。

19.4. I2C 中断
表 19-1 I2C 中断请求
中断事件 事件标志 开启控制位
起始位已发送(Master) SB
地址已发送(Master) 或 地址匹配(Slave) ADDR
ITEVTEN
已收到停止(Slave) STOPF
数据字节传输完成 BTF
接收缓冲区非空 RxNE
ITEVTEN 和 ITBUFEN
发送缓冲区空 TxE
总线错误 BERR
仲裁丢失(Master) ARLO
响应失败 AF ITERREN
过载/欠载 OVR
PEC 错误 PECERR

245/305
PY32F002B 参考手册

19.5. I2C 寄存器


寄存器可以 half-word 或者 word 访问。

19.5.1. I2C 控制寄存器 1 (I2C_CR1)

Address offset:0x00
Reset value:0x0000
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
NO
SWRS Re Re Re PO AC STO STAR ENG Re Re Re Re Re
STRETC PE
T s s s S K P T C s s s s s
H
R
RW RW RW RW RW RW RW
W

Bit Name R/W Reset Value Function


软件复位。
当被置位时,I2C 处于复位状态。在复位释放
前,要确保 I2C 的引脚被释放,总线是空闲状
态。
15 SWRST RW 0 0:I2C 模块不处于复位状态
1:I2C 模块处于复位状态
注:该位可以用于 error 或 locked 状态时重新初
始化 I2C。如 BUSY 位为 1,在总线上又没有检
测到停止条件时。
14:12 Reserved RES - Reserved
ACK 位(用于数据接收),软件可置位/清零该寄
存器,或 PE=0 时由硬件清零。
0:ACK 位控制当前移位寄存器内正在接收的字
节的(N)ACK。
1:ACK 位控制在移位寄存器里接收的下一个字
11 POS RW 0
节的(N)ACK。
注:POS 位只能用在 2 字节的接收配置中,必须
在接收数据之前配置。
为了 NACK 第 2 个字节,必须在清除 ADDR 之后
清除 ACK 位。
应答使能。软件可置位/清零该寄存器,或 PE=0
时由硬件清零。
10 ACK RW 0 0:无应答返回
1:在接收到一个字节后返回一个应答。(匹配的
地址或数据)
停止条件产生,软件可以置位/清零该寄存器,或
者当检测到停止条件时,由硬件清除;当检测到
超时错误时,硬件置位。
在主模式下:
9 STOP RW 0
0:无停止条件产生
1:在当前字节传输或在当前起始条件发出后产生
停止条件
在从模式下:

246/305
PY32F002B 参考手册

Bit Name R/W Reset Value Function


0:无停止条件产生
1:在当前字节传输后释放 SCL 和 SDA 线
起始条件产生。
软件可置位/清零该寄存器,或当起始条件发出后
或 PE=0 时由硬件清零。
主模式:
0:无起始条件产生
8 START RW 0
1:重复产生起始条件
从模式:
0:无起始条件产生
1:当总线空闲时,产生起始条件(并由硬件自动
切换到 master mode)
禁止时钟延长(Slave)。
当 ADDR 或 BTF 标志被置位时,该位用于 slave
7 NOSTRETCH RW 0 禁止时钟延长,直到被软件复位。
0:允许时钟延长
1:禁止时钟延长
广播呼叫使能。
6 ENGC RW 0 0:禁止广播呼叫。以 NACK 响应地址 00h
1:允许广播呼叫。以 ACK 响应地址 00h
5:1 Reserved RES - Reserved
I2C 模块使能。
0:禁止
1:I2C 使能
0 PE RW 0 注:如果清除该位时通讯正在进行,在当前通讯
结束后,I2C 模块被禁用并返回空闲状态。
由于在通讯结束后 PE=0,所有的位被清除。
在主模式下,通讯结束之前,绝不能清除该位。
注:当设置了 STOP/START 位,在硬件清除这个位之前,软件不要执行任何对 I2C_CR1 的写操作;否则有可
能会第 2 次设置 STOP/START 位。

19.5.2. I2C 控制寄存器 2 (I2C_CR2)

Address offset:0x04
Reset value:0x0000
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
IT- ITEV- ITER-
Res Res Res Res Res Res Res FREQ[5:0]
BUFEN TEN REN
RW RW RW RW RW RW RW RW RW

Bit Name R/W Reset Value Function


15:11 Reserved RES - Reserved
缓冲器中断使能。
10 ITBUFEN RW 0 0:当 TxE=1 或 RxNE=1 时,不产生中断
1:当 TxE=1 或 RxNE=1 时,产生事件中断
事件中断使能。
9 ITEVTEN RW 0 0:禁止
1:允许事件中断

247/305
PY32F002B 参考手册

Bit Name R/W Reset Value Function


在下列条件下,将产生该中断:
 SB=1(主模式);
 ADDR=1(主/从模式)
 STOPF=1(从模式)
 BTF=1,但没有 TxE 或 RxNE 事件
 如果 ITBUFFEN=1,TxE 事件为 1
 如果 ITBUFEN=1,RxNE 事件为 1
错误中断使能。
0:禁止错误中断;
1:允许错误中断;

8 ITERREN RW 0 在下列条件下,将产生该中断:
 BERR=1
 ARLO=1
 AF=1
 OVR=1
 PECERR=1
7:6 Reserved RES - Reserved
I2C 模块时钟频率。
必须用 APB 时钟频率的值配置该寄存器,以产生
与 I2C 协议兼容的数据 setup 和 hold 时间。
最小允许可设定的频率是 4MHz(标准模式,即
100k)、8MHz(400k),最大频率是芯片最高
的 APB 时钟频率。
5:0 FREQ RW 0
000000:禁止
000001:禁止
000100:4MHz
…..
010110:24MHz
大于 110000:禁止。

19.5.3. I2C 自身地址寄存器 1 (I2C_OAR1)

Address offset:0x08
Reset value:0x0000
15 14 13 12 11 10 9 8 7 6 54 3 2 1 0
Res Res Res Res Res Res Res ADD[7:1] Res
RW RW RW RW RW RW

Bit Name R/W Reset Value Function


14:8 Reserved RES - Reserved
7:1 ADD[7:1] RW 0 接口地址的 7~1 位。
0 Reserved RES - Reserved

19.5.4. I2C 数据寄存器 (I2C_DR)

Address offset:0x10
Reset value:0x0000
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res Res Res Res Res Res Res Res DR[7:0]
RW RW RW RW RW RW RW RW

248/305
PY32F002B 参考手册

Bit Name R/W Reset Value Function


15:8 Reserved RES - Reserved
8 位数据寄存器,芯片内部实际是两个独立的 buffer 共用
一个地址,分别用于存放接收到的数据(RX_DR)、放
置要发送到总线的数据(TX_DR)。
发送器模式:
当写一个字节至 DR 寄存器时(实际写到 TX_DR),自
动启动数据传输。一旦传输开始(TxE=1),如果能及时
把下一个需传输的数据写入 DR 寄存器,I2C 模块将保持
连续的数据流。
接收器模式:
7:0 DR[7:0] RW 0
接收到的字节被拷贝到 DR 寄存器(实际是 RX_DR)
(RxNE=1)。在接收到下一个字节(RxNE=1)之前读
出数据寄存器,即可实现连续的数据接收。
注:
1) 在 slave 模式下,地址不会被 copy 进数据寄存器 DR
2) 硬件不处理写冲突(如果 TxE=0,仍能写入数据寄
存器)
3) 如果在处理 ACK 脉冲时发生 ARLO 事件,接收到的
字节不会被 copy 到数据寄存器里,因此不能读到

19.5.5. I2C 状态寄存器(I2C_SR1)

Address offset:0x14
Reset value:0x0000
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Re Re Re Re Tx RxN Re STOP Re BT ADD S
OVR AF ARLO BERR
s s s s E E s F s F R B
RC_W RC_W RC_W RC_W
R R R R R R
0 0 0 0

Bit Name R/W Reset Value Function


15:13 Reserved RES - Reserved
在接收时发生 PEC 错误。
0:无 PEC 错误,接收到 PEC 后返回 ACK(如
果 ACK=1)
12 PECERR RC_W0 0 1:有 PEC 错误,接收到 PEC 后返回 NACK(不
管 ACK 为何值)
该位由软件写 0 清除,或当 PE=0 时由硬件清
除。
过载/欠载标志。
0:无过载/欠载;
1:出现过载/欠载。
当 NOSTRETCH=1 时,在从模式下该位被硬件
11 OVR RC_W0 0
置位;
在接收模式中当收到一个新的字节时(包括 ACK
应答脉冲),数据寄存器里的内容还未被读出,
则新接收的字节将丢失。

249/305
PY32F002B 参考手册

Bit Name R/W Reset Value Function


在发送模式中当要发送一个新的字节时,却没有
新的数据写入数据寄存器,同样的字节将被发送
两次。
该位由软件写 0 清除,或当 PE=0 时由硬件清
除。
注:如果数据寄存器的写操作发生时间非常接近
SCL 的上升沿,发送的数据是不确定的,并发生
保持时间错误。
应答失败标志。
0:没有应答失败;
1:应答失败。
10 AF RC_W0 0
当没有返回应答时,硬件将置位该寄存器。
该位由软件写 0 清除,或当 PE=0 时由硬件清
除。
仲裁丢失(主模式)。
0:没有检测到仲裁丢失;
1:检测到仲裁丢失。
当接口失去对总线的控制给另一个主机时,硬件
9 ARLO RC_W0 0 将置位该寄存器。
该位由软件写 0 清除,或在 PE=0 时由硬件清
除。
在 ARLO 事件之后,I2C 接口自动切换回从模式
(M/SL=0)。
总线出错标志。
0:无起始或者停止条件出错;
1:起始或者停止条件出错。
8 BERR RC_W0 0 当接口检测到错误的起始或者停止条件,硬件将
该位置 1。
该位由软件写 0 清除,或者在 PE=0 时由硬件清
除。
数据寄存器为空(发送时)标志。
0:数据寄存器非空;
1:数据寄存器为空。
在发送数据时,数据寄存器为空时该位被置 1,
在发送地址阶段不设置该位。
软件写数据到 DR 寄存器可清除该位,或在发生
7 TxE R 0 一个起始或停止条件后,或当 PE=0 时由硬件自
动清除。
如果收到一个 NACK,或下一个要发送的字节时
PEC(PEC=1),该位不被置位。
注:在写入第 1 个要发送的数据后,或设置了
BTF 时写入数据,都不能清除 TxE 位,因为此时
数据寄存器为空。
数据寄存器非空(接收时)标志。
6 RxNE R 0 0:数据寄存器为空;
1:数据寄存器非空。

250/305
PY32F002B 参考手册

Bit Name R/W Reset Value Function


在接收时,当数据寄存器不为空,置位该寄存
器。在接收地址阶段,该寄存器不置位。
软件对数据寄存器的读写操作会清除该寄存器,
或当 PE=0 时由硬件清除。
注:当设置了 BTF 时,读取数据不能清除 RxNE
位,因为此时数据寄存器仍为满。
5 Reserved RES - Reserved
停止条件检测位(从模式)。
0:没有检测到停止位;
1:检测到停止条件。
在一个应答之后(如果 ACK=1),当从设备在总
4 STOPF R 0 线上检测到停止条件时,硬件将该位置 1。
软件读取 I2C_SR1 寄存器后,对 I2C_CR1 寄存
器的写操作将清除该位,或当 PE=0 时,硬件清
除该位。
注:在收到 NACK 后,STOPF 位不会置位。
3 reserved
字节传输结束标志位。
0:字节传输未完成
1:字节传输成功结束
在下列情况下硬件将置位该寄存器(当 slave 模
式,NOSTRETCH=0 时;master 模式,与
NOSTRETCH 无关):
— 接收时,当收到一个新字节(包括 ACK 脉
冲 ) 且 数 据 寄 存 器 还 未 被 读 取
2 BTF R 0
(RxNE=1)。
— 发送时,当一个新数据应该被发送,且数据
寄存器还未被写入新的数据(TxE=1)。
软件读取 I2C_SR1 寄存器后,对数据寄存器
的读或写操作将清除该位;或发送一个起始或停
止条件后,或当 PE=0 时,由硬件清除。
注:
在收到一个 NACK 后,BTF 位不会被置位。
地址已被发送(主模式)/地址匹配(从模式)。
软件读取 I2C_SR1 寄存器后,再读 I2C_SR2 寄
存器将清除该位;当 PE=0 时,由硬件清除。
地址匹配(Slave):
0:地址不匹配或没有收到地址;
1:收到的地址匹配。
当收到的从地址与 OAR 寄存器或 general call 地
1 ADDR R 0
址匹配,硬件将置位该位。
Note: 在 slave 模式下,推荐进行完整的清零
sequece,即在 ADDR 被置位后,先读 SR1 寄存
器,再读 SR2 寄存器。
地址已发送(Master):
0:地址发送没有结束;
1:地址发送结束。

251/305
PY32F002B 参考手册

Bit Name R/W Reset Value Function


7 位地址时,当收到 ACK byte 后置位。
Note: 在收到 NACK 后,该寄存器不会被置位。
起始位标志(主模式)。
0:未发送起始条件;
1:起始条件已发送;
0 SB R 0 —当发送起始条件时,置位该寄存器。
—软件读取 I2C_SR1 寄存器后,对数据寄存器的
写操作将清除该位;或当 PE=0 时,由硬件清
除。

19.5.6. I2C 状态寄存器 2 (I2C_SR2)

Address offset:0x18
Reset value:0x0000
Note: 即使 ADDR 标志位在读 I2C_SR1 寄存器后被置位,在读 I2C_SR1 之后再读 I2C_SR2 寄存器,也会清零
ADDR 标志位。因此,仅在发现 I2C_SR1 寄存器的 ADDR 位被置位或者 STOPF 位被清零时,I2C_SR2 寄存
器才必须被读。

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
GEN-
Res Res Res Res Res TRA BUSY MSL
CALL
R R R R R R R R R R R R

Bit Name R/W Reset Value Function


15:7 reserved
广播呼叫地址(从模式)。
0:未收到广播呼叫地址;
4 GENCALL R 0 1:当 ENGC=1 时,收到广播呼叫的地址。
当产生一个停止条件或一个重复的起始条件时,
或 PE=0 时,硬件清除该寄存器。
3 Reserved RES - Reserved
发送/接收标志。
0:接收到数据
1:数据已发送
在整个地址传输阶段的结尾,该寄存器根据地址
2 TRA R 0
字节的 R/W 位来设定。
当检测到停止条件(STOPF=1),或者重复的起
始条件、或者总线仲裁丢失(ARLO=1),或当
PE=0 时,硬件清除该寄存器。
总线忙标志。
0:在总线上无数据通讯
1:在总线上正在进行数据通讯
1 BUSY R 0 当检测到 SDA 或 SCL 为低电平时,硬件置位。
当检测到一个停止条件时,硬件清零。
该寄存器指示当前正在进行的总线通讯,当接口
被禁用(PE=0)时该信息仍然被更新。
0 MSL R 0 主从模式。

252/305
PY32F002B 参考手册

Bit Name R/W Reset Value Function


0:slave
1:master
—当接口处于主模式(SB=1)时,硬件置位;
—当总线上检测到一个停止条件(STOPF=1)、
仲裁丢失(ARLO=1)、或当 PE=0 时,硬件清
零。

19.5.7. I2C 时钟控制寄存器(I2C_CCR)

Address offset:0x1C
Reset value:0x0000
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
F/S DUTY Res Res CCR[11:0]
RW RW RW RW RW RW RW RW RW RW RW RW RW RW

Bit Name R/W Reset Value Function


I2C 主模式选择。
15 F/S RW 0 0:标准模式
1:快速模式
快速模式时的占空比。
14 DUTY RW 0 0:快速模式下:Tlow/Thigh=2
1:快速模式下:Tlow/Thigh=16/9
13:12 Reserved RES - Reserved
快速/标准模式下的时钟控制分频系数(主模
式)。
该分频系数用于设置主模式下的 SCL 时钟。
 标准模式:
 Thigh=CCR x Tpclk
 Tlow =CCR x Tpclk
 快速模式:
 DUTY=0:
Thigh=CCR x Tpclk
Tlow =2 x CCR x Tpclk
11:0 CCR[11:0] RW 0
 DUTY=1(为达到 400KHz):
Thigh=9 x CCR x Tpclk
Tlow =16 x CCR x Tpclk
注:
1. 允许设定的最小值为 0x04,在快速 DUTY 模
式下允许的最小值为 0x01
2. Thigh=tr(SCL)+tw(SCLH)
3. Tlow=tr(SCL)+tw(SCLL)
4. 这些延时没有过滤器
5. 只有当 PE=0 时才能配置该寄存器;

19.5.8. I2C TRISE 寄存器 (I2C_TRISE)

Address offset:0x20
Reset value:0x0000
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res Res Res Res Res Res Res Res Res Res TRISE[5:0]
RW RW RW RW RW RW

253/305
PY32F002B 参考手册

Bit Name R/W Reset Value Function


15:6 Reserved RES - Reserved
在快速/标准模式下的最大上升时间(主模式)。
这些位应该提供在 master mode 下, SCL 反馈
回路的最大持续时间。这样做的目的是无论 SCL
上升沿持续时间多少,SCL 都能保持一个稳定的
频率。
这些位必须设置为 I2C 总线规范里给出的最大的
SCL 上升时间,增长步幅为 1。
5:0 TRISE RW 0 例如:标准模式中最大允许 SCL 上升时间为
1000ns。如果在 I2C_CR2 寄存器中 FREQ[5:0]
中的值等于 0x08,Tpclk=125ns,则 TRISE 中配
置为 0x09(1000ns/125ns = 8 + 1 = 9)。
滤波器的值也可以加到 TRISE 内。
如果结果不为整数,则将整数部分写入 TRISE,
以确保 tHIGH 参数。
注:当 PE=0 时才能设置该寄存器。

19.5.9. I2C 寄存器映像


Offset Register
SWRST 15

14

13

12

11

10

0
TRETCH

ENPEC
START

ENGC
STOP

NOS-
POS
Res.

Res.

Res.

Res.

Res.

Res.

Res.
ACK

PE
I2C_CR1
0x00

Reset value 0 0 0 0 0 0 0 0 0
BUFEN

ITER-
ITEV-

REN
Res.

Res.

Res.

Res.

Res.

Res.

Res.
TEN
IT-

I2C_CR2 FREQ[5:0]
0x04
Reset value 0 0 0 0 0 0 0 0 0
Re

Re

Re

Re

Re

Re

Re

Re

Re
I2C_OAR1 ADD[7:1]
s.

s.

s.

s.

s.

s.

s.

s.

s.
0x08
Reset value 0 0 0 0 0 0 0
Re

Re

Re

Re

Re

Re

Re

Re

I2C_DR DR[7:0]
s.

s.

s.

s.

s.

s.

s.

s.

0x10
Reset value 0 0 0 0 0 0 0 0
ADDR
BERR

RXNE
ARLO

STOP
OVR
Res.

Res.

Res.

Res.

Res.

Res.
TXE

BTF

SB
AF

I2C_SR1
F

0x14
Reset value 0 0 0 0 0 0 0 0 0 0
BUSY
CALL
GEN-
Res.

Res.

Res.

Res.

Res.

Res.

Res.

Res.

Res.

Res.

Res.

Res.

MSL
TRA

I2C_SR2
0x18
Reset value 0 0 0 0
Res.

Res.
DUT
F/S

I2C_CCR CCR[11:0]
Y

0x1C
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Res

Res

Res

Res

Res

Res

Res

Res

Res

Res

I2C_TRISE TRISE[5:0]
.

0x20
Reset value 0 0 0 0 1 0

254/305
PY32F002B 参考手册

2 0 . 通 用 同 步 异 步 收 发 器 ( U S AR T )

20.1. 介绍
通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之
间进行全双工数据交换。USART利用分数波特率发生器提供宽范围的波特率选择。
它支持同步单向通信和半双工单线通信。它还允许多处理器通信。

20.2. USART 主要特性


 全双工异步通信
 NRZ 标准格式
 可配置 16 倍或者 8 倍过采样,增加在速度和时钟容忍度的灵活性
 发送和接收共用的可编程波特率,最高达 4.5Mbit/s
 自动波特率检测
 可编程的数据长度 8 位或者 9 位
 可配置的停止位(1 或者 2 位)
 同步模式和为同步通讯的时钟输出功能
 单线半双工通讯
 独立的发送和接收使能位
 硬件流控制
 检测标志
 接收 buffer 满
 发送 buffer 空
 传输结束
 奇偶校验控制
 发送校验位
 对接收数据进行校验
 带标志的中断源
 CTS 改变
 发送寄存器空
 发送完成
 接收数据寄存器满
 检测到总线空闲
 溢出错误
 帧错误
 噪音操作
 检测错误
 多处理器通信
 如果地址不匹配,则进入静默模式从静默模式唤醒:通过空闲检测和地址标志检测

255/305
PY32F002B 参考手册

20.3. USART 功能描述


USART 接口通过三个引脚与其他设备连接在一起。任何 USART 双向通信至少需要两个脚:接收数据输
入(RX)和发送数据输出(TX)。
RX:接收数据串行输。通过过采样技术来区别数据和噪音,从而恢复数据。
TX:发送数据输出。当发送器被禁止时,输出引脚恢复到它的 I/O 端口配置。当发送器被激活,并且不发送数
据时,TX 引脚处于高电平。在单线模式里,此 I/O 口被同时用于数据的发送和接收。
 总线在发送或接收前应处于空闲状态
 一个起始位
 一个数据字(8 或 9 位),最低有效位在前
 1、2 个的停止位,由此表明数据帧的结束
 使用分数波特率发生器:12 位整数和 4 位小数的表示方法
 一个状态寄存器(USART_SR)
 数据寄存器(USART_DR)
 一个波特率寄存器(USART_BRR),12 位的整数和 4 位小数
在同步模式中需要下列引脚:
CK:发送器时钟输出。
此引脚输出用于同步传输的时钟,(在 Start 位和 Stop 位上没有时钟脉冲,软件可选择是否可以在最后一个
数据位送出一个时钟脉冲)。数据可以在 RX 上同步被接收。这可以用来控制带有移位寄存器的外部设备(例如
LCD 驱动器)。时钟相位和极性都是软件可编程的。
下列引脚在硬件流控模式中需要:
 nCTS: 清除发送,若是高电平,在当前数据传输结束时阻断下一次的数据发送。
 nRTS: 发送请求,若是低电平,表明 USART 准备好接收数据。

256/305
PY32F002B 参考手册

PWDATA PRDATA
Write DATA REGISTER(DR)
CPU CPU
Transmit data Receive data
register(TDR) register(RDR)
TX IrDA
SIR
RX Transmit shift register Receive shift register
EDDEC
BLOCK
GTPR
GT PSC CK CONTROL CK

CR3 CR2
SCEN NACK HD IRLP IREN LINE STOP[1 :0] CKEN CPOL CPHA LBCL

CR2 CR1
USART Address UE M WAKE PCE PS PEIE

RTS HARDWARE
FLOW
CTS CONTROLLER
Receiver
TRANSMIT WAKE RECEIVER clock
CONTROL UP UNIT CONTROL

CR1 SR
RXN E RW
TXEIE TCIE IDLE IE TE RE SBK CTS LBD TXE TC RXN E IDLE ORE NE FE PE
IE U

USART INTREEUPT
CONTROL

USART_BRR

TE TRANSMIT RATE
CONTROL
/16 /USARTDIV
DIV_Mantissa DIV_Fraction
fPCL Kx 15 4 0
(x=1 ,2)

RECEIVER RATE
RE CONTROL
Conventional baud rate generation

图 20-1 USART 框图

20.3.1. USART 特征描述

字长可以通过编程 USART_CR1 寄存器中的 M 位,选择成 8 或 9 位。在起始位期间,TX 脚处于低电平,


在停止位期间处于高电平。
空闲符号被视为完全由’1’组成的一个完整的数据帧,后面跟着包含了数据的下一帧的开始位(‘1’的位数也包
括了停止位的位数)。
断开符号被视为在一个帧周期内全部收到’0’(包括停止位期间,也是’0’)。在断开符号结束时,发送器再插
入 1 或 2 个停止位(‘1’)来应答起始位。
发送和接收由一共用的波特率发生器驱动,当发送器和接收器的使能位分别置位时,分别为其产生时钟。

257/305
PY32F002B 参考手册

9 bit word length(M bit is set),1 stop bit

Data Possible
parity Next Next data frame
frame
Start bit start
bit Bit0 Bit1 Bit2 Bit3 Bit4 Bit5 Bit6 Bit7 Bit8 Stop bit
bit

Clock **

Start
bit
Idle frame
Start
Break frame bit
Stop
bit
** LBCL bit controls last data clock pulse
8 bit word length(M bit is reset),1 stop bit

Data Possible
parity Next Next data frame
frame
Start bit start
bit Bit0 Bit1 Bit2 Bit3 Bit4 Bit5 Bit6 Bit7 Stop bit
bit

Clock
**

Start
bit
Idle frame
Start
Break frame bit
Stop
bit
** LBCL bit controls last data clock pulse

图 20-2 字长设置

20.3.2. 发送器

发送器根据 M 位的状态发送 8 位或 9 位的数据字。当发送使能位(TE)被设置时,发送移位寄存器中的数据


在 TX 脚上输出,相应的时钟脉冲在 CK 脚上输出。

20.3.2.1. 字符发送
在 USART 发送期间,在 TX 引脚上首先移出数据的最低有效位。在此模式 USART_DR 寄存器包含了一个
内部总线和发送移位寄存器之间的缓冲器。
每个字符之前都有一个低电平的起始位;之后跟着的停止位,其数目可配置。USART 支持多种停止位的配
置:1 和 2 个停止位。
注:
在数据传输期间不能复位 TE 位,否则将破坏 TX 脚上的数据,因为波特率计数器停止计数。正在传输的当
前数据将丢失。
TE 位被激活后将发送一个空闲帧。

20.3.2.2. 可配置的停止位
随每个字符发送的停止位的位数可以通过控制寄存器 2 的位 13、12 进行编程。
1) 1 个停止位:停止位位数的默认值。
2) 2 个停止位:可用于常规 USART 模式、单线模式以及调制解调器模式。
空闲帧包括了停止位。

258/305
PY32F002B 参考手册

断开帧是 10 位低电平,后跟停止位(当 m=0 时);或者 11 位低电平,后跟停止位(m=1 时)。不可能传输更


长的断开帧(长度大于 10 或者 11 位)。

Data Possible
a) 1 stop bit
parity Next Next data frame
frame
Start bit start
bit Bit0 Bit1 Bit2 Bit3 Bit4 Bit5 Bit6 Bit7 Stop bit
bit

Clock

b) 2 stop bit Data Possible


parity Next data frame
frame Next
Start bit start
bit Bit0 Bit1 Bit2 Bit3 Bit4 Bit5 Bit6 Bit7 2 stop bit bit

图 20-3 配置停止位
配置步骤:
1) 通过在 USART_CR1 寄存器上置位 UE 位来激活 USART
2) 编程 USART_CR1 的 M 位来定义字长。
3) 在 USART_CR2 中编程停止位的位数。
4) 利用 USART_BRR 寄存器选择要求的波特率。
5) 设置 USART_CR1 中的 TE 位,发送一个空闲帧作为第一次数据发送。
6) 把要发送的数据写进 USART_DR 寄存器(此动作清除 TXE 位)。在只有一个缓冲器的情况下,对每个待发送
的数据重复步骤 7。
7) 在 USART_DR 寄存器中写入最后一个数据字后,要等待 TC=1,它表示最后一个数据帧的传输结束。当需要
关闭 USART 或需要进入停机模式之前,需要确认传输结束,避免破坏最后一次传输。

20.3.2.3. 单字节通信
清零 TXE 位总是通过对数据寄存器的写操作来完成的。TXE 位由硬件来设置,它表明:
 数据已经从 TDR 移送到移位寄存器,数据发送已经开始
 TDR 寄存器被清空
 下一个数据可以被写进 USART_DR 寄存器而不会覆盖先前的数据
如果 TXEIE 位被设置,此标志将产生一个中断。
如果此时 USART 正在发送数据,对 USART_DR 寄存器的写操作把数据存进 TDR 寄存器,并在当前传输
结束时把该数据复制进移位寄存器。
如果此时 USART 没有在发送数据,处于空闲状态,对 USART_DR 寄存器的写操作直接把数据放进移位寄
存器,数据传输开始,TXE 位立即被置起。
当一帧发送完成时(停止位发送后)并且设置了 TXE 位,TC 位被置起,如果 USART_CR1 寄存器中的 TCIE
位被置起时,则会产生中断。
在 USART_DR 寄存器中写入了最后一个数据字后,在关闭 USART 模块之前或设置微控制器进入低功耗模
式(详见下图)之前,必须先等待 TC=1。
使用下列软件过程清除 TC 位:
1.读一次 USART_SR 寄存器;

259/305
PY32F002B 参考手册

2.写一次 USART_DR 寄存器。


注:TC 位也可以通过软件对它写’0’来清除。此清零方式只推荐在多缓冲器通信模式下使用。

Idle
Frame 1 Frame 2 Frame 3
preamble

TX line

Set by hardware cleared Set by hardware cleared


TXE flag by software by software
Set by hardware

USART_DR F1 F2 F3

TC flag
Set by hardware
Software Software waits
enables the Until TXE=1 and writes F2 TC is not set TC is not set TC is set because
USART into DR because TXE=0 because TXE=0 TXE=1

Software waits Software waits


Software waits
Until TXE=1 and writes F1 Until TXE=1 and writes F3
Until TC=1
into DR into DR

图 20-4 TC/TXE behavior when transmitting

20.3.2.4. 断开符号
设置 SBK 可发送一个断开符号。断开帧长度取决 M 位。如果设置 SBK=1,在完成当前数据发送后,将在
TX 线上发送一个断开符号。断开字符发送完成时(在断开符号的停止位时)SBK 被硬件复位。USART 在最后一
个断开帧的结束处插入一逻辑’1’,以保证能识别下一帧的起始位。
注意:如果在开始发送断开帧之前,软件又复位了 SBK 位,断开符号将不被发送。如果要发送两个连续的
断开帧, SBK 位应该在前一个断开符号的停止位之后置起。

20.3.2.5. 空闲符号
置位 TE 将使得 USART 在第一个数据帧前发送一空闲帧。

20.3.3. 接收器

USART 可以根据 USART_CR1 的 M 位接收 8 位或 9 位的数据字。

20.3.3.1. 开始位检测
在 USART 中,如果辨认出一个特殊的采样序列,那么就认为侦测到一个起始位。该序列为: 1 1 1 0 X 0
X0X0000

260/305
PY32F002B 参考手册

RX state Idle Start bit

RX line

ideal
sample 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
clock
Sample
values
real
sample
clock X X X X X X X X 9 10 11 12 13 14 15 16
6/16

7/16 7/16

One bit time

1 1 1 0 X 0 X 0 X 0 0 0 0 X X X X X X

At least 2 At least 2
Falling edge
bits out of 3 bits out of 3
detection
at 0 at 0

图 20-5 开始位检测
如果该序列不完整,那么接收端将退出起始位侦测并回到空闲状态(不设置标志位)等待下降沿。如果 3 个采
样点都为’0’(在第 3、5、7 位的第一次采样,和在第 8、9、10 的第二次采样都为’0’),则确认收到起始位,这时
设置 RXNE 标志位,如果 RXNEIE=1,则产生中断。
如果两次 3 个采样点上仅有 2 个是’0’(第 3、5、7 位的采样点和第 8、9、10 位的采样点),那么起始位仍然
是有效的,但是会设置 NE 噪声标志位。如果不能满足这个条件,则中止起始位的侦测过程,接收器会回到空闲
状态(不设置标志位)。
如果有一次 3 个采样点上仅有 2 个是’0’(第 3、5、7 位的采样点或第 8、9、10 位的采样点),那么起始位仍
然是有效的,但是会设置 NE 噪声标志位。

20.3.3.2. 字符接收
在 USART 接收期间,数据的最低有效位首先从 RX 脚移进。在此模式里, USART_DR 寄存器包含的缓冲
器位于内部总线和接收移位寄存器之间。
配置步骤:
1. 将 USART_CR1 寄存器的 UE 置 1 来激活 USART。
2. 编程 USART_CR1 的 M 位定义字长
3. 在 USART_CR2 中编写停止位的个数
4. 利用波特率寄存器 USART_BRR 选择希望的波特率。
5. 设置 USART_CR1 的 RE 位。激活接收器,使它开始寻找起始位。
当一字符被接收到时:
● RXNE 位被置位。它表明移位寄存器的内容被转移到 RDR。换句话说,数据已经被接收并且可以被读出(包括
与之有关的错误标志)。
● 如果 RXNEIE 位被设置,产生中断。
● 在接收期间如果检测到帧错误,噪音或溢出错误,错误标志将被置起

261/305
PY32F002B 参考手册

● 在单缓冲器模式里,由软件读 USART_DR 寄存器完成对 RXNE 位清除。 RXNE 标志也可以通过对它写 0 来


清除。RXNE 位必须在下一字符接收结束前被清零,以避免溢出错误。
注意: 在接收数据时,RE 位不应该被复位。如果 RE 位在接收时被清零,当前字节的接收被丢失。

20.3.3.3. 断开符号
当接收到一个断开帧时,USART 像处理帧错误一样处理它。

20.3.3.4. 空闲符号
当一空闲帧被检测到时,其处理步骤和接收到普通数据帧一样,但如果 IDLEIE 位被设置将产生一个中断。

20.3.3.5. 溢出错误
如果 RXNE 还没有被复位,又接收到一个字符,则发生溢出错误。数据只有当 RXNE 位被清零后才能从移
位寄存器转移到 RDR 寄存器。 RXNE 标记是接收到每个字节后被置位的。如果下一个数据已被收到, RXNE
标志仍是置起的,溢出错误产生。
当溢出错误产生时:
● ORE 位被置位。
● RDR 内容将不会丢失。读 USART_DR 寄存器仍能得到先前的数据。
● 移位寄存器中以前的内容将被覆盖。随后接收到的数据都将丢失。
● 如果 RXNEIE 位被设置或 EIE 被设置,中断产生。
● 顺序执行对 USART_SR 和 USART_DR 寄存器的读操作,可复位 ORE 位
注意:当 ORE 位置位时,表明至少有 1 个数据已经丢失。有两种可能性:
● 如果 RXNE=1,上一个有效数据还在接收寄存器 RDR 上,可以被读出。
● 如果 RXNE=0,这意味着上一个有效数据已经被读走,RDR 已经没有东西可读。当上一个有效数据在 RDR
中被读取的同时又接收到新的(也就是丢失的)数据时,此种情况可能发生。在读序列期间(在 USART_SR 寄存器
读访问和 USART_DR 读访问之间)接收到新的数据,此种情况也可能发生。

20.3.3.6. 噪音错误
使用过采样技术(同步模式除外),通过区别有效输入数据和噪音来进行数据恢复。

RX line

Sampled values

sample
clock 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
6/16

7/16 7/16

One bit time

图 20-6 检测噪声的数据采样

表 20-1 检测噪声的数据采样
采样值 NE 状态 接收的位值 数据有效性
000 0 0 Valid
001 1 0 Not Valid

262/305
PY32F002B 参考手册

采样值 NE 状态 接收的位值 数据有效性


010 1 0 Not Valid
011 1 1 Not Valid
100 1 0 Not Valid
101 1 1 Not Valid
110 1 1 Not Valid
111 0 1 Valid

当在接收帧中检测到噪音时:
● 在 RXNE 位的上升沿设置 NE 标志。
● 无效数据从移位寄存器传送到 USART_DR 寄存器。
● 在单个字节通信情况下,没有中断产生。然而,因为 NE 标志位和 RXNE 标志位是同时被设置, RXNE
将产生中断。在多缓冲器通信情况下,如果已经设置了 USART_CR3 寄存器中 EIE 位,将产生一个中断。
先读出 USART_SR,再读出 USART_DR 寄存器,将清除 NE 标志位

20.3.3.7. 帧错误
当以下情况发生时检测到帧错误:
由于没有同步上或大量噪音的原因,停止位没有在预期的时间上接和收识别出来。
当帧错误被检测到时:
● FE 位被硬件置起
● 无效数据从移位寄存器传送到 USART_DR 寄存器。
● 在单字节通信时,没有中断产生。然而,这个位和 RXNE 位同时置起,后者将产生中断。在多缓冲器通
信情况下,如果 USART_CR3 寄存器中 EIE 位被置位的话,将产生中断。
顺序执行对 USART_SR 和 USART_DR 寄存器的读操作,可复位 FE 位。

20.3.3.8. 接收期间的可配置的停止位
接收期间的可配置的停止位被接收的停止位的个数可以通过控制寄存器 2 的控制位来配置,在正常模式
时,可以是 1 或 2 个。
 1 个停止位:对 1 个停止位的采样在第 8,第 9 和第 10 采样点上进行。
 2 个停止位:对 2 个停止位的采样是在第一停止位的第 8,第 9 和第 10 个采样点完成的。如果第一个
停止位期间检测到一个帧错误,帧错误标志将被设置。第二个停止位不再检查帧错误。在第一个停止
位结束时 RXNE 标志将被设置。

20.3.4. 分数波特率的产生

分数波特率的产生接收器和发送器的波特率在 USARTDIV 的整数和小数寄存器中的值应设置成相同。


Tx / Rx 波特率 =fCK /(16*USARTDIV )
这里的 fCK 是给外设的时钟 USARTDIV 是一个无符号的定点数。这 12 位的值设置在 USART_BRR
寄存器。
注:在写入 USART_BRR 之后,波特率计数器会被波特率寄存器的新值替换。因此,不要在通信进行
中改变波特率寄存器的数值。
如何从 USART_BRR 寄存器值得到 USARTDIV
例 1:
如果 DIV_Mantissa = 27,DIV_Fraction = 12 (USART_BRR=0x1BC),
则:

263/305
PY32F002B 参考手册

Mantissa (USARTDIV) = 27
Fraction (USARTDIV) = 12/16 = 0.75
所以 USARTDIV = 27.75
例 2:
要求 USARTDIV = 25.62,
就有:
DIV_Fraction = 16*0.62 = 9.92
最接近的整数是: 10 = 0x0A
DIV_Mantissa = mantissa (25.620) = 25 = 0x19
于是, USART_BRR = 0x19A
例 3:
要求 USARTDIV = 50.99
就有:
DIV_Fraction = 16*0.99 = 15.84
最接近的整数是:16 = 0x10 => DIV_frac[3:0]溢出 => 进位必须加到小数部分
DIV_Mantissa = mantissa (50.990 + 进位) = 51 = 0x33
于是:USART_BRR = 0x330,USARTDIV=51

波特率 FPCLK=36MHz FPCLK=72MHz


置于波特率寄存器 置于波特率寄存器
序号 Kbps 实际 误差(%) 实际 误差(%)
中的值 中的值
1 2.4 2.400 937.5 0% 2.4 1875 0%
2 9.6 9.600 234.375 0% 9.6 468.75 0%
3 19.2 19.2 117.1875 0% 19.2 234.375 0%
4 57.6 57.6 39.0625 0% 57.6 78.125 0%
5 115.2 115.384 19.5 0.15% 115.2 39.0625 0%
6 230.4 230.769 9.75 0.16% 230.769 19.5 0.16%
7 460.8 461.538 4.875 0.16% 461.538 9.75 0.16%
8 921.6 923.076 2.4375 0.16% 923.076 4.875 0.16%
9 2250 2250 1 0% 2250 2 0%
10 4500 不可能 不可能 不可能 4500 1 0%
注: CPU 的时钟频率越低,则某一特定波特率的误差也越低。可以达到的波特率上限可以由这组数据得到。

20.3.5. USART 接收器容忍度

只有当整体的时钟系统地变化小于 USART 异步接收器能够容忍的范围,USART 异步接收器才能正常地工


作。影响这些变化的因素有:
 DTRA:由于发送器误差而产生的变化(包括发送器端振荡器的变化)
 DQUANT:接收器端波特率取整所产生的误差
 DREC:接收器端振荡器的变化
 DTCL:由于传输线路产生的变化(通常是由于收发器在由低变高的转换时序,与由高变低转换时序之间的
不一致性所造成)。
需要满足: DTRA + DQUANT + DREC + DTCL < USART 接收器的容忍度。
对于正常接收数据,USART 接收器的容忍度等于最大能容忍的变化,它依赖于下述选择:
 由 USART_CR1 寄存器的 M 位定义的 10 或 11 位字符长度

264/305
PY32F002B 参考手册

 是否使用分数波特率产生
表 20-2 DIV_Fraction 为 0 时 USART 接收器的容忍度
M bit NF is an error NF is don’t care
0 3.75% 4.375%
1 3.41% 3.97%

表 20-3 DIV_Fraction 非 0 时 USART 接收器容忍度


M bit NF is an error NF is don’t care
0 3.33% 3.88%
1 3.03% 3.53%

20.3.6. USART 自动波特率检测

USART 能够基于一个字符的接收,检测并自动设定 USARTx_BRR 寄存器的值。自动波特率检测在以下场


景是有用处的:
1) 系统通讯速率提前未确认
2) 系统正在使用相对低精度的时钟源,该机制允许在不测量时钟偏差的情况下,获得正确的波特率
时钟源频率必须与被期望的通讯速率兼容。(必须选择 16 倍过采样,并从 fCK/65535 和 fCK/16 之间选择)
在激活自动波特率检测之前,自动波特率检测模式必须被选择(通过 USARTx_CR3 寄存器的
ABRMOD[1:0]位被选择)。基于不同的字符模式,有各种模式。
在这些自动波特率模式下,波特率在同步数据接收期间会被测量几次,每次测量都会跟之前进行对比。
这些模式是:
MODE 0: 任何以 1 开始的字符。在这种情况下,USART 测量起始位的宽度(下降沿到上升沿)
MODE 1: 任何以 10xx 位开始的字符。在这种情况下,USART 测量起始位和第一个数据位的宽度。该测量
在下降沿到下降沿之间进行,以确保在慢速信号上升情况下更好的精度。
另一个对每个 RX 的 transition 的检查也会并行进行。如果 RX 上的 transition 没有与接收器充分的同步(接
收器基于 bit 0 计算的波特率),则会产生错误。
在激活自动波特率检测之前,USARTx_BRR 寄存器必须通过写一个 non-zero 波特率值进行初始化。
通过置位 USARTx_CR3 寄存器的 ABREN 位,可以激活自动波特率检测功能。USART 将等待 RX 上的第
一个字符。置位 USARTx_ISR 寄存器的 ABRF 标志,显示了自动波特率检测的完成。如果通讯线上是有噪声
的,则自动波特率检测的正确进行不能被保证。在这种情况下,BRR 的值可能被破坏,ABRE 错误标志位将被
置位。如果通讯速度与自动波特率检测范围不兼容(位宽不在 16 和 65535 个时钟周期之间@16 位过采样),
ABRE 错误也会发生。
RXNE 中断将显示了操作的完成。在以后的任何时刻,自动波特率检测可能通过复位 ABRF 标志(通过写
0)再次启动。
Note:如果在自动波特期间,清零 UE,BRR 值可能被破坏。

20.3.7. 多处理器通信

通过 USART 可以实现多处理器通信(将几个 USART 连在一个网络里)。例如某个 USART 设备可以是主,


它的 TX 输出和其他 USART 从设备的 RX 输入相连接;USART 从设备各自的 TX 输出逻辑地与在一起,并且和
主设备的 RX 输入相连接。
在多处理器配置中,我们通常希望只有被寻址的接收者才被激活,来接收随后的数据,这样就可以减少由
未被寻址的接收器的参与带来的多余的 USART 服务开销。

265/305
PY32F002B 参考手册

未被寻址的设备可启用其静默功能置于静默模式。在静默模式里:
 任何接收状态位都不会被设置。
 所有接收中断被禁止。
 USARTx_CR1 寄存器中的 RWU 位被置 1。RWU 可以被硬件自动控制或在某个条件下由软件写入。
根据 USARTx_CR1 寄存器中的 WAKE 位状态,USARTx 可以用二种方法进入或退出静默模式。
 如果 WAKE 位被复位:进行空闲总线检测。
 如果 WAKE 位被设置:进行地址标记检测。

20.3.7.1. 空闲总线检测(WAKE=0)
当 RWU 位被写 1 时, USART 进入静默模式。当检测到一空闲帧时,它被唤醒。然后 RWU 被硬件清零,
但是 USART_SR 寄存器中的 IDLE 位并不置起。 RWU 还可以被软件写 0。下图给出利用空闲总线检测来唤醒
和进入静默模式的一个例子

RXNE RXNE

RX Data 1 Data 2 Data 3 Data 4 IDLE Data 5 Data 6

RWU Mute Mode Normal Mode

RWU written to 1 Idle frame detected

图 20-7 利用空闲总线检测的静默模式

20.3.7.2. 地址标记(Address mark)检测 (WAKE=1)


在这个模式里,如果 MSB 是 1,该字节被认为是地址,否则被认为是数据。在一个地址字节中,目标接收
器的地址被放在 4 个 LSB 中。这个 4 位地址被接收器同它自己地址做比较,接收器的地址被编程在
USART_CR2 寄存器的 ADD。
如果接收到的字节与它的编程地址不匹配时,USART 进入静默模式。此时,硬件设置 RWU 位。
接收该字节既不会设置 RXNE 标志也不会产生中断请求,因为 USART 已经在静默模式。
当接收到的字节与接收器内编程地址匹配时,USART 退出静默模式。然后 RWU 位被清零,随后的字节被
正常接收。收到这个匹配的地址字节时将设置 RXNE 位,因为 RWU 位已被清零。
当接收缓冲器不包含数据时(USART_SR 的 RXNE=0),RWU 位可以被写 0 或 1。否则,该次写操作被忽
略。下图给出利用地址标记检测来唤醒和进入静默模式的例子。

In this example, the current address of the receiver RXNE RXNE RXNE
is 1(programmed in the USART_CR2 register)

RX IDLE Addr=0 Data 1 Data 2 IDLE Addr=1 Data 3 Data 4 Addr=2 Data 5

RWU Mute Mode Mute Mode


Normal Mode

Non-matching address
Matching address Non-matching address
RWU written to 1
(RXNE was cleared)

图 20-8 利用地址标记检测的静默模式

266/305
PY32F002B 参考手册

20.3.7.3. 校验控制
设置 USART_CR1 寄存器上的 PCE 位,可以使能奇偶控制(发送时生成一个奇偶位,接收时进行奇偶校
验)。根据 M 位定义的帧长度,可能的 USART 帧格式列在下表中。
表 20-4 帧格式
M bit PCE bit USART fram
0 0 SB—8 bit data—STB
0 1 SB—7 bit data—PB—STB
1 0 SB—9 bit data—STB
1 1 SB—8 bit data—PB—STB
在用地址标记唤醒设备时,地址的匹配只考虑到数据的 MSB 位,而不用关心校验位。 (MSB 是数据位中最
后发出的,后面紧跟校验位或者停止位)

20.3.7.4. 偶校验
校验位使得一帧中的 7 或 8 个 LSB 数据以及校验位中’1’的个数为偶数。
例如:数据=00110101,有 4 个’1’,如果选择偶校验(在 USARTx_CR1 中的 PS=0),校验位将是’0’。

20.3.7.5. 奇校验
此校验位使得一帧中的 7 或 8 个 LSB 数据以及校验位中’1’的个数为奇数。
例如:数据=00110101,有 4 个’1’,如果选择奇校验(在 USARTx_CR1 中的 PS=1),校验位将是’1’。

20.3.7.6. 传输模式
如果 USARTx_CR1 的 PCE 位被置位,写进数据寄存器的数据的 MSB 位被校验位替换后发送出去(如果选
择偶校验偶数个’1’,如果选择奇校验奇数个’1’)。如果奇偶校验失败,USART_SR 寄存器中的 PE 标志被置’1’,
并且如果 USART_CR1 寄存器的 PEIE 在被预先设置的话,中断产生。

20.3.8. USART 同步模式

通过写 USART_CR2 寄存器的 CLKEN 位为 1,选择同步模式。在同步模式里,下列位必须保持清零状


态:
● USART_CR3 寄存器中的 HDSEL 位
USART 允许用户以主模式方式控制双向同步串行通信。CK 脚是 USART 发送器时钟的输出。在起始位和
停止位期间,CK 脚上没有时钟脉冲。根据 USART_CR2 寄存器中 LBCL 位的状态,决定在最后一个有效数据
位期间产生或不产生时钟脉冲。USART_CR2 寄存器的 CPOL 位允许用户选择时钟极性,USART_CR2 寄存器
上的 CPHA 位允许用户选择外部时钟的相位。
在总线空闲期间,实际数据到来之前以及发送断开符号的时候,外部 CK 时钟不被激活。
同步模式时,USART 发送器和异步模式里工作一模一样。但是因为 CK 是与 TX 同步的(根据 CPOL 和
CPHA),所以 TX 上的数据是随 CK 同步发出的。
同步模式的 USART 接收器工作方式与异步模式不同。如果 RE=1,数据在 CK 上采样(根据 CPOL 和
CPHA 决定在上升沿还是下降沿),不需要任何的过采样。但必须考虑建立时间和持续时间(取决于波特率,1/16
位时间)。
注意:
CK 脚同 TX 脚一起联合工作。因而,只有在使能了发送器(TE=1),并且发送数据时(写入数据至
USART_DR 寄存器)才提供时钟。这意味着在没有发送数据时是不可能接收一个同步数据的。

267/305
PY32F002B 参考手册

LBCL,CPOL 和 CPHA 位的正确配置,应该在发送器和接收器都被禁止时;当使能了发送器或接收器时,


这些位不能被改变。
建议在同一条指令中设置 TE 和 RE,以减少接收器的建立时间和保持时间。
USART 只支持主模式:它不能用来自其他设备的输入时钟接收或发送数据(CK 永远是输出)。

RX Data out
TX Data in
Synchronous device
USART
(e.g. slave SPI)

CK clock

图 20-9 USART 同步传输的例子

Idle or preceding M=0(8 data bits) Stop


Start
transmission

Clock(CPOL=0,CPHA=0)

Clock(CPOL=0,CPHA=1)

Clock(CPOL=1,CPHA=0)

Clock(CPOL=1,CPHA=1)
Data on TX
(from master) 0 1 2 3 4 5 6 7
Start LSB MSB Stop

Data on RX
0 1 2 3 4 5 6 7
(from slave)
LSB MSB

Capture strobe

LBCL bit controls last data clock pulse

图 20-10 USART 数据时钟时序示例(M=0)

Idle or preceding Stop Idle or next


Start M=0(9 data bits)
transmission transmission

Clock(CPOL=0,CPHA=0)

Clock(CPOL=0,CPHA=1)

Clock(CPOL=1,CPHA=0)

Clock(CPOL=1,CPHA=1)
Data on TX
(from master) 0 1 2 3 4 5 6 7 8
Start LSB MSB Stop
Data on RX
0 1 2 3 4 5 6 7 8
(from slave)
LSB MSB

Capture strobe

LBCL bit controls last data clock pulse

图 20-11 USART 数据时钟时序示例(M=1)

268/305
PY32F002B 参考手册

CK(capture strobe on CK
rising edge in this example)

Data on RX
(from slave)
tSETUP tHOLD

tSETUP =tHOLD 1/16 bit time

图 20-12 RX 数据采样/保持时间

20.3.9. 单线半双工通信

单线半双工模式通过设置 USARTx_CR3 寄存器的 HDSEL 位选择。在这个模式里,下面的位必须保持清零


状态:
 USARTx_CR2 寄存器的 CLKEN 位
USART 可以配置成遵循单线半双工协议。在单线半双工模式下,TX 和 RX 引脚在芯片内部互连。使用控
制位”HALF DUPLEX SEL”(USARTx_CR3 中的 HDSEL 位)选择半双工和全双工通信。
 RX 不再被使用
 当没有数据传输时, TX 总是被释放。因此,它在空闲状态的或接收状态时表现为一个标准 I/O 口。这就意
味该 I/O 在不被 USART 驱动时,必须配置成悬空输入(或开漏的输出高)。
除此以外,通信与正常 USART 模式类似。由软件来管理线上的冲突(例如通过使用一个中央仲裁器)。特别
的是,发送从不会被硬件所阻碍。当 TE 位被设置时,只要数据一写到数据寄存器上,发送就继续。

20.3.10. 硬件流控制

利用 nCTS 输入和 nRTS 输出可以控制 2 个设备间的串行数据流。下图表明在这个模式里如何连接 2 个设


备。

USART1 USART2
TX RX
TX circuit CTS RTS TX circuit

RX TX
RX circuit RTS CTS RX circuit

图 20-13 两个 USART 间的硬件流控制

20.3.10.1. RTS 流控制


如果 RTS 流控制被使能(RTSE=1),只要 USART 接收器准备好接收新的数据,nRTS 就变成有效(接低电
平)。当接收寄存器内有数据到达时,nRTS 被释放,由此表明希望在当前帧结束时停止数据传输。

269/305
PY32F002B 参考手册

start stop start stop


RX bit Data 1 Idle bit Data 2
bit bit

RTS

Data 1 read
Data 2 can now be RXNE
RXNE transmitted

图 20-14 RTS 流控制

20.3.10.2. CTS 流控制


如果 CTS 流控制被使能(CTSE=1),发送器在发送下一帧前检查 nCTS 输入。如果 nCTS 有效(被拉成低电
平),则下一个数据被发送(假设那个数据是准备发送的,也就是 TXE=0),否则下一帧数据不被发出去。若
nCTS 在传输期间被变成无效,当前的传输完成后停止发送。
当 CTSE=1 时,只要 nCTS 输入一变换状态,硬件就自动设置 CTSIF 状态位。它表明接收器是否准备好进
行通信。如果设置了 USART_CT3 寄存器的 CTSIE 位,则产生中断。

CTS CTS

CTS
transmit data register
TDR Data 2 empty Data 3 empty

Data 1 stop start stop start


RX Data 2 Idle bit Data 3
bit bit bit

writing data 3 in DR Transmission of Data 3 is delayed until


CTS=0

图 20-15 CTS 流控制

20.4. USART 中断请求


序号 中断事件 事件标志 使能位 发送/接收
1 发送数据寄存器空 TXE TXEIE 发送
2 CTS(Clear to Send)中断 CTSIF CTSIE 发送
3 传送完成 TC TCIE 发送
4 接收寄存器非空(读数据准备好) RXNE 接收
RXNEIE
5 Over 正常运行错误 ORE 接收
6 空闲帧 IDLE IDLEIE 接收

270/305
PY32F002B 参考手册

序号 中断事件 事件标志 使能位 发送/接收


7 奇偶校验错误 PE PEIE 接收
8 多处理器通讯时,噪声、over 正常运行和帧错误 NR/ORE/FE EIE 接收
所有 USART 中断共用同一个中断向量。

TC
TCIE
TXE
TXEIE
CTS
CTSIE

IDLE USART
IDLEIE interrupt
RXNEIE
ORE
RXNEIE
RXNE
PE
PEIE
LBD
LBDIE
FE
NE
ORE EIE
DMAR

图 20-16 USART 中断映像图

20.5. USART 寄存器

20.5.1. 状态寄存器 (USART_SR)

Address offset:0x00
Reset value:0x0000 00C0
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Re Re Re Re Re Re Re
Res Res Res Res Res Res Res Res Res
s s s s s s s

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Re Re Re ABRR ABR ABR Re TX IDL OR
CTS TC RXNE NE FE PE
s s s Q E F s E E E
RC_W RC_W RC_W
W R R R R R R R R
0 0 0

Bit Name R/W Reset Value Function


31:13 Reserved RES - Reserved
自动波特率请求。
12 ABRRQ W 0 该位写 1 会复位 ABRF 标志位,并且请求下一帧
的自动波特率检测。
自动波特率错误标志。
当自动波特率检测出错(波特率超出范围或者字
11 ABRE R 0
符比较错误)时,硬件置位该寄存器。
软件通过写 1 到 ABRRQ 寄存器清零该位。
自动波特率检测标志。
10 ABRF R 0 当自动波特率设置(同时设置 RXNE=1,当中断
使能后产生中断),或者自动波特率检测操作出

271/305
PY32F002B 参考手册

Bit Name R/W Reset Value Function


错(ABRE=1,RXNE=1,FE=1)时该位由硬件
置 1。
软件通过写 1 到 USART_RQR 寄存器的 ABRRQ
位清零该位。
CTS 标志。
当 CTS 输入 toggle,别 CTSE=1 时,该寄存器
为 1.软件写 0 清零。当 CTSIE=1 时,产生 CTS
9 CTS RC_W0 0
中断。
0:CTS line 值未改变
1:CTS line 值改变
8 reserved
传输寄存器空标志。
当 USART_DR 寄存器数据传送到移位寄存器,
硬件置位该寄存器。当 TXEIE=1 时,产生中断。
7 TXE R 1
写 USART_DR 寄存器会清零该位
0:数据未传送到移位寄存器
1:数据传送到移位寄存器
传送完成标志。
传送数据帧完成后,且 TXE=1,则硬件置位该寄
存器。TCIE=1 时产生中断。
软件先读 USART_SR 寄存器然后写 USART_DR
6 TC RC_W0 1
寄存器会清零该位(针对多处理器通讯)。软件
同时可以写 0 清零。
0:传送未完成
1:传送完成
读数据寄存器不空标志。
当移位寄存器值传送到 USART_DR 寄存器,硬
件置位该寄存器。
软件读 USART_DR 寄存器、或者写 0 清零该
5 RXNE RC_W0 0
位。
当 RXNEIE=1 时,产生中断。
0:未收到数据
1:接收数据准备好
空闲标志。
检测 IDLE line,硬件置位该寄存器。当
IDLEIE=1 时产生中断。
4 IDLE R 0 软件先读 USART_SR 寄存器后读 USART_DR 寄
存器可以清零该位。
0:未检测到 IDLE line
1:检测到 IDLE line
Over 正常运行错误标志。
当 RXNE=1 时,在移位寄存器中接收到的数据正
准备转移到 RDR 寄存器时,硬件设置该位。
3 ORE R 0
软件先读 USART_SR 寄存器后读 USART_DR 寄
存器可以清零该位。
当 RXNEIE=1 时,产生中断。

272/305
PY32F002B 参考手册

Bit Name R/W Reset Value Function


0:未产生 Over 正常运行错误
1:产生 Over 正常运行错误
注:该寄存器置位时,RDR 寄存器内容不会丢
失,但移位寄存器内容被覆盖。
当 EIE=1 时,产生 ORE 中断。
噪声错误标志。
在数据帧接收到噪声时,硬件置位该寄存器。
软件先读 USART_SR 寄存器后读 USART_DR 寄
存器可以清零该位。
0:未检测到噪声错误
2 NE R 0
1:检测到噪声错误
注:当 RXNE 与 NE 同时产生时,NE=1 时不产
生中断,而在设置 RXNE 标志时产生中断。在多
缓冲器通讯模式下,当 EIE=1 时 NE=1 会产生中
断。
帧错误标志。
当检测到不同步、过多的噪声或中止字符时,由
硬件设置此位。
软件先读 USART_SR 寄存器后读 USART_DR 寄
存器可以清零该位。
0:未检测到帧错误
1 FE R 0 1:检测到帧错误或 break 字符
注:当 RXNE 与 FE 同时产生时,FE=1 时不产生
中断,而在设置 RXNE 标志时产生中断。如果当
前传输的数据既产生了帧错误,又产生了过载错
误,硬件还是会继续该数据的传输,并且只设置
ORE 标志位。在多缓冲器通讯模式下,当 EIE=1
时 FE=1 会产生中断。
校验值错误。
当接收时校验值错误时,硬件置位该寄存器。
软件先读 USART_SR 寄存器后读 USART_DR 寄
存器可以清零该位。但软件在清该位前必须等待
0 PE R 0
RXNE=1.
当 PEIE 时,产生中断。
0:未产生奇偶校验错误
1:产生奇偶校验错误

20.5.2. 数据寄存器 (USART_DR)

Address offset: 0x04


Reset value: undefined
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res Res Res Res Res Res Res Res Res Res Res Res Res Res Res Res

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res Res Res Res Res Res Res DR[8:0]
RW RW RW RW RW RW RW RW RW

273/305
PY32F002B 参考手册

Bit Name R/W Reset Value Function


31:9 Reserved RES - Reserved
接收/发送数据寄存器。
取决于读还是写操作,前者是接收到的数据,后
者是发送的数据。
DR 寄存器物理上由两个寄存器组成(一个是发送
的 TDR,一个是接收的 RDR),所以 DR 寄存器
实现了读和写的两个功能。
TDR 寄存器在内部总线和输出移位寄存器之间提
8:0 DR[8:0] RW undefined
供了并行的接口,RDR 寄存器在输入移位寄存器
和内部总线之间提供了并行接口。
当奇偶校验使能打开进行发送操作时,写 MSB 位
(bit7 或者 bit8)是无效的,因为已被校验位代
替了。
当奇偶校验使能打开进行接收操作时,读出的
MSB 位是被接收到的校验位。

20.5.3. 波特率寄存器 (USART_BRR)

Address offset:0x08
Reset value:0x0000_0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res Res Res Res Res Res Res Res Res Res Res Res Res Res Res Res

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DIV_Mantissa[11:0] DIV_Faction[3:0]
RW RW RW RW RW RW RW RW RW RW RW RW RW RW RW RW

在自动波特率检测模式,硬件更新该寄存器。
Bit Name R/W Reset Value Function
31:16 Reserved RES - Reserved
15:4 DIV_Mantissa[15:4] RW 0 12bit 整数
3:0 DIV_Fraction[3:0] RW 0 4bit 小数

20.5.4. 控制寄存器 1 (USART_CR1)

Address offset:0x0C
Reset value: 0x0000_0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Re Re Re Re Re Re Re Re
Res Res Res Res Res Res Res Res
s s s s s s s s

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Re Re WAK PC PEI TXEI TCI RXNEI IDLEI RW Re
UE M PS TE RE
s s E E E E E E E U s
RW RW RW RW RW RW RW RW RW RW RW RW RW

Bit Name R/W Reset Value Function


31:14 Reserved RES - Reserved
USART 使能。当该位清零后,USART 模块会立
13 UE RW 0
即停止当前操作。该位由软件置位和清零。

274/305
PY32F002B 参考手册

Bit Name R/W Reset Value Function


0:USART prescaler 和 output 禁止,low-power
模式
1:USART 使能
软件需要等待 USART_ISR.TC 置位后,才能清
零 UE 位,进入低功耗模式;
0:1 start bit,8 data bits,n stop bit
12 M RW 0
1:1 start bit,9 data bit,n stop bit
接收唤醒方式。
从 mute 模式唤醒方式。由软件置位或者清零。
11 WAKE RW 0
0:Idle line 唤醒
1:地址唤醒
奇偶校验控制。
0:奇偶校验禁止
10 PCE RW 0
1:奇偶校验使能
奇偶校验位:9bit 的第 9 位;8bit 的第 8 位。
奇偶校验选择。由软件置位和清零。
9 PS RW 0 0:偶校验
1:奇校验
PE 中断使能。由软件置位和清零。
8 PEIE RW 0 0:禁止
1:PE 中断使能
TXE 中断使能。由软件置位和清零。
7 TXEIE RW 0 0:禁止
1:TXE 中断使能
传送结束中断使能。由软件置位和清零。
6 TCIE RW 0 0:禁止
1:TC 中断使能
RXNE 中断使能;由软件置位和清零。
5 RXNEIE RW 0 0:禁止
1:ORE 或者 RXNE 中断使能
IDLE 中断使能。由软件置位和清零。
4 IDLEIE RW 0 0:禁止
1:IDLE 中断使能
传送使能。
3 TE RW 0 0:传送禁止
1:传送使能
接收使能。
2 RE RW 0 0:接收禁止
1:接收使能,开始检测 start 位
接收唤醒。
该位表明 USART 是否为 mute 模式。
当接收到 mute 模式序列,该寄存器置位;如果
1 RWU RW 0 接收到唤醒序列,该寄存器清零。具体哪种唤醒
序列(地址或者 IDLE)由寄存器
USART_CR1.WAKEbit 控制。
0:接收器为工作模式

275/305
PY32F002B 参考手册

Bit Name R/W Reset Value Function


1:接收器为静默模式
注 1:在设置该位进入 mute 模式前,USART 要
已经先接收了一个数据字节,否则在 mute 模式
下,不能被 idle 总线检测唤醒。
注 2:当配置成地址标记检测唤醒
(WAKE=1),在 RXNE 被置位时,不能用软件
修改 RWU 位。
0 Reserved RES -

20.5.5. 控制寄存器 2 (USART_CR2)

Address offset:0x10
Reset value: 0x0000_0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res Res Res Res Res Res Res Res Res Res Res Res Res Res Res Res

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res Res STOP Res CLKEN CPOL CPHA LBCL Res Res Res Res ADD[3:0]
RW RW RW RW RW RW RW RW RW

Bit Name R/W Reset Value Function


31:14 Reserved RES - Reserved
Stop 位配置。
0:1 stop bit;
13 STOP RW 0
1:2 stop 位;

12 Reserved
CK pin 使能。
0:禁止;
11 CLKEN RW 0
1:CK pin 使能;
不支持同步模式时,该位保留。
时钟极性。
同步模式,CK pin 输出时钟极性。
10 CPOL RW 0
0:传输窗外,CK pin 为稳定低值;
1:传输窗外,CK pin 为稳定高值;
该位在同步模式下用于选择 CK pin 输出时钟的相
位。它与 CPOL 位一起工作,以产生所需的时钟/
9 CPHA RW 0 数据关系。
0:第一个时钟传输是首个数据捕获沿;
1:第二个时钟传输是首个数据捕获沿;
最后一位数据的时钟脉冲是否在 CK pin 输出。
8 LBCL RW 0 0:最后一位数据的时钟脉冲不在 CK pin 输出;
1:最后一位数据的时钟脉冲在 CK pin 输出;
7:4 Reserved RES - Reserved
USART 地址。
3:0 ADD[3:0] RW 4’b0 该寄存器用于多处理器 mute 模式,用作 4bit 地
址唤醒时的地址。

20.5.6. 控制寄存器 3 (USART_CR3)

276/305
PY32F002B 参考手册

Address offset:0x14
Reset value: 0x0000_0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res Res Res Res Res Res Res Res Res Res Res Res Res Res Res Res

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
ABR- ABR
Res OVER8 CTSIE CTSE RTSE Res Res Res Res HDSEL Res Res EIE
MOD[1:0] EN
RW RW RW RW RW RW RW RW

Bit Name R/W Reset Value Function


31:15 Reserved RES - Reserved
自动波特率检测模式。
00:从 start 位开始测量波特率
01:下降沿到下降沿测量
14:13 ABRMOD[1:0] RW 2’b0
10: Reserved
11: Reserved
当 ABREN=0 或者 UE=0 时,该寄存器只写。
自动波特率使能。
12 ABREN RW 0 0:禁止
1:自动波特率使能
Oversampling 模式。
0:Oversampling by 16
11 OVER8 RW 0
1:Oversampling by 8
该位仅在 UE=0 时可被写。
CTS 中断使能。
10 CTSIE RW 0 0:禁止;
1:CTSIF 中断使能;
CTS 使能。
0:CTS 硬件流控制禁止;
9 CTSE RW 0 1:CTS 模式使能。当有当 CTS 输入为 0 时,才
会传输数据。此时,当数据写入数据寄存器后,
要等待 CTS 有效后才会启动传输。
RTS 使能。
0:RTS 硬件流控制禁止;
1:RTS 输出使能,只有当接收 buffer 未满时才
8 RTSE RW 0
会请求下一个数据。当前数据发送完成后,发送
操作暂停。如果可以接收数据了,将 RTS 置为有
效(0)。
7:4 reserved
半双工选择。
3 HDSEL RW 0 0:非半双工模式;
1:半双工模式选择;
2:1
错误中断使能。
0:禁止;
0 EIE RW 0
1:帧错误 FE、over 正常运行错误 ORE、噪声
NF 中断使能。

277/305
t

x
x
x
x
x
x
x

8
1
0
4
1
0
0
1
0
0
0
8
0
0
4
0
0
0
0
0
e
s
ff

C
O

3
2
1
R

ue
ue
ue
ue
ue
ue

T_
T_
T_
T_
T_
T_

val
val
val
val
val
val
Re

ter

set
set
set
set
set
set

US
US
US
US
US
US

AR
AR
AR
BR
AR
AR
SR
AR

ser
CR
CR
CR
DR
gis

ved
Re-
Re-
Re-
Re-
Re-
Re-
Re-
20.5.7.

Res. Res. Res. Res. Res. Res. Res. 31


Res. Res. Res. Res. Res. Res. Res. 30
Res. Res. Res. Res. Res. Res. Res. 29
Res. Res. Res. Res. Res. Res. Res. 28
Res. Res. Res. Res. Res. Res. Res. 27
Res. Res. Res. Res. Res. Res. Res. 26
Res. Res. Res. Res. Res. Res. Res. 25
Res. Res. Res. Res. Res. Res. Res. 24
USART 寄存器映像

Res. Res. Res. Res. Res. Res. Res. 23


Res. Res. Res. Res. Res. Res. Res. 22
Res. Res. Res. Res. Res. Res. Res. 21
Res. Res. Res. Res. Res. Res. Res. 20
Res. Res. Res. Res. Res. Res. Res. 19
Res. Res. Res. Res. Res. Res. Res. 18
Res. Res. Res. Res. Res. Res. Res. 17
Res. Res. Res. Res. Res. Res. Res. 16
Res. Res. Res. Res. Res. Res. 15
Res. ABR- Res. Res. Res. Res. 14

0
Res. MOD[1:0] STOP UE Res. Res. 13
Res. ABREN Res. M Res. ABRRQ 12
Res. OVER8 CLKEN WAKE Res. ABRE 11
Res. CTSIE CPOL PCE Res. ABRF 10
0 0 0 0

Res. CTSE CPHA PS Res. CTS 9

0 0 0 0 0 0 0
0 0 0 0
Res. RTSE LBCL PEIE Res. 8
DIV_Mantissa[11:0]

Res. Res. Res. TXEIE TXE 7


Res. Res. Res. TCIE TC 6
Res. Res. Res. RXNEIE RXNE 5
Res. Res. Res. IDLEIE IDLE 4
DR[8:0]

0
Res. HDSEL TE ORE 3
Res. Res. RE DIV_Fac- NE 2
ADD[3:0]
tion[3:0]
0 0 0 0 0 0 0 0 0 0 0 0 0

Res. Res. RWU FE 1

0
0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0
PY32F002B 参考手册

278/305
Res. EIE Res. PE 0
PY32F002B 参考手册

21. 串行外设接口 (SPI)


本项目设计实现了 2 个 SPI 模块,两者的功能完全一样。

21.1. 简介
串行外设接口(SPI)允许芯片与外部设备以半双工、全双工、单工同步的串行方式通信。此接口可以被配置
成主模式,并为外部从设备提供通信时钟(SCK)。接口还能以多主配置方式工作。
它可用于多种用途,包括使用一条双向数据线的双线单工同步传输。

21.2. SPI 主要特征


 支持 SPI 主机模式和 SPI 从机模式
 3 线全双工同步传输
 2 线半双工同步传输(有双向数据线)
 2 线单工同步传输(无双向数据线)
 8 位或者 16 位传输帧选择
 支持多主模式
 8 个主模式波特率预分频系数(最大为 12M)
 从模式频率(最大为 3M)
 主模式和从模式下均可以由软件或硬件进行 NSS 管理:主/从操作模式的动态改变
 可编程的时钟极性和相位
 可编程的数据顺序,MSB 在前或 LSB 在前
 可触发中断的专用发送和接收标志
 SPI 总线忙状态标志
 Motorola 模式
 可引起中断的主模式故障、过载

 两个深度为 2,宽度为 16bit(当数据帧设置为 8bit 时,宽度为 8bit)的嵌入式 Rx 和 Tx FIFO

21.3. SPI 功能描述

21.3.1. 概述

279/305
PY32F002B 参考手册

APB bus
Read

FRX
RxFIFO 0 0 0
TH
DS 0 0 0

SPI_CR2
MOSI
TXE RXNE ERR
0 0 SSOE 0 0
IE IE IE
MISO Data shift register
LSB First
0 0 0 FTLVL FTLVL FRLVL FRLVL 0

TxFIFO SPI_SR
MOD
BSY OVR 0 0 0 TXE RXNE
Write F

0
Communication control
1
BR[2:0]
SCK Baud rate generator

LSB
SPE BR2 BR1 BR0 MSTR CPOL CPHA
FIRST

SPI_CR1
BIDI
BIDI RX
Master control logic MOD 0 0 0 SSM SSI
OE ONLY
E

NSS

图 21-1 SPI 框图
SPI 通过 4 个引脚与外部器件相连:
MISO:主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据。
MOSI:主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据。
SCK:串口时钟,作为主设备的输出,从设备的输入。
NSS:从设备选择。取决于 SPI 和 NSS 的设定,该 pin 可以用作:
─ 选择要通讯的从机
─ 同步数据帧
─ 发现多主机间的冲突
SPI 总线允许在一个主机和一个或者多个从机之间的通讯。总线由至少两根线组成:一个是时钟,另一个是
被同步传输的数据。根据应用场景,可以选择增加另外一根数据线和从机 NSS 信号。

21.3.2. 单主机和单从机通信

针对不同的应用场景,SPI 可以使用几种不同的配置进行通讯。这些配置使用 2 线、3 线(软件 NSS man-


agement)或者 4 线(硬件 NSS management)。通讯通常都被主机启动。

21.3.2.1. 全双工通信
缺省情况,SPI 被配置成全双工通讯。在这种配置下,主机和从机的 shift 寄存器,在 MOSI 和 MISO 之
间,使用两个单向的线连到一起。在 SPI 通讯期间,数据在主机提供的时钟沿同步的被移位。主机通过 MOSI
发送数据,从 MISO 接收来自从机的数据。当数据帧传输完成(所有 bit 被 shift 完成),在主机和从机之间的信
息就被交互过了。

280/305
PY32F002B 参考手册

MISO MISO
RX shift register TX shift register

MOSI MOSI
TX shift register RX shift register

SPI clock SCK SCK


generator
NSS NSS
Master Slave

图 21-2 全双工单主机/单从机应用

21.3.2.2. 半双工通信
通过设定 BIDIMODE bit(SPI_CR1 寄存器),SPI 可以工作在半双工模式。在这种配置下,用 1 根数据线
完成主机和从机 shift 寄存器的连接。在通讯过程中,在 SCK 的时钟沿,数据在两个 shift 寄存器之间以 BIDIOE
(SPI_CR1 寄存器)选择的方向,同步移位。在该配置下,主机的 MISO 和从机的 MOSI 被释放作为通用端口
给其他应用使用。

MISO MISO
RX shift register TX shift register

MOSI 1kΩ MOSI


TX shift register RX shift register

SPI clock SCK SCK


generator
NSS NSS
Master Slave

图 21-3 半双工单主机/单从机应用
NSS 可以被使用在主机和从机之间进行硬件控制流。可选的,NSS 也可以不使用。然后该流程就要内部处
理。

21.3.2.3. 单工通信
通过使用 RXONLY(SPI_CR1 寄存器),设定 SPI 在只发送模式或者只接收模式,使 SPI 工作在单线模
式下。在这个配置下,在主机和从机的 shift 寄存器之间只使用 1 根线。另一对 MISO 和 MOSI 不被使用,可以
被释放成通用端口。
 只发送模式(RXONLY=0):配置与全双工相同。应用忽略在未使用的端口上的信息。这个端口可以被用
作标准的 GPIO。
 只接收模式(RXONLY=1):通过置位 RXONLY,应用可以禁能 SPI 输出功能。在从机配置,MISO 输出
被禁能,该端口被用作 GPIO。当他的从机 NSS 信号有效时,从机继续从 MOSI 接收数据。接收到的数据
事件是否发生取决于数据 buffer 的配置。在主机配置下,MOSI 输出被禁能,该端口可以用作 GPIO。只要
SPI 被使用,时钟信号就被连续的产生。停止时钟的唯一方法是清零 RXONLY 或者 SPE,直到来自 MISO
的输入完成。

281/305
PY32F002B 参考手册

MISO MISO
RX shift register TX shift register

MOSI MOSI
TX shift register RX shift register

SPI clock SCK SCK


generator
NSS NSS
Master Slave

图 21-4 单工单从机/单主机应用
(主设备处于仅发送模式/从设备处于仅接收模式)
(1)在主机和从机之间可以使用 NSS 进行硬件控制流。可选的,NSS 也可以不使用。然后该流程就要内部处
理。
(2)在 Rx shift 寄存器的输入捕获意外的输入信息。在标准的 transmit-only 模式下,所有与传输接收相关的事
件都被必须被忽略。
(3)在该配置下,两边的 MISO pin 都被用作 GPIO。
通过用传输方向的设定(在 BIDIOE bit 未发生改变时,双向模式被使能),任何 simplex 通讯可以被 half-
duplex 通讯代替。

21.3.3. 多从机通信

在一个有两个或者更多独立从机的配置里,主机为每个从机,使用 GPIO 来管理 NSS。主机必须通过拉低


连接从机 NSS 选择某个从机。当完成这个,标准的主机和专门的从机通讯就被建立了。

282/305
PY32F002B 参考手册

NSS

MISO MISO
RX shift register TX shift register

MOSI MOSI
TX shift register RX shift register

SPI clock SCK SCK


generator
IO1 NSS
Master IO2 Slave 1

IO3

MISO
TX shift register

MOSI RX shift register

SCK

NSS
Slave 2

MISO
TX shift register

MOSI RX shift register

SCK

NSS
Slave 3

图 21-5 主机与三个独立的从机通信
NSS 在这种配置下在主机端未被使用。必须通过 SSM=1, SSI=1 来防止任何 MODF 错误。
由于从机的 MISO 连接到一起,所有从机必须把他们 MISO 的 GPIO 配置作为 AF open-drain。

21.3.4. 多主机通信

除非 SPI 总线不是被设计成具备多主机功能,否则用户可以使用其内嵌 feature,该 feature 可以发现两个


试图同时控制总线的节点存在的潜在冲突。当需要用到这种检测时,要使用配置为硬件输入模式的 NSS pin。
在这种模式下有两个以上 SPI 节点的连接是不可能的,因为单次只有一个节点可以在公共数据线上传输。
当节点无效,缺省下两个都保持从机模式。一旦节点要控制总线,它自己切换成主机模式,并把有效的电
平经过专门的 GPIO 给予其余节点的从机 select input。在该进程完成后,有效的从机 select 信号被释放,控制
总线的节点暂时返回 passive mode,并等待新的进程开始。
如果两个节点在同一时间都给出控制请求,总线冲突事件就会产生(查看 MODF 事件)。然后用户可以应
用一些简单的仲裁过程(例如:通过提前定义的给两个节点的不同的超时推迟下一次尝试)

283/305
PY32F002B 参考手册

MISO MISO
RX shift register TX shift register

MOSI MOSI
TX shift register RX shift register

SPI clock SCK SCK SPI clock


generator generator
GPIO NSS
Master Slave
(Slave) (Master)
NSS GPIO

图 21-6 Multi-主机 application


NSS 在两个节点都被配置成硬件输入模式。他的有效电平使能了 MISO 输出控制,而 passive node 被配置
成从机。

21.3.5. 从选择(NSS)脚管理

在从机 mode,NSS 作为标准的片选输入,使从机能与主机通讯。在主机 mode,NSS 既可以作为输出又


可以作为输入。当作为输入时,它可以防止多主机的总线冲突,当作为输出时,它可以驱动单个从机的从机选
择信号。
通过 SPI_CR1 寄存器的 SSM bit,可以选择硬件或者软件从机 management:
 软件 NSS management(SSM=1):在这个配置下,从机 select 信号被内部的 SSI bit(SPI_CR1 寄存器)
值驱动。外部 NSS pin 被释放给其他应用使用。
 硬件 NSS management(SSM=0):在这个情况下,有几个可能的配置。
1) NSS 输出使能(SSM=0, SSOE=1):这个配置仅在作为主机时使用。硬件管理 NSS pin。当 SPI 一在
主机模式被使能(SPE=1),NSS 信号就被拉低并保持低电平,直到 SPI 被 disable(SPE=0)。在多
主机应用中,SPI 不能进行这种 NSS 配置。
2) NSS 输出 disable(SSM=0, SSOE=0):如果 MCU 在总线上作为主机,这个配置允许进行多主机能
力。如果 NSS pin 此时被拉低,SPI 进入主机 mode fault 状态,芯片自动被重配置为从机模式。在从机
模式,NSS pin 作为标准的片选输入,当 NSS 为低时,从机被选中。

284/305
PY32F002B 参考手册

SSI control bit

SSM control bit


1

NSS Iutput
0
NSS GOIO
Pin logic NSS Master Slave
Inp. mode mode
Vdd OK Non active
Vss Conflict OK

NSS NSS Output


output
(used in Master mode and
Control NSS HW management only)

NSS external logic


SSOE control bit
NSS internal logic

图 21-7 hardware/software slave select management

21.3.6. 通讯格式

在 SPI 通讯期间,接收和发送操作同时进行。SCK(serial clock)将数据线上的信息移位和采样操作同


步。通讯格式取决于时钟相位、时钟极性和数据帧格式。为了能够进行通讯,主机和从机必须遵循相同的通讯
格式。

21.3.6.1. Clock phase and polarity controls


通过 CPOL 和 CPHA bit(SPI_CR1 寄存器),软件可以配置 4 种可能的时序。CPOL(clock polarity)控
制当没有数据传输时的 clock 的 IDLE 状态。该位对主机和从机都有影响。如果 CPOL 被复位,SCK pin 有低电
平的状态。如果 CPOL 被置位,SCK pin 有高电平的 IDLE 状态。
如果 CPHA 被置位,SCK 的第二个边沿捕获传输的第一个数据位(如果 CPOL 被复位,是下降沿,否则是
上升沿)。在时钟变化类型的出现,数据被锁存。如果 CPHA 被复位,SCK 的第一个边沿捕获第一个传输的数
据位(如果 CPOL 被置位,是下降沿,否则是上升沿)。在该时钟变化类型出现时,数据被锁存。
CPOL 和 CPHA 的组合选择了数据捕获时钟边沿。
在 CPOL/CPHA 改变之前,SPI 必须被 disable(SPE=0)。
SCK 的 IDLE 状态必须对应被 SPI_CR1 寄存器选择的极性。

285/305
PY32F002B 参考手册

CPHA=1
CPOL=1

CPOL=0

MOSI MSBit LSBit

MISO MSBit LSBit

NSS

Capture strobe

CPHA=0
CPOL=1

CPOL=0

MOSI MSBit LSBit

MISO MSBit LSBit

NSS

Capture strobe

图 21-8 数据时钟时序图
数据 bit 的顺序取决于 LSBFIRST bit 的设定。

21.3.6.2. 数据帧格式
通过 LSBFIRST bit(SPI_CR1 寄存器),SPI shift 寄存器可以设定为 MSB-FIRST 或者 LSB-FIRST。通过使
用 DS bit(SPI_CR2 寄存器),选择数据帧的位数。可选择为 8 位或者 16 位长度,该设置对于发送和接收都适
用。

21.3.7. SPI 配置

对于主机和从机,SPI 的配置流程几乎一样。对于具体的模式建立,遵循专门的章节介绍。当进行标准的通
讯,进行以下步骤:
1. 写相关的 GPIO 寄存器:配置 MOSI、MISO 和 SCK pin
2. 写 SPI_CR1 寄存器
1) 通过 BR[2:0]配置时钟波特率(从机模式不需要)
2) 配置 CPOL 和 CPHA
3) 通过 RXONLY 或者 BIDIMODE 和 BIDIOE(RXONLY 和 BIDIMODE 不能同时有效),选择 simplex 或
者 half-duplex 模式
4) 配置 LSBFIRST
5) 配置 SSM 和 SSI

286/305
PY32F002B 参考手册

6) 配置 MSTR bit(在多主机 NSS 配置中,如果主机被配置防止 MODF 错误,要避免 NSS 的冲突状态)


3. 写 SPI_CR2 寄存器
1) 配置 DS bit,选择数据帧位数
2) 配置 SSOE(从机模式不需要)

21.3.8. SPI 使能流程

推荐在主机发送时钟之前使能 SPI 从机。如果不这样处理,不期望的数据传输可能会发生。从机的数据寄


存器必须在开始与主机通讯之前,已经包含要被发送的数据(或者在通讯时钟的第一个沿,或者如果时钟信号
是连续的情况,要在正在进行的通讯结束之前)。SCK 信号必须在 SPI 从机被使能之前,固定在 IDLE 状态
level(相应的被选择极性)。
Full-duplex 模式(或者 transmit-only),当 SPI 被使能并且 TXFIFO 不空,或者向 TXFIFO 进行下一个
写, 主机开始通讯。
在任何主机 receive-only 模式(RXONLY=1,或者 BIDIMODE=1 且 BIDIOE=0),在 SPI 被使能后,主机
开始通讯,时钟立即被提供。

21.3.9. 数据传输和接收流程

21.3.9.1. RXFIFO and TXFIFO


SPI 所有数据通讯都通过 FIFO,深度为 2,宽度为 16bit(当数据帧设置为 8bit 时,宽度为 8bit)。该特性
使 SPI 能够以连续数据流进行工作,并防止由于 CPU 来不及处理数据导致的通讯问题。发送和接收有独立的
FIFO,叫做 TXFIFO 和 RXFIFO。这些 FIFO 被用在所有的 SPI 模式。
FIFO 的处理取决于多种参数,包括:数据交换模式(全双工、半双工)、数据帧格式。
读 SPI_SR 寄存器会得到最早存放在 RXFIFO 中还未被读走的数据结果。写 SPI_DR 寄存器,会在 FIFO
发送队列的最后位置,存入被写的数据。读访问必须通常与 RXFIFO 阈值对齐。FTLVL[1:0]和 FRLVL[1:0]位显
示了两个 FIFO 当前的占用级别。
对 SPI_DR 寄存器的访问必须通过 RXNE 事件管理。当数据存储器在 RXFIFO 并且达到阈值,该事件被触
发。当 RXNE 被清零,RXFIFO 就被认为是空的。
相似地,写要发送的数据帧,通过 TXE 事件管理。当 TXFIFO Level 小于或者等于总容量的一半时,该事
件就会被触发。否则,TXE 被清零,并且 TXFIFO 被认为是满的。
用这样的方式,RXFIFO 可以存 2 个数据帧。
TXE 和 RXNE 事件都都可以通过查询、中断方式处理。
当 RXFIFO 满时,如果下一个数据被接收,则 over 正常运行事件产生。Over 正常运行事件可以通过查询
和中断的方式处理。
被置位的 BSY 位显示了 1 个当前数据帧的通讯正在进行。当时钟信号连续的提供,在主机端的两个数据帧
之间,BSY 标志保持置位。但在从机端的每个数据帧传输之间,BSY 会保持最小 1 个 SPI Clock 宽度的低电
平。

21.3.9.2. Sequence handling


一些数据帧可以通过 single sequence 传递来完成一条信息。当发送被使能,当 maser 的 TXFIFO 里有任
何数据,sequence 开始并继续进行。时钟信号被主机连续的提供,直到 TXFIFO 空,然后停止等待额外的数
据。

287/305
PY32F002B 参考手册

在 receive-only 模式,即 half-duplex(BIDIMODE=1, BIDIOE=0)或者 simplex 模式(BIDIMODE=0,


RXONLY=1),在 SPI 被使能并且 receive-only 模式被激活的时候,主机就立即开始接收。主机一直会提供时
钟并连续地接收数据,直到主机停止了 SPI 或者关闭了 receive-only 模式。
当主机能够以连续的模式(SCK 信号是连续的),提供所有通讯,主机必须要考虑从机处理数据流的能
力。当有必要时,主机必须降低通讯速度,并提供或者更慢的时钟,或者分开的帧,或者重组 delay 的数据包。
要注意的是,对于主机或者从机来说,没有 underflow 错误信号,来自于从机的数据通常被主机交互和处理(即
使从机不能及时准备好数据)。
每个 sequence 都必须被 NSS 脉冲包住,同时在多从机系统钟选择要进行通讯的其中的一个从机。在一个
单从机系统,没有必要用 NSS 去控制从机,但通常也最好提供脉冲,使从系统与每个数据序列的开头同步。
NSS 可以由软件和硬件两种方式管理(详见 28.3.5)。
当 BSY 被置位,它显示了正在进行的数据帧交互。当专门的帧交互被完成时,RXNE 标志置位。最后一个
bit 被采样,并且整个数据帧被存在 RXFIFO 中。

21.3.9.3. Procedure for disabling the SPI


当 SPI 被 disable 掉,必须按照特定的 disable 流程。对于系统 disable SPI 的流程是很重要的,因为此后
应用上,外设时钟会被停掉,系统进入低功耗模式。这种情况下(disable),正在进行的交互会被破坏。在一
些模式下,disable 流程是唯一停止连续通讯的办法。
全双工或者 transmit-only 模式下,主机可以当停止提供要发送的数据时完成交互。在这种情况下,在最后
的数据交互后,时钟被停止。要额外注意 packing mode(当交互奇数个数的数据帧,以放置一些 dummy 字节
交互)。在这些模式下,SPI 被 disable 之前,用户必须使用标准的 disable 流程。当 SPI 被 disable 在主机发送
时,如果此时一个帧交互正在进行,或者下一个数据帧存在 TXFIFO 中,SPI 的功能是不能被保证的。
当主机处在任何 receive-only 模式,停止连续时钟的唯一方法是停止外设(SPE=0)。该模式下,要进行
专门的 SPI disable 流程。
当 SPI 被 disable,接收到未读走的数据存放在 RXFIFO 中,这些数据必须在下一次 SPI 使能要开始新的序
列之前被处理掉。为防止有未读的数据,要确保当 SPI 被 disable 时,RXFIFO 是空的(使用正确的 disable 流
程,或者通过用软件复位以初始化所有的 SPI 寄存器)。
标准的 disable 流程是基于 BSY 状态,并查看 FTLVL[1:0],以确保传输彻底完成。也可以通过特定别的检
查来鉴别正在进行交互的结束,例如:
 当 NSS 信号被软件管理,主机要向从机提供正确的 NSS 脉冲。 或者
 当完成来自 FIFO 的交互数据流时,此时最后的数据帧或者 CRC 帧仍在传输过程中。
正确的 disable 流程是(receive-only 模式除外):
1. 等待 FTLVL[1:0]=00(没有数据要发送)
2. 等待 BSY=0(最后的数据被处理完成)
3. Disable SPI(SPE=0)
4. 读数据,直到 FRLVL[1:0]=00(读所有接收到的数据)
对于特定 receive-only 模式,正确的 disable 流程是:
1. 在最后一个数据帧传输过程中,通过 disable SPI(SPE=0),打断接收流程
2. 等待 BSY=0(最后的数据帧已被处理)
3. 读数据,直到 FRLVL[1:0]=00(读所有接收到的数据)

288/305
PY32F002B 参考手册

21.3.9.4. Data packing


当 frame size= 8, 任何 16 位的读或者写访问时,都会自动使用 data packing。在这种情况下,双数据
frame 会被并行处理。首先,SPI 使用存储在被访问 word 低位的 pattern,然后是存在高位的。
下图提供了 data packing 处理过程。在发送方的单个 16-bit 访问后,两个数据帧被发送。在接收方,如果
RXFIFO 阈值被是 16 位,则该序列会在 RXNE 事件就立即产生。作为对 RXNE 事件的响应,接收方通过一个
16 位读 SPI_DR 寄存器,访问了 2 个数据帧。在接收端,RxFIFO 阈值的设定和接下来的读访问必须保持对
齐,否则数据会丢失。
在发送端,用 8 位访问方式写奇数序列的最后一个数据帧是足够的。为了产生 RXNE 事件,对于奇数个数
据帧,对于接收的最后一个数据帧,接收方必须改变 Rx_FIFO 阈值。

NSS

SCK

TXFIFO MOSI RXFIFO


SPIx_DR
0x0A 0x0A 0x04 0x0A
SPIx_DR
0x04 SPI fsm SPI fsm 0x04
0x04 0x0A 0x04 0x0A
&shift &shift

16-bit access when write to data register 16-bit access when read from data register
SPI_DR=0x040A when TXE=1 SPI_DR=0x040A when RXNE=1

图 21-9 Packing data in FIFO for transmission and reception

21.3.9.5. Communication diagrams


本节介绍一些典型的时序,这些时序对于查询、中断都是有效的。为了简化,假定 LSBFIRST=0, CPOL=0,
CPHA=1。
1. 当 NSS 有效,SPI 被使能,从机开始控制 MISO;当 NSS 被释放或者 SPI 关闭时从机失去对 MISO 的控
制。对于从机,在传输开始前必须提供充足的时间给主机,以便提前准备数据。在主机端,仅在 SPI 被使
能时,SPI 外设会控制 MOSI 和 SCK 信号(也包括 NSS 信号)。如果 SPI 被 disable,SPI 外设就从 GPIO
断开,因此在这些线上的电平值取决于 GPIO 的设定。
2. 在主机端,如果通讯是连续的,则 BSY 在帧之间保持有效。在从机端,BSY 信号在数据帧之间通常变低至
少一个时钟周期。
3. 只有当 TXFIFO 是满的,TXE 信号才被清零。

4. 只有当 TXFIFO 是满的,TXE 信号才被清零。

5. 在 Data packed mode, TxE 和 RxNE 事件是成对出现的,每个读/写 FIFO 的访问是 16bit 宽(until the
number of data frames are even)。如果 TxFIFO 是 3/4 full,FTLVL 状态停在 FIFO full level。这就是为什
么最后一个奇数 frame 不能在 TxFIFO 变成 1/2 full 之前存储。该数据 frame 以 8-bit 的访问方式存储在
TxFIFO 中。

289/305
PY32F002B 参考手册

NSS

SCK
2 2 2 2
BUSY
D0 D1 D2 D3 D4

MOSI 7 6 543 21076 543 2 1 07 6 543 21 07 6 5 43 21 0 76 543 21 0

SPE
Enable Tx/Rx interrupts

D1D0 D3D2 D4 software(polling or interrupt routine) control at Tx event

FTLVL 00 10 11 10 11 10 01 00
4 Thandling
Note 1
TXE
3 3
1
Dn Dn+1 Dn+2 Dn+3 Dn+4
MISO 7 6 543 21076 543 2 1 07 6 543 21 07 6 5 43 21 0 76 543 21 0

RXNE

software(polling or interrupt routine) control at Tx event Dn+1Dn Dn+3Dn+2 Dn+4

FRLVL 00 01 10 00 01 10 00 01 00

图 21-10 主机 full-duplex communication diagram(bit frame=8)


Note1:Thandling 即 cpu 写数据到 Tx fifo 所用的时间

21.3.10. Status flags


应用程序通过 3 个状态标志可以完全监控 SPI 总线的状态。

21.3.10.1. Tx buffer empty flag(TXE)


当 TXFIFO 有足够的空间存放要发送的数据时,TXE 标志位被置位。TXE 标志位与 TXFIFO level 有关。该
标志位变高并保持高电平,直到 TXFIFO level 小于等于 1/2 FIFO 深度才会被硬件清零。如果 TXEIE
(SPI_CR2)被置位,则会产生中断请求。当 TXFIFO level 大于 1/2,该位被自动清零。

21.3.10.2. 接收缓冲非空(Rx buffer not empty)标志(RXNE)


如果 RXNEIE 位(SPI_CR2)被置位,则产生中断。

21.3.10.3. 忙(Busy)标志(BSY)
BSY 标志由硬件设置与清除(写入此位无效果),此标志表明 SPI 通信层的状态。
当它被设置为’1’时,表明 SPI 正忙于通信,但有一个例外:在主模式的双向接收模式下(MSTR=1、BDM=1
并且 BDOE=0),在接收期间 BSY 标志保持为低。
在软件要关闭 SPI 模块并进入停机模式(或关闭设备时钟)之前,可以使用 BSY 标志检测传输是否结束,这
样可以避免破坏最后一次传输,因此需要严格按照下述过程执行。
BSY 标志还可以用于在多主机系统中避免写冲突。
除了主模式的双向接收模式(MSTR=1、BDM=1 并且 BDOE=0),当传输开始时, BSY 标志被置’1’。
以下情况该标志将被清除为’0’:
● 当 SPI 被正确的 disable 掉
● 主机模式,当产生 MODF=1
● 主机模式,当传输完成,不再有效数据要发送
● 从机模式,在每个数据传输之间,BSY 标志置为 0,并保持至少一个 SPI 时钟周期

290/305
PY32F002B 参考手册

Note: 不要使用 BSY 标志处理每个数据发送和接收。使用 TXE 和 RXNE 更合适。

21.3.11. 错误标志

21.3.11.1. 主模式失效(MODF)
主模式失效(MODF)仅发生在:当 NSS 作为输入信号(SSOE=0),NSS 引脚硬件模式管理下,主设备
的 NSS 脚被拉低;或者在 NSS 引脚软件模式管理下,SSI 位被置为’0’时。此时,MODF 位被自动置位。主模
式失效对 SPI 设备有以下影响:
● MODF 位被置为’1’,如果设置了 ERRIE 位,则产生 SPI 中断;
● SPE 位被清为’0’。这将停止一切输出,并且关闭 SPI 接口;
● MSTR 位被清为’0’,因此强迫此设备进入从模式。
下面的步骤用于清除 MODF 位:
1. 当 MODF 位被置为’1’时,执行一次对 SPI_SR 寄存器的读或写操作;
2. 然后写 SPI_CR1 寄存器。
在有多个 MCU 的系统中,为了避免出现多个从设备的冲突,必须先拉高该主设备的 NSS 脚,再对 MODF
位进行清零。在完成清零之后, SPE 和 MSTR 位可以恢复到它们的原始状态。
出于安全的考虑,当 MODF 位为’1’时,硬件不允许设置 SPE 和 MSTR 位。
通常配置下,从设备的 MODF 位不能被置为’1’。然而,在多主配置里,一个设备可以在设置了 MODF 位的
情况下,处于从设备模式;此时,MODF 位表示可能出现了多主冲突。中断程序可以执行一个复位或返回到默
认状态来从错误状态中恢复。

21.3.11.2. 过载模式
当数据被主机或者从机接收,并且 RXFIFO 没有足够的空间存接收到的数据时,产生 over 正常运行情况。
如果软件没有足够的时间读走以前接收到的数据(RXFIFO 中存放),该情况就会发生。
当 over 正常运行情况发生,新收到的数据不会 overwrite 以前存放在 RXFIFO 的数据。接收到的新数据被
忽略,并且所有接下来发送的数据丢失。
依次读出 SPI_DR 寄存器和 SPI_SR 寄存器可将 OVR 清除。

21.3.12. SPI 中断

表 21-1 SPI 中断请求


中断事件 事件标志 使能控制位
TXFIFO 等待被装载 TXE TXEIE
数据接收到 RXFIFO 中 RXNE RXNEIE
主模式失效事件 MODF ERRIE
溢出错误 OVR ERRIE

21.4. SPI 寄存器


SPI 对应的寄存器可以进行 16-bit 和 32-bit 访问,DR 寄存器支持 32-bit、16-bit 和 8-bit 访问。

21.4.1. SPI 控制寄存器 1 (SPI_CR1)

Address offset:0x00
Reset value:0x0000

291/305
PY32F002B 参考手册

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
BI-
BIDIO Re Re DF RXONL SS SS LSBFIR SP MST CPO CPH
DIMOD BR[2:0]
E s s F Y M I ST E R L A
E
R R R R R
RW RW RW RW RW RW RW RW RW
W W W W W

Bit Name R/W Reset Value Function


双向数据模式使能。
15 BIDIMODE RW 0 0:“双线单向”模式
1:“单线双向”模式
双向模式输出使能。
与 BIDIMODE 位一起配置“单线双向”模式下数
据的输出方向。
14 BIDIOE RW 0 0:输出禁止(只收模式)
1:输出使能(只发模式)
“单线”在主设备端位 MOSI 引脚,在从设备端为
MISO 引脚。
13 Reserved 0
12 Reserved 0
数据帧格式
0:使用 8 位数据帧格式进行发送/接收;
1:使用 16 位数据帧格式进行发送/接收。
11 DFF RW 0
注:只有当 SPI 禁止(SPE=0)时,才能写该位,
否则出错。
注:I2S 模式下不使用。
仅接收控制。
该位和 BIDIMODE 位一起决定在“双线单向”模
式下的传输方向。在多个从设备的配置中,在未
被访问的从设备上该位置 1,使得只有被访问的
10 RXONLY RW 0
从设备才有输出,因而不会造成数据线上有数据
冲突。
0:全双工(发送和接收)
1:禁止输出(只接收模式)
软件从设备管理。
当 SSM 置位,NSS 引脚上的电平由 SSI 位的值
9 SSM RW 0 决定。
0:禁止软件从设备管理
1:使能软件从设备管理
内部从设备选择。
该寄存器只有当 SSM=1 时才有效。该寄存器决
8 SSI RW 0
定了 NSS 上的电平,在 NSS 引脚上的 I/O 操作
无效。
帧格式。
0:先发送 MSB
7 LSBFIRST RW 0
1:先发送 LSB
通讯进行时不能改变该寄存器的值。
SPI 使能。
6 SPE RW 0
0:禁止 SPI

292/305
PY32F002B 参考手册

Bit Name R/W Reset Value Function


1:使能 SPI
波特率控制。
000:fPCLK/2
001:fPCLK/4
010:fPCLK/8
011:fPCLK/16
5:3 BR[2:0] RW 0 100:fPCLK/32
101:fPCLK/64
110:fPCLK/128
111:fPCLK/256
通讯进行时不能改变该寄存器的值。
注:从机模式下,最快波特率仅支持 fPCLK/4。
主设备选择。
0:配置为从设备
2 MSTR RW 0
1:配置为主设备
通讯进行时不能改变该寄存器的值。
时钟极性。
0:空闲状态时,SCK 保持低电平
1 CPOL RW 0
1:空闲状态时,SCK 保持高电平
通讯进行时不能改变该寄存器的值。
时钟相位。
0:数据采样从第一个时钟边沿开始
0 CPHA RW 0
1:数据采样从第二个时钟边沿开始
通讯进行时不能改变该寄存器的值。

21.4.2. SPI 控制寄存器 2 (SPI_CR2)

Address offset:0x04
Reset value:0x0000
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SLV
Res Res Res DS Res Res Res TXEIE RXNEIE ERRIE Res Res SSOE Res Res
FM
RW RW RW RW RW RW RW RW RW

Bit Name R/W Reset Value Function


31:16 Reserved - Reserved
从机 fast mode enable
0:从机 normal mode,从机模式支持最快 SPI
clock 的速度小于 pclk/4
15 SLVFM RW 0 1:从机 fast mode,可支持从机模式下 SPI clock
速度可到 pclk/4
注:当 SPI clock 的速度小于 pclk/4 时,一定不
能设定该寄存器位。
14:12 Reserved - Reserved
SPI 传输数据长度
11 DS RW 0 0:8-bit 数据帧传输
1:16-bit 数据帧传输
10:8 Reserved

293/305
PY32F002B 参考手册

Bit Name R/W Reset Value Function


发送缓冲区空中断使能
7 TXEIE RW 0 0:禁止 TXE 中断
1:使能 TXE 中断。TXE=1 时产生中断请求。
接收缓冲区非空中断使能
0:禁止 RXNE 中断
6 RXNEIE RW 0
1:使能 RXNE 中断。RXNE=1 时产生中断请
求。
错误中断使能。
0:禁止错误中断
5 ERRIE RW 0
1:使能错误中断。当 CRCERR、OVR 或 MODF
为 1 时,产生中断请求。
4:3 Reserved RES - Reserved
SS 输出使能。
0:禁止在主模式下 SS 输出,该设备可以工作在
2 SSOE RW 0 多主设备模式
1:开启主模式下 SS 输出,该设备不能工作在多
主设备模式。
1:0 Reserved RES - Reserved

21.4.3. SPI 状态寄存器 (SPI_SR)

Address offset:0x08
Reset value:0x0002
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
FTLVL FRLVL
Res Res Res Res BSY OVR MODF Res Res Res TXE RXNE
[1:0] [1:0]
R R R R R R R R R

Bit Name R/W Reset Value Function


31:13 Reserved RES - Reserved
FIFO 发送 level。硬件置位,硬件清零
00:FIFO 空
01:1/4 FIFO
12:11 FTLVL R 0
10:1/2 FIFO
11:FIFO full(当 FIFO 阈值大于 1/2,即认为是
满)
FIFO 接收 level。硬件置位,硬件清零
00:FIFO 空
10:9 FRLVL R 0 01:1/4 FIFO
10:1/2 FIFO
11:FIFO 满
忙标志。
7 BSY R 0 0:SPI 不忙;
1:SPI 处于通讯,或者发送缓冲非空。
溢出标志。
6 OVR R 0 0:无溢出错误
1:产生溢出错误

294/305
PY32F002B 参考手册

Bit Name R/W Reset Value Function


该寄存器由硬件置位,或者软件序列复位(上溢
和下溢序列不同)。
模式错误。
0:无模式错误
5 MODF R 0
1:出现模式错误
该寄存器由硬件置位,或者软件序列复位。
4:2 Reserved 0
发送缓冲空。
1 TXE R 1 0:发送缓冲非空
1:发送缓冲为空
接收缓冲非空。
0 RXNE R 0 1:接收缓冲非空
0:接收缓冲为空

21.4.4. SPI 数据寄存器 (SPI_DR)

Address offset:0x0C
Reset value:0x0000
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DR[15:0]
RW RW RW RW RW RW RW RW RW RW RW RW RW RW RW RW

Bit Name R/W Reset Value Function


数据寄存器。
要发送或者接收到的数据。
数据寄存器作为 RxFIFO 和 TxFIFO 的接口。当
要读数据,实际访问 RxFIFO,而要写数据,实
际访问 TxFIFO。
Note:取决于 DS 位(数据帧宽度选择),数据
15:0 DR[15:0] RW 0
发送或者接收是 8-bit 或者 16-bit。
对于 8-bit 数据帧,数据寄存器是基于 right-
aligned 的 8-bit 数据进行发送和接收的。当在接
收模式,DR[15:8]硬件置为 0。
对于 16-bit 数据帧,数据寄存器是 16-bit 的,整
个 DR[15:0]都用作发送和接收。

21.4.5. SPI 寄存器映像


Offset Register
15

BIDIOE 14

13

12

11

RXONLY 10

LSBFIRS 7

0
DIMODE

MSTR

CPHA
CPOL
SSM
Res.

Res.

SPE
DFF

SSI
BI-

SPI_CR1 BR[2:0]
T

0x00

Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0
RXNEIE
SLVFM

ERRIE
TXEIE

SSOE
Res.

Res.

Res.

Res.

Res.

Res.

Res.

Res.

Res.

Res.

Res.

SPI_CR2
0x04

Reset value 0 0 0 0 0
FRLVL[1:
FTLVL[1:

MODEF

RXNE
OVR
Res.

Res.

Res.

Res.

Res.

Res.

Res.
BSY

TXE

0x08 SPI_SR
0]

0]

295/305
PY32F002B 参考手册

Offset Register

15

14

13

12

11

10

0
Reset value 0 0 0 0 0 0 0 1 0
SPI_DR DR[15:0]
0x0C
Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

296/305
PY32F002B 参考手册

22. 调试支持

22.1. 概况
本芯片基于 Cortex-M0+ CPU,该 CPU Core 包含高级 debug 硬件扩展功能。硬件调试模块允许内核在取
指(指令断点)或访问数据(数据断点)时停止。内核停止时,内核的内部状态和系统的外部状态都是可以查
询的。完成查询后,内核和外设可以被复原,程序将继续执行。
调试功能在由调试主机在连接和调试 MCU 时使用,调试的接口是 serial wire。在 M0+ CPU Core 中的调试
功能是一套 ARM CoreSight Design kit。
M0+提供了集成的片上调试支持,由以下部分组成:
 SW-DP:serial wire
 BPU:Break point unit
 DWT:Data watchpoint trigger
调试支持也包括了本芯片的调试集成功能:
 灵活的调试引脚分配,SWIO@PB6、SWCLK@PA2
 MCU 调试盒(支持低功耗模式,控制外设时钟等

MCU
Cortex-M0+ debug support

Bus matrix
System
interface
Cortex-M0+
Core

SWIO Bridge DBGMCU


SW-DP
SWCLK Debug AP
NVIC

DWT

BPU

图 22-1 DBG 框图

22.2. 引脚分布和调试端口脚

22.2.1. SWD 调试端口

调试功能相关的端口有两个,在所有封装形式都可见。

表 22-1 DBG 框图

SW-DP SW 调试接口
引脚分配
端口引脚名称 类型 调试功能
SWDIO 输入/输出 串行数据输入/输出 PB6

297/305
PY32F002B 参考手册

SW-DP SW 调试接口
引脚分配
端口引脚名称 类型 调试功能
SWDCLK 输入 串行时钟 PA2

22.2.2. 灵活的 SW-DP 脚分配

在芯片复位后(系统复位或者上电复位),用作 SW-DP 的端口被分配作为专门被调试主机立即使用的


pin。
然而,芯片提供了关闭 SWD 端口的可能性,并释放该端口作为 GPIO 用。

22.2.3. SWD 脚上的内部上拉和下拉

一旦 SWD 端口被软件释放,则 GPIO 控制器控制了这两个端口。GPIO 控制寄存器的复位状态把 IO 置为


同等的状态:
 SWDIO:input pull-up
 SWCLK:input pull-down
片内的上拉和下拉电阻为外围节省了增加电阻的需求。

22.3. ID 代码和锁定机制
芯片内存放 ID code。推荐 Keil、IAR 等工具使用该 ID Code(位于 0x4001 5800 地址)锁住调试。
芯片上电后,硬件读取 flash 的 factory config. byte 的 0x1FFF 0FF8 地址,装载到 DBG_IDCODE 寄存器
中。

22.4. SWD 调试端口

22.4.1. SWD 协议介绍

这是个同步的串行通讯协议,使用以下两个端口:
 SWCLK:来自主机给芯片的 clock 信号
 SWDIO:双向数据信号
该协议允许两个 bank 的寄存器(DPACC 寄存器和 APACC 寄存器)被读和写入。数据位是按照在线上的
LSB-first 传输。对于 SWDIO 的双向管理,线上必须在板级上拉(推荐 100k 欧的电阻)。
在协议中每次 SWDIO 方向的改变,转向时间被插入在线上既没有被主机,也没有被芯片驱动的情况。缺
省状态下,这个转向时间是 1 个位的时间,然而整个可以通过配置 SWCLK 频率来调整。

22.4.2. SWD 协议序列

每个序列由以下阶段组成:
 主机发送的包请求(8bits)
 芯片发送的应答响应(3bits)
 主机或者芯片的数据发送阶段(33bits)

298/305
PY32F002B 参考手册

表 22-2 请求包(8-bits)
比特位 名称 描述
0 Start 必须为“1”
0:DP 访问
1 ApnDP
1:AP 访问
0:写请求
2 RnW
1:读请求
4:3 A[3:2] DP 或者 AP 寄存器的地址区域
5 Parity 以前位的校验位
6 Stop 0
7 Park 没有被主机驱动。由于上拉属性,会被芯片读出 1。

通常转向时间(缺省为 1bit)跟随着包请求,此时主机和芯片都没有驱动信号线。

表 22-3 ACK 响应(3bits)


比特位 名称 描述
001:FAULT
[2:0] ACK 010:WAIT
100:OK

如果一个读操作或者如果 1 个 wait 或者 FAULT 应答被接收到,则转向时间必须跟随 ACK 响应。

表 22-4 DATA 传输(33bits)


比特位 名称 描述
[31:0] WDATA 或者 RDATA 写或者读数据
32 校验位 对[31:0]的奇偶校验位
如果是个读操作时,转向时间必须跟随着数据传输。

22.4.3. SW-DP 状态机(reset, idle states, ID code)

SW-DP 的状态机有个定义了 SW-DP 的内部 ID 代码。它遵循 JEP-106 标准。这个 ID 代码是缺省的 ARM


代码,并被置位 0x0BB11477(对应 Cortex-M0)。

22.4.4. DP and AP 读/写访问

 读 DP 的操作不会被 posted: 芯片响应可以被立即(ACK=OK),或者可以被延迟(ACK=WAIT)


 读 AP 的操作被 posted:这意味着访问的结果被返回到下一次传输。如果下一次要进行的访问不是 AP
访问,则 DP-RDBUFF 寄存器必须被地呼出获得该结果。
DP-CTRL/STAT 寄存器的 READOK 标志在每个 AP 读访问或者 RDBUFF 读请求(知道是否 AP 读访
问是成功的)时被更新。
 SW-DP 实现了写 buffer(对于 DP 和 AP 写),这甚至当其他操作仍未完成时,接收一个写操作。如
果写 buffer 满了,芯片应答响应是“WAIT”。IDCODE 读、CTRL/STAT 读或者 ABORT 写,是例外
(甚至当如果写 buffer 是满的)

299/305
PY32F002B 参考手册

 由于 SWCLK 和 HCLK 是异步时钟,在写操作后(校验位之后)需要两个额外的 SWCLK 周期,用来


确保写的内部有效性。当驱动信号线为低时,这几个周期应该被应用。
当为上电请求写 CTRL/STAT 时,以上尤其重要。如果下个操作(需要上电)立即出现,则会 fail。

22.4.5. SW-DP 寄存器

当 ApnDP=0 时,可以访问这些寄存器。
CTRLSEL 位或者
A[3:2] R/W Register Notes
SELECT 寄存器
00 Read IDCODE
00 Write ABORT
01 Read/Write 0 DP-CTRL/STAT
01 Read/Write 1 WIRE CONTROL
10 Read READ RESEND
10 Write SELECT
11 Read/Write READ BUFFER

22.4.6. SW-AP 寄存器


Address A[3:2] value Description
0x0 00 Reserved
DP CTRL/STAT 寄存器,用作
 请求一个系统或者调试的 power-up
0x4 01  为 AP 访问配置传输操作
 控制被 pushed 比较和被 pushed 验证操作
 读一些状态标志(溢出、power-up 应答)
DP SELECTRION 寄存器:用作选择当前访问端口和 active 4 个 word 的寄存
器在窗口。
 Bit 31:24:APSEL:选择当前 AP
0x8 10
 Bit 23:8:reserved
 Bit 7:4:APBANKSEL:在当前 AP,选择 active 4 个 word 寄存器窗口
 Bit 3:0:reserved
DP RDBUFF 寄存器:用于提供调试者在一个操作序列后,得到最终的结果
0xC 11
(不用请求新的 JTAG-DP 操作)

22.5. 内核调试
通过 core debug 寄存器,可以访问 Core debug。Debug 访问这些寄存器是通过 debug 访问端口。他由下
面四个寄存器组成
表 22-5 内核调试寄存器
寄存器 描述
DHCSR 32bit Debug halting control and status register
DCRSR 17bit Debug Core register selector register
DHCDR 32bit debug Core register Data register
DEMCR 32bit debug exception and monitor control register

这些寄存器不会被系统复位,复位掉。他们进会被上电复位,复位掉。为了在复位时 Hart,需要:
 调试和例外监视控制寄存器的 bit0(VC_CORRESET),被使能
 调试停止控制和状态寄存器,被使能

300/305
PY32F002B 参考手册

22.6. BPU 断点单元(Break Point Unit)


Cortex-M0+ BPU 实现提供了 4 个断点寄存器。BPU 是一套 ARMv7-M 的 flash 补丁和断点(FPB)Block
(Cortex-M3 & Cortex-M4)。

22.6.1. BPU 功能

处理器断点实现基于 PC 的断点功能。
参考 ARMv6-M ARM 和 ARM Coresight Components Technical Reference Manual,以获得更多关于 BPU
Coresight 的身份寄存器和他们的地址和访问种类。

22.7. 数据观察点 DWT (Data Watchpoint)


Cortex-M0 DWT 实现提供了 2 个 watchpoint 寄存器。

22.7.1. DWT 功能

处理器的断点实现基于 PC 的断点功能。

22.7.2. DWT 程序计数器样本寄存器

实现数据 watchpoint 单元的处理器,也实现了 ARMv6-M 可选的 DWT Program Counter Sample regis-
ter(DWT_PCSR)。该寄存器允许调试者周期性的采样 PC,而不用停止处理器。这个机制提供了粗粒度分析。
CORTEX-M0+ DWT_PCSR 记录了通过了条件代码的指令和未通过的指令。

22.8. MCU 调试模块 (DBGMCU)


MCU debug component 帮助调试者提供以下支持:
 低功耗模式
 对 timer、watchdog 在 breakpoint 期间的时钟控制

22.8.1. 低功耗模式的调试支持

为进入低功耗模式,要执行 WFI 或者 WFE 指令。MCU 进入低功耗模式,或者是将 CPU Clock 停止掉,


或者是减少 CPU 的功耗。
CPU 不允许在 debug 期间,停掉 FCLK 或者 HCLK。由于这些是调试者连接的需要,在一个调试期间,他
们必须保持开启。MCU 集成了特殊的方法,允许用户在低功耗模式下调试软件。
因此,调试者主机必须先置某些调试配置寄存器的内容,以改变低功耗行为:
 在 sleep 模式:FCLK 和 HCLK 仍然有效。相应的,该模式不能引起任何对于标准调试功能的限制。
 在 stop 模式:DBG_STOP 位必须被调试者提前置位。

22.8.2. 支持定时器、看门狗、bxCAN 和 I2C 的调试

在一个 breakpoint 期间,是有必要选择 timer 的计数器和 watchdog 要怎样的行为:


 他们可以继续在 breakpoint 里计数。例如,这是当一个 PWM 正在控制电机时通常被需要的。
 他们可以停下来在 breakpoint 内部计数。这是 watchdog 的特性决定的。

301/305
PY32F002B 参考手册

22.9. DBG 寄存器

22.9.1. DBG 设备 ID 代码寄存器(DBG_IDCODE)

Address offset: 0x00


仅支持 32-bit 地址访问,只读。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD
r r r r r r r r r r r r r r r r
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD TBD
r r r r r r r r r r r r r r r r

Bit Name R/W Reset Value Function


31:0 待定义 R

22.9.2. 调试 MCU 配置寄存器 (DBGMCU_CR)

该寄存器配置在 debug 状态下的 MCU 低功耗模式。


该寄存器会被上电复位进行异步复位(不是系统复位)。它可以在系统复位下被调试者进行写操作。
如果调试者主机不支持该功能,对于软件使用者来说,写这些寄存器仍然是可能的。
Address offset: 0x04
Reset value: 0x0000 0000(不会被系统复位进行复位)
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Res Res Res Res Res Res Res Res Res Res Res Res Res Res Res Res

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DBG_
Res Res Res Res Res Res Res Res Res Res Res Res Res Res Res
STOP
RW

Bit Name R/W Reset Value Function


31:2 Reserved
Debug stop 模式。
0:(FCLK=off,HCLK=off)。在 STOP 模式,HCLK 和
FCLK 都会关闭。当从 STOP 模式退出时,时钟配置与上
电复位后相同(系统时钟为 HSI)。随后,软件需要重新配
1 DBG_STOP RW 0
置时钟控制器。
1:(FCLK=on,HCLK=on)。当进入 STOP 模式,HSI
不会关闭,FCLK 和 HCLK 由 I 产生。当退出 STOP 模式,
如果需要改变时钟控制,软件需要重新配置。
0 Reserved

22.9.3. DBG APB freeze register 1 (DBG_APB_FZ1)


该寄存器用来配置 timer、IWDG 在 debug 下的时钟。该寄存器被上电复位进行异步复位(不是系统复
位)。它可以被调试者在系统复位下进行写。
Address offset: 0x08
Power on Reset value: 0x0000 0000
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
DBG_
Res Res Res Res Res Res Res Res Res Res Res Res Res Res Res
LPTIM_STOP

302/305
PY32F002B 参考手册

RW
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Res Res Res Res Res Res Res Res Res Res Res Res Res Res Res Res

Bit Name R/W Reset Value Function


当 CPU 停止时,LPTIM 的计数器时钟控制位
31 DBG_LPTIM_STOP RW 0 0:使能
1:不使能
30:0 Reserved RW

22.9.4. DBG APB freeze register 2(DBG_APB_FZ2)


该寄存器用来配置 timer 在 debug 下的时钟控制。该寄存器被上电复位进行异步复位(不是系统复位)。
它可以被调试者在系统复位下进行写。
Address offset: 0x0C
Power on Reset value: 0x0000 0000
仅支持 32-bit 地址访问,只读。
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Re Re Re Re Re Re Re Re Re Re Re Re Re Re
Res Res
s s s s s s s s s s s s s s

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
DBG_ DBG_
Re Re Re Re Re Re Re Re Re Re Re Re Re Re
TIM14_STO TIM1_STO
s s s s s s s s s s s s s s
P P
RW RW

Bit Name R/W Reset Value Function


31:16 Reserved
当 CPU 停止时,TIM14 计数器的时钟控制位
15 DBG_TIM14_STOP 0:使能
1:不使能
14:12 Reserved
当 CPU 停止时,TIM1 计数器的时钟控制位
11 DBG_TIM1_STOP 0:使能
1:不使能
10:0 Reserved

22.9.5. DBG 寄存器映像


O
ff Reg
s iste
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

e r
t
DB
G_I
TBD
TBD
TBD
TBD
TBD
TBD
TBD
TBD
TBD
TBD
TBD
TBD
TBD
TBD
TBD
TBD
TBD
TBD
TBD
TBD
TBD
TBD
TBD
TBD
TBD
TBD
TBD
TBD
TBD
TBD
TBD
TBD

DC
0
OD
x
E
0
Re-
0
set
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
valu
e

303/305
t

x
x
x

0
0
8
0
0
4
0
0
e
s
ff

C
O

e
e
e

Z2
Z1

set
G_
set
G_
set
G_

AP
AP

DB
DB
DB

CR

Re-
Re-
Re-
iste

valu
valu
valu

B_F
B_F
Reg

0
Res. DBG_LPTIM_ST Res. 31
Res. OP
Res. Res. 30
Res. Res. Res. 29
Res. Res. Res. 28
Res. Res. Res. 27
Res. Res. Res. 26
Res. Res. Res. 25
Res. Res. Res. 24
Res. Res. Res. 23
Res. Res. Res. 22
Res. Res. Res. 21
Res. Res. Res. 20
Res. Res. Res. 19
Res. Res. Res. 18
Res. Res. Res. 17
Res. Res. Res. 16

0
DBG_TIM14_S Res. Res. 15
TOP
Res. Res. Res. 14
Res. Res. Res. 13
Res. Res. Res. 12

0
DBG_TIM1_ST Res. Res. 11
OP
Res. Res. Res. 10
Res. Res. Res. 9
Res. Res. Res. 8
Res. Res. Res. 7
Res. Res. Res. 6
Res. Res. Res. 5
Res. Res. Res. 4
Res. Res. Res. 3
Res. Res. Res. 2
0

Res. Res DBG_ST 1


PY32F002B 参考手册

OP

304/305
Res. Res. Res. 0
PY32F002B 参考手册

23. 版本历史
版本 日期 更新记录

V0.1 2022.11.20 初版

V0.2 2022.12.25 更新格式

V0.3 2023.03.20 更新4.2节

V0.4 2023.03.20 更新格式

1. 更新COMP框图
V0.5 2023.09.28
2. 更新IWDG功能描述

305/305

You might also like