我有一个 stm32l0 系列处理器,但我不知道如何计算 i2c 时序。我想使用 Bosh bme680/bme280 传感器。我只找到stm32F0/f3的Timming配置工具。有人知道怎么计算吗?
TLDR : RM0377 参考手册“超低功耗 STM32L0x1 高级 Arm\xc2\xae 基于 32 位\n MCU”,第 614 页包含示例。
\n\n注意:我还没有真正使用过 I2C。以下所有内容均基于文档。
\n\nUM1749 用户手册《STM32L0 HAL 和低层驱动程序说明》 (p.\n233):
\n\n\nuint32_t I2C_InitTypeDef::Timing 指定 I2C_TIMINGR_寄存器值。该参数参考参考手册中的I2C初始化部分计算得出
\n
RM0377 参考手册《超低功耗STM32L0x1高级Arm\xc2\xae基于32位\nMCU》 \n(p.641):
\n\n\n\n\n时序寄存器(I2C_TIMINGR)
\n\n(...)
\n\n压力[3:0]:定时预分频器
\n\n该字段用于预分频 I2CCLK,以生成用于数据建立和保持计数器(请参阅第 587 页上的 I2C 时序)以及 SCL 高电平和低电平计数器(请参阅第 587 页上的 I2C 主初始化)的时钟周期 t_PRESC。第 602 页)。
\n\n\n\n
t_PRESC = (PRESC+1) x t_I2CCLKSCLDEL[3:0]:数据建立时间\n 该字段用于在 SDA 边缘和 SCL 上升沿之间生成延迟 t_SCLDEL。在主机模式和 NOSTRETCH = 0 的从机模式下,SCL 线在 t_SCLDEL 期间拉低。
\n\n\n\n
t_SCLDEL = (SCLDEL+1) x t_PRESC注:t_SCLDEL 用于生成 t_SU:DAT 时序。
\n\n斯达德尔[3:0]:数据保持时间\n 该字段用于生成 SCL 下降沿和 SDA 沿之间的延迟 t_SDADEL。在主机模式和 NOSTRETCH = 0 的从机模式下,SCL 线在 t_SDADEL 期间拉低。
\n\n\n\n
t_SDADEL = SDADEL x t_PRESC注:SDADEL 用于生成 t_HD:DAT 时序。
\n\nSCLH[7:0]:SCL 高电平周期(主模式)\n 该字段用于在主模式下生成 SCL 高电平周期。
\n\n\n\n
t_SCLH = (SCLH+1) x t_PRESC注意:SCLH 还用于生成 t_SU:STO 和 t_HD:STA 时序。
\n\nSCLL[7:0]:SCL 低电平周期(主模式)\n 该字段用于在主模式下生成 SCL 低电平周期。
\n\n\n\n
t_SCLL = (SCLL+1) x t_PRESC注意:SCLL 还用于生成 t_BUF 和 t_SU:STA 时序。
\n
有关预分频器的更多信息可以在有关定时器的段落中找到\n(p. 433)。
RM0377(第 581 页):
\n\n\n\n\n该接口通过数据引脚 (SDA) 和时钟引脚 (SCL) 连接到 I2C 总线。它可以与标准(高达 100 kHz)、快速模式(高达 400 kHz)或快速模式 Plus(高达 1MHz)I2C 总线连接。
\n
因此,为了进行通信,I2C 时钟需要具有适当的频率。
RM0377(第 583 页):
\n\n\n该独立时钟源可以从以下三个时钟源中选择:
\n\n\n
\n- PCLK1:APB1时钟(默认值)
\n- HSI16:内部 16 MHz RC 振荡器
\n- SYSCLK:系统时钟\n 有关更多详细信息,请参阅第 7 节:复位和时钟控制 (RCC)。
\n
RM0377(第 602 页):
\n\n\n\n\n
t_SCL = t_SYNC1 + t_SYNC2 + {[(SCLH+1) + (SCLL+1)] x (PRESC+1) x t_I2CCLK}t_SYNC1 的持续时间取决于以下参数:
\n\n\n
\n\n- SCL下降斜率
\n- 启用后,模拟滤波器会引起输入延迟。
\n- 启用后,数字滤波器引起的输入延迟:DNF x t_I2CCLK
\n- 由于 SCL 与 I2CCLK 时钟同步(2 至 3 个 I2CCLK 周期)而导致的延迟
\nt_SYNC2 的持续时间取决于以下参数:
\n\n\n
\n- SCL上升斜率
\n- 启用后,模拟滤波器会引起输入延迟。
\n- 启用后,数字滤波器引起的输入延迟:DNF x t_I2CCLK
\n- 由于 SCL 与 I2CCLK 时钟同步(2 至 3 个 I2CCLK 周期)而导致的延迟
\n
BME280 数据表(第 30 页):
\n\n\n支持所有模式(标准、快速、高速)。
\n
总结一下:根据 I2C 时钟频率和您想要使用的速度,您需要选择符合使用公式的、、PRESC、SCLDEL、SDADEL的SCLH值SCLLI2C-SMBUS specification clock timingst_SCL = t_SYNC1 + t_SYNC2 + {[(SCLH+1) + (SCLL+1)] x (PRESC+1) x t_I2CCLK}
I2C_TIMINGR register configuration examples第 614 页的 RM0377 中也有一些。
| 归档时间: |
|
| 查看次数: |
8799 次 |
| 最近记录: |