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

STM32的IIC笔记

[复制链接]
STMCU小助手 发布时间:2022-8-23 18:34
I2C 速率:
7 Y( E6 x3 |4 K标准模式 —— 100kHz. }7 F5 i, Q* u6 [* H7 f) l
快速模式 —— 400kHz
  T# j$ w' M( w" S/ Y快速模式+ —— 1MHz
9 w. a& Y. u; X' e6 Y( II2C 时钟源:
' y, D) i# C, ISYSCLK6 x6 x5 a5 F6 [2 [5 ~3 R4 l' s
HSI; Q( M7 ~4 U  x
输出为I2CCLK) A8 C' z7 f+ Y& U# T
隶属于APB1$ C2 t5 I4 N# [  l0 s
4 u% U: w4 l1 [
20201231102346760.png
2 N6 l& G) C0 q& ~' u( s6 V( g
- y& Z, A2 ?* b* C( U* g* D- {I2C的波特率0 k( s( F) F/ I# x/ i: @5 b
* J8 n$ u8 k; ~9 c% z( |
2021010813140691.png
" `& M! M8 d. a. F4 S
' n3 S/ W# ^( @/ a) B# _, | 20210126102238152.png * K! [  o5 V6 C4 W8 a
7 U1 h5 E- _  W# v
上述两张图中可以得到计算波特率公式:5 n  y: {7 }- e# w/ j' Z
tSCL = tSYNC1 + tSYNC2 + {[(SCLH+1) + (SCLL+1)] x (PRESC+1) x tI2CCLK}8 P0 \2 |$ Y" e

, h, f/ q( S4 T" `& WtSCL 输出波特率周期
0 P% ?+ L' t! k6 T6 u& V: A, YtSYNC1 = SCL下降沿 + 滤波 + DNF*tI2CCLK + 2 * tI2CCLK
2 V1 p# p6 P$ B  WDNF: 在CR1寄存器中配置
1 Q) J  m' @' S. M0 m0 g; r6 r' UtI2CCLK : RCC->CFGR3 |= RCC_CFGR3_I2C1SW; // tI2CCLK =【(0)HSI 8MHz】【(1)SYSCLK】配置
9 ~3 V  D+ u' |, L# U! TtSYNC2 = SCL上升沿 + 滤波 + DNF*tI2CCLK + 2 * tI2CCLK
  `/ Q4 A! M3 G6 N8 v$ XDNF: 在CR1寄存器中配置( E" D: B& m# Z  ~5 f  y" J
tI2CCLK : RCC->CFGR3 |= RCC_CFGR3_I2C1SW; // tI2CCLK =【(0)HSI 8MHz】【(1)SYSCLK】配置
  R% a5 p6 H- T* H4 t2 o& mSCLH 在 TIMINGR 寄存器中配置 bit[15:8]4 \4 }7 C- n6 z* D, R4 z4 Y
SCLL 在 TIMINGR 寄存器中配置 bit[7:0]
& K  N  e* ~" s7 B  n2 C6 n: K5 EPRESC 在 TIMINGR 寄存器中配置 bit[31:28]
- k0 ^# }; A/ ]" u% MtI2CCLK 在RCC->CFGR3中配置 RCC_CFGR3_I2C1SW 。 tI2CCLK =【(0)HSI 8MHz(0.125us)】【(1)SYSCLK】3 g1 [! p) G& b  {/ ~! q
) E( p# E5 C" p
官方手册中提供了查表,非常方便:: F' |# U! n, T) i/ D2 B0 p
1 c" L4 D1 F0 F8 R6 U( N8 f! W
2021012610511240.png ; x+ E9 c9 `8 y
% X9 v9 e, b6 M
I2C的软件复位
  @$ C9 S- N: }当清除PE位(I2C_CR1),会产生I2C的软件复位。8 z8 I* `( `9 X& a. q" B* }) C
$ l$ j2 L9 v  j* N7 _0 f0 [
软件复位会重置下述寄存器:9 r: H5 Q1 G( F* e. N' E
I2C_CR2 register: START, STOP, NACK
- G1 F  z# _$ VI2C_ISR register: BUSY, TXE, TXIS, RXNE, ADDR, NACKF, TCR, TC, STOPF, BERR, ARLO, OVR
& S7 r" ]/ O, b9 J1 @
% v8 U1 c, S" t# H( h当处于SMbus状态下,下述寄存器也会被重置:
0 s: S$ \+ k& @2 w( Y' |I2C_CR2 register: PECBYTE
4 P& i2 o% y- y" }% DI2C_ISR register: PECERR, TIMEOUT, ALERT: s* u" V+ `& {
( r  |3 r3 F$ ~- M" W/ `9 \0 @
PE复位后,必须在3个APB时钟内保持为低电平,确保软件复位成功。
7 p& s! ]( e3 |3 f' k3 p+ g. s3 L$ M% c
官方推荐复位操作:' E( `/ h+ Y& ]+ ^+ u1 d
PE = 0; (Write PE = 0)
! R5 E  {" T7 i6 v6 J3 DPE == 0 ?(Check PE = 0)
4 b: P! }) f0 a- r) b3 nPE = 1; (Write PE = 1)
6 f* `8 Q  `  z/ ^# @: w
$ a: s* C* S" {! w+ j8 A% @
  k4 G5 I9 e  O7 C/ |, AI2C的数据接收
2 H& @$ Y+ Y9 E6 t( N5 x5 }# E0 z$ {' a, U7 Y. U2 J; K- i  u3 T
20210104092309998.png
3 r, X! `" R% ]! Q; W7 ]) u
. _; R% l1 v/ U' a4 _I2C 接收分为 移位寄存器 和 R
XDR寄存器。
5 _8 s% i) ^2 G" t& I9 ?% _) H8 k; a/ }# T0 Q& ]! t) z5 G( V+ P9 _
SDA输入填充移位寄存器。在第8个SCL脉冲之后(当接收到完整的数据字节时),如果移位寄存器是空的(RXNE=0),移位寄存器被复制到I2C_RXDR寄存器。如果RXNE=1,表示前一个接收到的数据字节还没有被读取,SCL行被拉低,直到I2C_RXDR被读取。拉低延时被插入在第8位和第9位之间(在确认脉冲之前)。
7 g& D- }3 c- C
' _' V6 }9 I; V* d0 H! P0 DI2C的数据发送& B" z$ W7 Z5 v0 r6 L
  r0 z2 ~. x2 q: j' h
20210106132313442.png 6 A6 Q; b. s) I" N3 R
' J* F# f1 w6 C) ]/ x
I2C的发送分为 移位寄存器 和 TXDR寄存器。
. |7 D. G  n3 o2 |2 Y+ C  e+ \! w
移位寄存器中的值是当前正在发送的值,TXDR寄存器相当于移位寄存器的Buffer,TXE(TXE == 1代表TXDR空)只指示这个Buffer(TXDR)的满或者空状态,因此当TXE置位时,I2C模块可能还在发送数据。/ f3 V) ?; ~/ n' B5 s: A+ {- q0 a
————————————————
& _* ?6 E( b& c+ T' T5 n5 x转载:Vice Versa XL& K6 P! l! {2 n! f# Y& E5 \

& {5 x5 x1 _, w  g# ?4 g
2 \! I" r0 j3 a3 T1 W& h
收藏 评论0 发布时间:2022-8-23 18:34

举报

0个回答

所属标签

相似分享

官网相关资源

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