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

STM32的IIC笔记

[复制链接]
STMCU小助手 发布时间:2022-8-23 18:34
I2C 速率:3 X5 R* @: ]: H- o5 I
标准模式 —— 100kHz, t0 h5 }  m# \9 s/ d8 d6 ?
快速模式 —— 400kHz
6 u4 y  U7 p  d) Y4 q  H快速模式+ —— 1MHz7 B/ w9 E5 [) Y0 n
I2C 时钟源:
; U3 f& ^, _( PSYSCLK
! j/ Q/ y% }3 k! KHSI& z% S; [% ]) a0 N+ J
输出为I2CCLK
5 h  u3 p) |0 E  P$ [9 W' N+ `隶属于APB1
  M) _. C+ v6 ~( g& H, o9 [: H" w' @! |% {1 {0 U% V
20201231102346760.png 6 t9 V2 V% @  q
) n' O# v/ N* M% g! K
I2C的波特率
4 L* }% ^# r( E7 F5 ?) Q; @6 O5 U4 T! l/ w7 t" t- [
2021010813140691.png : U# L: p; g5 R2 f& c

" G5 M/ M4 p5 w3 B 20210126102238152.png
4 s3 n" a9 m6 O7 |
9 X) L8 ]3 _% T! W  d+ a( B上述两张图中可以得到计算波特率公式:
9 R0 W; l( C5 R! n) F$ [1 W9 w1 vtSCL = tSYNC1 + tSYNC2 + {[(SCLH+1) + (SCLL+1)] x (PRESC+1) x tI2CCLK}
; ^" c+ J1 I& v
" K6 t& Y2 m5 A) s4 JtSCL 输出波特率周期8 W4 |) @' h, @+ o
tSYNC1 = SCL下降沿 + 滤波 + DNF*tI2CCLK + 2 * tI2CCLK7 ^( d6 V, V& e* G
DNF: 在CR1寄存器中配置/ v3 a/ h: k  Y1 U( }6 |
tI2CCLK : RCC->CFGR3 |= RCC_CFGR3_I2C1SW; // tI2CCLK =【(0)HSI 8MHz】【(1)SYSCLK】配置/ T& |* [2 @- M( G
tSYNC2 = SCL上升沿 + 滤波 + DNF*tI2CCLK + 2 * tI2CCLK+ T3 v  m. k7 K% D
DNF: 在CR1寄存器中配置
7 w4 Q+ @4 K( f0 a0 ^tI2CCLK : RCC->CFGR3 |= RCC_CFGR3_I2C1SW; // tI2CCLK =【(0)HSI 8MHz】【(1)SYSCLK】配置
7 O( ]7 D$ ~8 S5 w9 ?. iSCLH 在 TIMINGR 寄存器中配置 bit[15:8]
+ y: x- l( |$ j3 ~+ KSCLL 在 TIMINGR 寄存器中配置 bit[7:0]' o4 E  t3 b. e" F
PRESC 在 TIMINGR 寄存器中配置 bit[31:28]
" |* h/ A9 ~& C8 }% otI2CCLK 在RCC->CFGR3中配置 RCC_CFGR3_I2C1SW 。 tI2CCLK =【(0)HSI 8MHz(0.125us)】【(1)SYSCLK】
  ~* Y' A4 ]+ r. F4 o5 ~; E/ D* v' z+ c% d5 Q. o
官方手册中提供了查表,非常方便:& K) I0 B5 J/ j4 w1 S
1 j" ~. O: j0 h
2021012610511240.png
3 h6 ?% ^5 g7 u0 `  u9 z  j
, e* I0 }" E! j  yI2C的软件复位
* b- B0 o! j; [: E当清除PE位(I2C_CR1),会产生I2C的软件复位。
4 W% k' h+ S9 b, g4 h1 i% U) L  e3 x
软件复位会重置下述寄存器:. X- P. l! O8 n9 f: `  Z8 q. j
I2C_CR2 register: START, STOP, NACK/ z# x: D, S+ j
I2C_ISR register: BUSY, TXE, TXIS, RXNE, ADDR, NACKF, TCR, TC, STOPF, BERR, ARLO, OVR, c9 d& h& A3 F0 Z8 Y# Z
" m# [: c, a+ d6 x( F2 Z
当处于SMbus状态下,下述寄存器也会被重置:
# p  g7 K1 V, E1 d/ WI2C_CR2 register: PECBYTE
2 x  O8 ?( |' D8 XI2C_ISR register: PECERR, TIMEOUT, ALERT* H' g; x7 l6 O

" Y& U: A: W0 HPE复位后,必须在3个APB时钟内保持为低电平,确保软件复位成功。( e( b- S( h: Z4 S: M& S3 x8 L5 R
' ~, v$ m7 E# P9 J% a' I* p
官方推荐复位操作:
7 a# J5 u& ^- @* y; y( q' ]5 RPE = 0; (Write PE = 0)
  D7 ^% `0 |8 n0 FPE == 0 ?(Check PE = 0)% `  q: W& u. a8 j
PE = 1; (Write PE = 1)2 m( y4 ]( T7 }

! G& A6 N1 o# Z0 M) o' [) N/ M! b; Y8 e6 r6 a
I2C的数据接收
7 {7 A  U  a4 V  k+ [4 a1 m6 P1 A& v1 u+ `! W/ X& U
20210104092309998.png + Z9 O1 V& I3 k/ i

/ Z3 f9 q" {- A* q1 O6 KI2C 接收分为 移位寄存器 和 R
XDR寄存器。
/ n$ z6 s. e- X1 a% V' j
% j$ y* Q3 `  ~* PSDA输入填充移位寄存器。在第8个SCL脉冲之后(当接收到完整的数据字节时),如果移位寄存器是空的(RXNE=0),移位寄存器被复制到I2C_RXDR寄存器。如果RXNE=1,表示前一个接收到的数据字节还没有被读取,SCL行被拉低,直到I2C_RXDR被读取。拉低延时被插入在第8位和第9位之间(在确认脉冲之前)。1 q2 m- B! g+ A4 a, {
; y5 o- }( s) h$ C+ o4 f# m, @4 I
I2C的数据发送
% [) X  U* P& I6 s1 N0 [9 \0 m9 S# M& G( y* e
20210106132313442.png
" U3 G8 z! o/ B9 y2 N6 M6 f2 o' Q3 @5 ?# V$ d' d% C2 @) p
I2C的发送分为 移位寄存器 和 TXDR寄存器。4 |4 L% O; {+ m. s2 ?9 ^
: M' q! V$ W+ ]4 Q
移位寄存器中的值是当前正在发送的值,TXDR寄存器相当于移位寄存器的Buffer,TXE(TXE == 1代表TXDR空)只指示这个Buffer(TXDR)的满或者空状态,因此当TXE置位时,I2C模块可能还在发送数据。+ h. ^; S) U) t: c5 b
————————————————  b* z" y% t! ~; F* F' X
转载:Vice Versa XL
8 q" K  k7 Y" e) Y9 b' O
3 f/ H3 v9 e% f8 \; T* ?" u( b* p, `4 c* G7 [
赞 收藏 评论0 发布时间:2022-8-23 18:34

举报

0个回答

所属标签

相似技术帖

官网相关资源

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