STMCU小助手
发布时间:2022-8-23 18:34
|
I2C 速率:3 X5 R* @: ]: H- o5 I 标准模式 —— 100kHz, t0 h5 } m# \9 s/ d8 d6 ? 快速模式 —— 400kHz 快速模式+ —— 1MHz7 B/ w9 E5 [) Y0 n I2C 时钟源: SYSCLK HSI& z% S; [% ]) a0 N+ J 输出为I2CCLK 隶属于APB1 : H" w' @! |% {1 {0 U% V
) n' O# v/ N* M% g! K I2C的波特率 ; @6 O5 U4 T! l/ w7 t" t- [
上述两张图中可以得到计算波特率公式: tSCL = tSYNC1 + tSYNC2 + {[(SCLH+1) + (SCLL+1)] x (PRESC+1) x tI2CCLK} tSCL 输出波特率周期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寄存器中配置 tI2CCLK : RCC->CFGR3 |= RCC_CFGR3_I2C1SW; // tI2CCLK =【(0)HSI 8MHz】【(1)SYSCLK】配置 SCLH 在 TIMINGR 寄存器中配置 bit[15:8] SCLL 在 TIMINGR 寄存器中配置 bit[7:0]' o4 E t3 b. e" F PRESC 在 TIMINGR 寄存器中配置 bit[31:28] tI2CCLK 在RCC->CFGR3中配置 RCC_CFGR3_I2C1SW 。 tI2CCLK =【(0)HSI 8MHz(0.125us)】【(1)SYSCLK】 ; E/ D* v' z+ c% d5 Q. o 官方手册中提供了查表,非常方便:& K) I0 B5 J/ j4 w1 S 1 j" ~. O: j0 h
I2C的软件复位 当清除PE位(I2C_CR1),会产生I2C的软件复位。 , 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状态下,下述寄存器也会被重置: I2C_CR2 register: PECBYTE I2C_ISR register: PECERR, TIMEOUT, ALERT* H' g; x7 l6 O PE复位后,必须在3个APB时钟内保持为低电平,确保软件复位成功。( e( b- S( h: Z4 S: M& S3 x8 L5 R ' ~, v$ m7 E# P9 J% a' I* p 官方推荐复位操作: PE = 0; (Write PE = 0) PE == 0 ?(Check PE = 0)% ` q: W& u. a8 j PE = 1; (Write PE = 1)2 m( y4 ]( T7 } ) N/ M! b; Y8 e6 r6 a I2C的数据接收 1 m6 P1 A& v1 u+ `! W/ X& U
I2C 接收分为 移位寄存器 和 RXDR寄存器。 SDA输入填充移位寄存器。在第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的数据发送 9 \0 m9 S# M& G( y* e
2 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 " u( b* p, `4 c* G7 [ |
【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 功能的使用
微信公众号
手机版