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的快速時鐘
-
存儲器
+關注
關注
38文章
7525瀏覽量
164154 -
EEPROM
+關注
關注
9文章
1033瀏覽量
81827 -
存儲芯片
+關注
關注
11文章
901瀏覽量
43225
發布評論請先 登錄
相關推薦
評論