你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32的IIC笔记

[复制链接]
STMCU小助手 发布时间:2022-8-23 18:34
I2C 速率:! ]9 j" g4 P+ T  i
标准模式 —— 100kHz
7 C. \5 I4 j) A, N快速模式 —— 400kHz0 O& E* ^0 p& u
快速模式+ —— 1MHz
/ d8 o+ _# X7 A5 `+ y& E0 YI2C 时钟源:
' A1 K/ u. j6 v" B" l2 r/ BSYSCLK  ^# ^# p  |& ?' G8 ?
HSI3 Z( O/ }# E& n/ C0 f# _
输出为I2CCLK
* y% Y( S% t; B5 y隶属于APB1" U$ \7 A2 C1 B, ?$ H4 a

: ?6 e9 ^! l  A, L4 ` 20201231102346760.png 9 S+ N- ^2 p$ X/ A" p6 |6 t
( {4 \# k# d! y* U2 p' T! h! V: |
I2C的波特率
1 Z+ W8 a! h" w" R2 v7 X% W
; \& e, C" m& K# u5 E# q 2021010813140691.png : _$ c8 \- M4 {# {
* u8 i2 y' h: a
20210126102238152.png
( L( H4 }- f1 c
- {9 j' h7 ]6 l/ s- g* o" b上述两张图中可以得到计算波特率公式:2 C1 R2 `8 P; K. x5 Q# N0 ?
tSCL = tSYNC1 + tSYNC2 + {[(SCLH+1) + (SCLL+1)] x (PRESC+1) x tI2CCLK}1 o% j$ y6 g! m/ }; O, ~
- a+ E/ H, J1 U+ R2 m' k( i
tSCL 输出波特率周期5 u% l; u, [1 s3 C$ N( n
tSYNC1 = SCL下降沿 + 滤波 + DNF*tI2CCLK + 2 * tI2CCLK; t: `) H  i( q) g* Z
DNF: 在CR1寄存器中配置
, Q6 ?# \$ C) i/ `) g- J7 FtI2CCLK : RCC->CFGR3 |= RCC_CFGR3_I2C1SW; // tI2CCLK =【(0)HSI 8MHz】【(1)SYSCLK】配置5 n4 w" `4 G2 P4 x
tSYNC2 = SCL上升沿 + 滤波 + DNF*tI2CCLK + 2 * tI2CCLK% X( o' q6 q$ \" u, k. n, o
DNF: 在CR1寄存器中配置
3 J4 y7 V* K/ n) y) N' l1 t; ItI2CCLK : RCC->CFGR3 |= RCC_CFGR3_I2C1SW; // tI2CCLK =【(0)HSI 8MHz】【(1)SYSCLK】配置" h: q' k$ A8 f  h0 y
SCLH 在 TIMINGR 寄存器中配置 bit[15:8]* y- Y0 u. p9 Q
SCLL 在 TIMINGR 寄存器中配置 bit[7:0]
; `# e9 w; n* A. t) Z8 p: H! B3 sPRESC 在 TIMINGR 寄存器中配置 bit[31:28]1 u$ ~7 c3 p! H& p0 {  t
tI2CCLK 在RCC->CFGR3中配置 RCC_CFGR3_I2C1SW 。 tI2CCLK =【(0)HSI 8MHz(0.125us)】【(1)SYSCLK】& q. o2 \0 s2 c/ E

# n4 j- a4 V; ?- Q1 c官方手册中提供了查表,非常方便:
6 J$ O, n; `5 e: x2 L  u
, E& P3 V5 S% j: w8 u& _) P 2021012610511240.png
' m5 c) J- @6 e' O, C! ~& y
' d2 y) s* f: c/ c! k2 z1 zI2C的软件复位" d+ r8 Y% j0 {% k' ]/ K. [; ?3 H
当清除PE位(I2C_CR1),会产生I2C的软件复位。8 N/ i. b/ H& [; }0 v

9 b. O: Q' n  R- s  |3 I软件复位会重置下述寄存器:1 F- e; e1 Q' F; f: j  T
I2C_CR2 register: START, STOP, NACK
- ~5 `. {) P! q5 I* o# MI2C_ISR register: BUSY, TXE, TXIS, RXNE, ADDR, NACKF, TCR, TC, STOPF, BERR, ARLO, OVR
, G5 I" P' V: Y
6 \8 l) F4 f' E; t$ `; |4 I当处于SMbus状态下,下述寄存器也会被重置:
' N- @) o3 H1 ~$ @* _0 @I2C_CR2 register: PECBYTE4 ]7 h: ]+ q$ p9 Z
I2C_ISR register: PECERR, TIMEOUT, ALERT
; V! ?* }. N6 q( Y, g* F' b& m) e) v/ G/ o# K5 K! G
PE复位后,必须在3个APB时钟内保持为低电平,确保软件复位成功。
& @4 O: M5 u7 K* v5 A/ T7 l! |0 i+ d% [+ @% w- Q# Y0 f( C
官方推荐复位操作:
5 Z2 M# A* ^+ i: R( d! qPE = 0; (Write PE = 0)
" F5 Z7 ]$ g* @+ l( dPE == 0 ?(Check PE = 0)
5 V. l9 Z7 w$ Q, n& b3 jPE = 1; (Write PE = 1), u( t! F5 e% i$ e0 u
( I& G5 ?- Y0 b% r; |6 D% n

5 d. t. l5 I% L/ I6 J1 R0 WI2C的数据接收
+ B6 D3 t- W  k* q  w  C5 ?# x: i$ p- b  T  U7 I; ]5 I
20210104092309998.png 1 r% t* ]4 D, C$ l3 q- S5 J

' B4 M6 |' A3 t8 G9 L3 KI2C 接收分为 移位寄存器 和 R
XDR寄存器。
0 l  _( \3 `; T% g/ j" Y* i# u3 J/ e- `  h
SDA输入填充移位寄存器。在第8个SCL脉冲之后(当接收到完整的数据字节时),如果移位寄存器是空的(RXNE=0),移位寄存器被复制到I2C_RXDR寄存器。如果RXNE=1,表示前一个接收到的数据字节还没有被读取,SCL行被拉低,直到I2C_RXDR被读取。拉低延时被插入在第8位和第9位之间(在确认脉冲之前)。$ t1 }  a) l/ h
; w$ M* k  g6 H) l0 A- k
I2C的数据发送8 I& ]7 h# T# h' y. s7 p, c

7 O# i. L5 H7 k. ~ 20210106132313442.png
3 \+ R  _7 J! z4 X* @+ h! }/ |! w! H5 w' w/ m1 [
I2C的发送分为 移位寄存器 和 TXDR寄存器。; r) V$ L9 h) ~) O* l" ?1 |
$ R: b" B% ?5 o+ O8 p1 d- M$ c
移位寄存器中的值是当前正在发送的值,TXDR寄存器相当于移位寄存器的Buffer,TXE(TXE == 1代表TXDR空)只指示这个Buffer(TXDR)的满或者空状态,因此当TXE置位时,I2C模块可能还在发送数据。
# i  y: `: R. D5 [2 h) m————————————————
# _* Q2 L' o) \6 R9 b$ t7 t转载:Vice Versa XL3 B& ]6 y4 m: H: P' t2 ^

& G5 J# V7 t" f! t& z: j4 t8 K* a* ?* m; X
收藏 评论0 发布时间:2022-8-23 18:34

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版