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

STM32的IIC笔记

[复制链接]
STMCU小助手 发布时间:2022-8-23 18:34
I2C 速率:
; j0 ?" T3 m. Z# |2 O标准模式 —— 100kHz
3 ?& v6 q4 J6 s7 o, b2 f/ g! b9 f快速模式 —— 400kHz
' V1 [8 _- Z/ [2 T快速模式+ —— 1MHz
* q# H4 K- j9 DI2C 时钟源:
! v2 V  U$ @' Q$ BSYSCLK
- A9 L  j( k' C$ k! \HSI6 z2 h! d( F7 q7 b: v# G
输出为I2CCLK
$ K0 S& j  n4 @1 y隶属于APB1  K2 X' J+ V6 N; i5 y$ ]  K
6 z4 s" ~* {) h* n  f+ [1 f4 O
20201231102346760.png
! o7 e& |6 t; r5 |
* S- e/ T7 L& F4 @I2C的波特率
6 `* W4 c4 E* N
1 Y5 r% M8 D0 q  ]& ^ 2021010813140691.png * Q0 N' N. c3 Q
' F1 b* W& P6 [4 q8 G
20210126102238152.png
  C! t3 \9 D9 _4 f" e4 d0 I8 V; i1 f& ], M, p( ]- q" h
上述两张图中可以得到计算波特率公式:
: e- u, I3 r; v. jtSCL = tSYNC1 + tSYNC2 + {[(SCLH+1) + (SCLL+1)] x (PRESC+1) x tI2CCLK}1 ?, [( i9 V1 \7 U! l! [! @

  X+ `) v5 X6 c. i5 z( F' }" LtSCL 输出波特率周期
7 d; I% Q# K1 d8 BtSYNC1 = SCL下降沿 + 滤波 + DNF*tI2CCLK + 2 * tI2CCLK
, C  W+ w2 A7 ^6 ZDNF: 在CR1寄存器中配置
! n+ F7 A1 O; X9 N$ atI2CCLK : RCC->CFGR3 |= RCC_CFGR3_I2C1SW; // tI2CCLK =【(0)HSI 8MHz】【(1)SYSCLK】配置
2 M; O0 g" m2 H+ h6 l( a7 mtSYNC2 = SCL上升沿 + 滤波 + DNF*tI2CCLK + 2 * tI2CCLK
6 y/ Y2 x* t- e6 j; ]DNF: 在CR1寄存器中配置
1 M% ?( m7 g6 ]' Y4 F0 q% ^tI2CCLK : RCC->CFGR3 |= RCC_CFGR3_I2C1SW; // tI2CCLK =【(0)HSI 8MHz】【(1)SYSCLK】配置$ @! I# @2 Z# p) n8 w
SCLH 在 TIMINGR 寄存器中配置 bit[15:8]
9 x4 A3 h( W, f: pSCLL 在 TIMINGR 寄存器中配置 bit[7:0]
% `( i( ~8 X; L) TPRESC 在 TIMINGR 寄存器中配置 bit[31:28]
$ @8 Y" u0 C8 BtI2CCLK 在RCC->CFGR3中配置 RCC_CFGR3_I2C1SW 。 tI2CCLK =【(0)HSI 8MHz(0.125us)】【(1)SYSCLK】8 G, l/ c- a* r1 \3 w6 s% s/ d

: N# ?/ m8 R4 Q6 c官方手册中提供了查表,非常方便:" j: [) u4 H. A; |" Z: ?8 b% `3 g
$ D' l! i- t/ ^+ v1 a
2021012610511240.png
% X2 n; Q7 @! ^$ g/ n( Q2 c- m  V& w. \4 }9 e1 ?
I2C的软件复位
7 ?4 V9 ~( ~% @当清除PE位(I2C_CR1),会产生I2C的软件复位。8 l2 Z2 T8 c% n4 w3 d

) x1 j1 ^. v  W  l3 X软件复位会重置下述寄存器:
$ Y5 p9 k5 c0 X7 a& lI2C_CR2 register: START, STOP, NACK/ g! d% u- u1 l" W
I2C_ISR register: BUSY, TXE, TXIS, RXNE, ADDR, NACKF, TCR, TC, STOPF, BERR, ARLO, OVR
1 Z0 T$ V, j5 h7 Y- Z  {  B! M4 R$ J6 d8 x$ A4 T! j
当处于SMbus状态下,下述寄存器也会被重置:
$ C2 _. x3 \( B# Q' [9 A2 UI2C_CR2 register: PECBYTE
  |* f" U9 }( N/ \I2C_ISR register: PECERR, TIMEOUT, ALERT
2 U# `% |1 u  i5 o
% c; V- E! Y0 `: e1 OPE复位后,必须在3个APB时钟内保持为低电平,确保软件复位成功。- h4 C$ I# e9 y$ B& r: a  _7 u1 d9 c

8 U* u3 W) @! j$ K9 I( h官方推荐复位操作:
! O/ N6 n& ?( E4 z# M8 NPE = 0; (Write PE = 0)+ Y% z8 V% x  Z* J  T0 E/ _
PE == 0 ?(Check PE = 0)
) ~" y8 q& y) N2 ePE = 1; (Write PE = 1)
  j% B! q6 J$ W  G! k" X+ ]
' z! _# S4 v  s+ h9 l0 r
- Y3 T6 _/ w) y# d  R5 O( X2 HI2C的数据接收) u& L, v1 Z1 `/ D, `. x: `
5 k& y$ D: B' n9 |4 I; p& N
20210104092309998.png
  [9 P1 o5 L7 Z1 ?6 P. B! x
. K4 V9 B& I, h3 e; V$ BI2C 接收分为 移位寄存器 和 R
XDR寄存器。  u5 |3 E7 ]. g+ X2 U
! r5 Q# }9 j/ n- G
SDA输入填充移位寄存器。在第8个SCL脉冲之后(当接收到完整的数据字节时),如果移位寄存器是空的(RXNE=0),移位寄存器被复制到I2C_RXDR寄存器。如果RXNE=1,表示前一个接收到的数据字节还没有被读取,SCL行被拉低,直到I2C_RXDR被读取。拉低延时被插入在第8位和第9位之间(在确认脉冲之前)。
) T8 J1 z; w+ |  {3 ^8 G! I; c% i$ V- d% B: M+ ~
I2C的数据发送5 B0 c" }* v* ^
! ?& ]9 Q% w+ v0 ?# J
20210106132313442.png 1 r+ i2 P, Z# v0 X9 }/ V$ j
6 x9 O% o- W( {$ c% v# Y
I2C的发送分为 移位寄存器 和 TXDR寄存器。4 o  S% Q( A6 x

0 K! X6 d* n# @, b3 G. |+ h; l2 n移位寄存器中的值是当前正在发送的值,TXDR寄存器相当于移位寄存器的Buffer,TXE(TXE == 1代表TXDR空)只指示这个Buffer(TXDR)的满或者空状态,因此当TXE置位时,I2C模块可能还在发送数据。
# l$ |+ w* L; P4 v; E7 ^4 f, @, k$ X————————————————
7 x8 Y3 C8 u1 [, g/ N( ?9 m, N# L( ]$ Q转载:Vice Versa XL
$ s9 [9 b- g$ V. P* |) s4 N, R2 d2 |* x' [# O
6 v6 Y) {% q2 k& u. o
收藏 评论0 发布时间:2022-8-23 18:34

举报

0个回答

所属标签

相似分享

官网相关资源

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