STM32入门学习笔记之EEPROM存储实验2

2024-04-18  

16.3 STM32内部IIC协议相关寄存器

16.3.1 控制寄存器1:I2Cx_CR1

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
SWRST - ALERT PEC POS ACK STOP START NOSTRETCH ENGC ENPEC ENAPR SMBTYPE - SMBUS PE

Bit 15:软件复位

0:I2C模块不处于复位

1:I2C模块处于复位

Bit 13:SMBus提醒:软件可以设置或清除该位,当PE=0时,由硬件清除

0:释放SMBAlert引脚使其变高,提醒响应地址头紧跟在NACK信号后面

1:驱动SMBAlert引脚使其变低,提醒响应地址头紧跟在ACK信号后面

Bit 12:数据包出错检测

0:无PEC传输

1:PEC传输

Bit 11:应答/PEC位置

0:ACK位控制当前移位寄存器内正在接收的字节的ACK。PEC位表明当前移位寄存器内的字节是PEC

1:ACK位控制在移位寄存器里接收的下一个字节的ACK。PEC位表明在移位寄存器里接收的下一个字节是PEC

注1:POS位只能用在2字节的接收配置中,必须在接收数据之前配置

注2:为了NACK第2个字节,必须在清除ADDR为之后清除ACK位

注3:为了检测第2个字节的PEC,必须在配置了POS位之后,拉伸ADDR事件时设置PEC位

Bit 10:应答使能

0:无应答返回

1:在接收到一个字节后返回一个应答

Bit 9:停止条件产生

在主模式下:

0:无停止条件产生

1:在当前字节传输或在当前起始条件发出后产生停止条件

在从模式下:

0:无停止条件产生

1:在当前字节传输或释放SCL和SDA线

Bit 8:起始条件产生

在主模式下:

0:无起始条件产生

1:重复产生起始条件

在从模式下:

0:无起始条件产生

1:当总线空闲时,产生起始条件

Bit 7:禁止时钟延长

0:允许时钟延长

1:禁止时钟延长

Bit 6:广播呼叫使能

0:禁止广播呼叫,以非应答响应地址00h

1:允许广播呼叫,以应答响应地址00h

Bit 5:PEC使能

0:禁止PEC计算

1:开启PEC计算

Bit 4:ARP使能

0:禁止ARP

1:使能ARP

注1:如果SMBTYPE=0,使用SMBus设备的默认地址

注2:如果SMBTYPE=1,使用SMBus的主地址

Bit 3:SMBus类型

0:SMBus设备

1:SMBus主机

Bit 1:SMBus模式

0:I2C模式

1:SMBus模式

Bit 0:I2C模块使能

0:禁用I2C模块

1:启用I2C模块,根据SMBus位的设置,相应的I/O口需配置为复用功能

注:在主模式下,通讯结束之前,绝不能清除该位

16.3.2 控制寄存器2:I2Cx_CR2

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
- LAST DMAEN ITBUFEN ITEVTEN ITERREN - FREQ[5:0]







Bit 12:DMA最后一次传输

0:下一次DMA的EOT不是最后的传输

1:下一次DMA的EOT是最后的传输

Bit 11:DMA请求使能

0:禁止DMA请求

1:当TxE=1或RxNE=1时,允许DMA请求

Bit 10:缓冲器中断使能

0:当TxE=1或RxNE=1时,不产生任何中断

1:当TxE=1或RxNE=1时,产生事件中断

Bit 9:事件中断使能

0:禁止事件中断

1:允许事件中断

在下列条件下,将产生该中断:

SB=1(主模式)

ADDR=1(主/从模式)

ADD10=1(主模式)

STOPF=1(从模式)

BTF=1,但是没有TxE或RxNE事件

如果ITBUFEN=1,TxE事件为1

如果ITBUFEN=1,RxNE事件为1

Bit 8:出错中断使能

0:禁止出错中断

1:允许出错中断

在下列条件下,将产生该中断:

BERR=1

ARLO=1

AF=1

OVR=1

PECERR=1

TIMEOUT=1

SMBAlert=1

Bit 5~Bit 0:I2C模块时钟频率,允许的范围在2~36MHz之间

000000:禁用

000001:禁用

000010:2MHz

...

100100:36MHz

大于100100:禁用

16.3.3 上升时间寄存器:I2Cx_TRISE

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
- TRISE[5:0]













Bit 5~Bit 0:在快速/标准模式下的SCL最大上升时间(主模式)

例如:标准模式中最大允许SCL上升时间为1000ns。如果在I2C_CR2寄存器中FREQ中的值等于0x08且TPCLK1=125ns,故TRISE中必须写入09h(1000ns/125ns=8+1)

注:只有当PE=0时,才能设置TRISE

16.3.4 时钟控制寄存器:I2Cx_CCR

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
F/S DUTY - CCR[11:0]











Bit 15:I2C主模式选项

0:标准模式的I2C

1:快速模式的I2C

Bit 14:快速模式时的占空比

0:快速模式下T low /T high =2

1:快速模式下T low /T high =16/9

Bit 11~Bit 0:快速/标准模式下的时钟控制分频系数(主模式)

在I2C标准模式或SMBus模式下:

T high =CCR×TPCLK1

T low =CCR×TPCLK1

在I2C快速模式下:

如果DUTY=0:

T high =CCR×TPCLK1

T low =2×CCR×TPCLK1

如果DUTY=1:

T high =9×CCR×TPCLK1

T low =16×CCR×TPCLK1

例如:在标准模式下,产生100kHz的SCL的频率,如果FREQR=08,TPCLK1=125ns,则CCR必须写入0x28(40×125ns=5000ns)

注1:允许设定的最小值为0x04,在快速DUTY模式下允许的最小值为0x01

注2:fCK应当是10MHz的整数倍,这样可以正确产生400kHz的快速时钟


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。