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

STM32的IIC笔记

[复制链接]
STMCU小助手 发布时间:2022-10-12 17:54
白费- g. z3 T5 u1 i! `
I2C 速率:$ G% H& x- u) J' ]; M- p& W4 S
标准模式 —— 100kHz  N, }0 [8 f5 F6 z2 D6 e: G8 N+ _
快速模式 —— 400kHz# l" o- c4 U/ O; i- f7 x- v; i
快速模式+ —— 1MHz8 Z/ o% }( |9 C' H# S$ F; q/ z8 b
I2C 时钟源:
; Z1 K' U2 g! L1 q  Y; jSYSCLK" _$ b1 Y( G4 @( \0 y/ d# y6 b$ M
HSI% N( `; a9 {8 a5 `
输出为I2CCLK
: z% H0 L2 p& Q) t隶属于APB18 q  G! A( V' p: @/ [; X; o

* k! L/ {3 c0 H; Y/ b+ A, h 20201231102346760.png
% e* x0 D7 U, v: r- v, ^9 w) @, C+ X4 R# K
I2C的波特率
/ M' v' N9 F/ ]* h* d  W
! }; ~& O# X, s2 w 2021010813140691.png
. M) D# L3 I" W+ o& S9 j
* o& o' j, _9 y  I- ^* s, l5 }* U& E 20210126102238152.png
% S3 ]8 P5 o+ `; J/ n$ c/ P& M* U9 n# d
上述两张图中可以得到计算波特率公式:% U( a1 T; T2 V! ]$ H8 C: n$ F* `5 q
tSCL = tSYNC1 + tSYNC2 + {[(SCLH+1) + (SCLL+1)] x (PRESC+1) x tI2CCLK}
  Q) R9 y# a$ E# z3 j! m0 e0 U, O; `! m2 p' N+ U# c( e
tSCL 输出波特率周期9 F' V3 @. ~3 g* x
tSYNC1 = SCL下降沿 + 滤波 + DNF*tI2CCLK + 2 * tI2CCLK
! s; f' D) o3 ^7 l" ^& IDNF: 在CR1寄存器中配置6 Y) N; G+ P* l2 ?6 l
tI2CCLK : RCC->CFGR3 |= RCC_CFGR3_I2C1SW; // tI2CCLK =【(0)HSI 8MHz】【(1)SYSCLK】配置
/ T4 w4 g) k" Y# q  wtSYNC2 = SCL上升沿 + 滤波 + DNF*tI2CCLK + 2 * tI2CCLK
8 u3 f9 A; T4 l/ v- Y0 N3 QDNF: 在CR1寄存器中配置
1 h2 m% \, Z* K$ b1 XtI2CCLK : RCC->CFGR3 |= RCC_CFGR3_I2C1SW; // tI2CCLK =【(0)HSI 8MHz】【(1)SYSCLK】配置6 [* ]. X' ^9 Q/ n
SCLH 在 TIMINGR 寄存器中配置 bit[15:8]( q* b) y; V0 e+ a; E% `
SCLL 在 TIMINGR 寄存器中配置 bit[7:0]
) \  v' K# {! @4 C0 uPRESC 在 TIMINGR 寄存器中配置 bit[31:28]
3 ^* \( K- y( Y  B" H5 p3 p3 V+ htI2CCLK 在RCC->CFGR3中配置 RCC_CFGR3_I2C1SW 。 tI2CCLK =【(0)HSI 8MHz(0.125us)】【(1)SYSCLK】
% m8 ]+ Z) M0 O, V
# X6 o# u8 ]& ^! `. J官方手册中提供了查表,非常方便:- A  J, Y% a" z" y

# ]# r& Q# h( F! v# X 2021012610511240.png
  p$ Y0 |) o, L  V  r7 }0 v
3 i( O  [9 ]& f" k" ]4 y$ qI2C的软件复位
% W/ |/ \8 h" n& V2 Z! c当清除PE位(I2C_CR1),会产生I2C的软件复位。
& P2 Q1 [" ^7 Z# s% m
( X" N  D5 H% F( I软件复位会重置下述寄存器:' |4 A! [5 G* J0 t1 [/ A
1.I2C_CR2 register: START, STOP, NACK
5 E( ]7 m& D7 [/ g2.I2C_ISR register: BUSY, TXE, TXIS, RXNE, ADDR, NACKF, TCR, TC, STOPF, BERR, ARLO, OVR* S" ?! t7 @! C- }, J  g$ d6 x

, F% }) M8 p) b! d当处于SMbus状态下,下述寄存器也会被重置:* h% n) R9 D4 M; \
1.I2C_CR2 register: PECBYTE
1 G, j* f. }" o  f" `' n8 j( m2.I2C_ISR register: PECERR, TIMEOUT, ALERT
* M/ p6 l* b9 R5 F% K1 n- ?. n3 E" v- v5 B7 l9 h1 B% P! {
PE复位后,必须在3个APB时钟内保持为低电平,确保软件复位成功。2 I/ j. C0 n7 k3 L8 I& p/ o

8 P( o7 Y) I$ L* R8 L官方推荐复位操作:5 Q/ k! T- u2 d) l. r0 i1 i
PE = 0; (Write PE = 0)
$ I1 x& W! T3 s0 g" T# vPE == 0 ?(Check PE = 0)
# O/ i7 D/ e; p  h4 U/ P9 LPE = 1; (Write PE = 1)
4 x0 Y& I4 A7 J# n7 l" q5 f' w8 O- [+ S- q
I2C的数据接收
* G9 }' P! k8 c
! [- x  P4 N- V$ G; @ 20210104092309998.png
' A' ^, @/ a0 k& q  n8 Q: H' b% H. v  r6 J1 L1 Q
I2C 接收分为 移位寄存器 和 RXDR寄存器。* J$ D3 b% t! {) D
+ `0 J; ]$ [& k- M2 l! ~* a0 \: i
SDA输入填充移位寄存器。在第8个SCL脉冲之后(当接收到完整的数据字节时),如果移位寄存器是空的(RXNE=0),移位寄存器被复制到I2C_RXDR寄存器。如果RXNE=1,表示前一个接收到的数据字节还没有被读取,SCL行被拉低,直到I2C_RXDR被读取。拉低延时被插入在第8位和第9位之间(在确认脉冲之前)。
0 @: s9 X' t# \9 \" k
( a2 ]7 ^  H+ S  w* EI2C的数据发送3 Y# k0 H. s0 `* v: u7 J- c
- S, S4 M5 b7 j3 `( T( A1 N3 L9 h
20210106132313442.png
0 M: M0 ^9 \0 h! k8 |3 x: n9 n/ c; ?- ?$ L
I2C的发送分为 移位寄存器 和 TXDR寄存器。6 M. }4 J( [" J) J! [9 D2 r) c1 @

# M" Q3 f: I: X% ]% L$ ]移位寄存器中的值是当前正在发送的值,TXDR寄存器相当于移位寄存器的Buffer,TXE(TXE == 1代表TXDR空)只指示这个Buffer(TXDR)的满或者空状态,因此当TXE置位时,I2C模块可能还在发送数据。
$ B1 l! M) D1 F' b& d————————————————3 C7 M0 R' d- v  Z! q9 m
版权声明:Vice Versa XL7 ^0 w" G2 @. h9 N  }- f; x

& e! O9 Q0 }+ f  F" N# ^& v$ p* }: O2 w' ~2 }
赞 收藏 1 评论0 发布时间:2022-10-12 17:54

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版