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 时钟源: SYSCLK" _$ b1 Y( G4 @( \0 y/ d# y6 b$ M HSI% N( `; a9 {8 a5 ` 输出为I2CCLK 隶属于APB18 q G! A( V' p: @/ [; X; o
9 w) @, C+ X4 R# K I2C的波特率
; 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} 0 U, O; `! m2 p' N+ U# c( e tSCL 输出波特率周期9 F' V3 @. ~3 g* x tSYNC1 = SCL下降沿 + 滤波 + DNF*tI2CCLK + 2 * tI2CCLK DNF: 在CR1寄存器中配置6 Y) N; G+ P* l2 ?6 l tI2CCLK : RCC->CFGR3 |= RCC_CFGR3_I2C1SW; // tI2CCLK =【(0)HSI 8MHz】【(1)SYSCLK】配置 tSYNC2 = SCL上升沿 + 滤波 + DNF*tI2CCLK + 2 * tI2CCLK DNF: 在CR1寄存器中配置 tI2CCLK : 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] PRESC 在 TIMINGR 寄存器中配置 bit[31:28] tI2CCLK 在RCC->CFGR3中配置 RCC_CFGR3_I2C1SW 。 tI2CCLK =【(0)HSI 8MHz(0.125us)】【(1)SYSCLK】 官方手册中提供了查表,非常方便:- A J, Y% a" z" y
I2C的软件复位 当清除PE位(I2C_CR1),会产生I2C的软件复位。 软件复位会重置下述寄存器:' |4 A! [5 G* J0 t1 [/ A 1.I2C_CR2 register: START, STOP, NACK 2.I2C_ISR register: BUSY, TXE, TXIS, RXNE, ADDR, NACKF, TCR, TC, STOPF, BERR, ARLO, OVR* S" ?! t7 @! C- }, J g$ d6 x 当处于SMbus状态下,下述寄存器也会被重置:* h% n) R9 D4 M; \ 1.I2C_CR2 register: PECBYTE 2.I2C_ISR register: PECERR, TIMEOUT, ALERT 3 E" v- v5 B7 l9 h1 B% P! { PE复位后,必须在3个APB时钟内保持为低电平,确保软件复位成功。2 I/ j. C0 n7 k3 L8 I& p/ o 官方推荐复位操作:5 Q/ k! T- u2 d) l. r0 i1 i PE = 0; (Write PE = 0) PE == 0 ?(Check PE = 0) PE = 1; (Write PE = 1) 5 f' w8 O- [+ S- q I2C的数据接收
' 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位之间(在确认脉冲之前)。 I2C的数据发送3 Y# k0 H. s0 `* v: u7 J- c - S, S4 M5 b7 j3 `( T( A1 N3 L9 h
8 |3 x: n9 n/ c; ?- ?$ L I2C的发送分为 移位寄存器 和 TXDR寄存器。6 M. }4 J( [" J) J! [9 D2 r) c1 @ 移位寄存器中的值是当前正在发送的值,TXDR寄存器相当于移位寄存器的Buffer,TXE(TXE == 1代表TXDR空)只指示这个Buffer(TXDR)的满或者空状态,因此当TXE置位时,I2C模块可能还在发送数据。 ————————————————3 C7 M0 R' d- v Z! q9 m 版权声明:Vice Versa XL7 ^0 w" G2 @. h9 N }- f; x * }: O2 w' ~2 } |
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
Keil-MDK 在线调试设置断点的高级用法
请教下STM32N6570 怎么把分辨率改成320x240并可以全屏显示
【福利三:逢7发帖赢大礼】想要充分利用STM32H743VI片内的RAM空间(但并不顺利)
基于stm32平台上的IC-MU磁绝对值编码器SPI通讯和码盘数据处理
使用STM32 MCU和MPU连接PDM数字麦克风
分享STM32资料-采用 STM32U031R8 MCU 的 STM32 Nucleo-64 开发板,官方资料,数据手册等资料
HRTIM 指南
使用 STM32 的 DWT 单元监控内存
DAC,COMP,HRTIM Fault 功能的使用
微信公众号
手机版