1. 通过 APB 复位 I2C, 使能 I2C 时钟
2. 使能 GPIO 时钟,
3. 使能 I2C ( PE="1")
4. 设置速度参数 FREQ CCR F/S DUTY TRISE
A : CR2.FREQR = 期望的I2C时钟, 一般设置为最大的时钟 36 MHz
确定了 Tck = 1 / FREQ -- 类似于 CANBus 的时间片 Tq
B : PE="0", 设置适当的 CCR F/S DUTY 以及 TRISE, PE="1"
标准模式 Tlow
快速模式 Tlow : Thigh = 2 : 1 ( DUTY="0")
快速模式 Tlow : Thigh =
以上类似于 CANBus 的 Tseg1, Tseg2
设置 CCR 决定了时钟高低占用的 Tck 个数, 同时确定了时钟的Tbus
标准模式 Tbus = 2 Tck * CCR
快速模式 Tbus =
快速模式 Tbus =
首先设置 Tck, 然后根据期望的 TBus 设置 CCR F/S DUTY
假设 Tck = 125ns ( FREQ = 8 Mhz), 期望 100 khz Tbus="10us",
采用标准模式 F/S = 0
TRISE = ( Tr / Tck ) + 1 = ( 1000 / 125 ) + 1 = 0x09
5. 配置 I2C 模式 : CR1 = ( ACK="1", SMBUS="0",
现在可以正常通讯了
1 发送开始位 ( BUSY = not ( SDA and SCL) ) 只有BUSY = 0 时, 可以发送开始位
A 首先等到 SR2.Busy = 0 ( 总线空闲)
B. 产生开始位(自动切换到主机模式)
C 等待 SR1.SB = 1 (开始位已经发送) -- 通过写入 DR 清除, 或者 PE="0" 清除 SB 位
SR2.BUSY=1 (总线不在空闲)
SR2.MSL=1 (已经切换到主机模式)
2. 发送地址 ( Addr<<1
首先清除 AF ( Ack Fail ) 然后设置 DR = ( Addr<<1
1.SR1.AF = 1 -- 没有从设备响应
2. SR1.ADDR = 1 -- 从设备响应
首先读取 SR1
然后读取 SR2 : BUSY MSL TRA = 1
上一篇:在MDK开发环境下的STM32工程结构
下一篇:STM32端口时钟
推荐阅读最新更新时间:2024-03-16 15:15
设计资源 培训 开发板 精华推荐
- EEWORLD2018开年送礼,答题赢红包
- 庆元宵答题抽奖,知识与礼物齐飞
- 端午节芯币大兑换
- TE有奖活动|如何有效应对当下测试测量领域的挑战
- 有奖直播:基于GaN 的高频(1.2MHz)高效率 1.6kW 高密度临界模式 (CrM) 图腾柱功率因数校正 (PFC)转换器的应用介绍
- 观看安森美半导体高灵敏度触摸传感器应用视频,轻松答题赢好礼!
- STM32全国巡回研讨会高能来袭, 快告诉小伙伴们
- Microchip ShieldsUP!安全解决方案系列在线研讨会
- 有奖直播:英飞凌 MERUS™ D 类音频放大器的多电平技术及其优势
- 【白皮书免费下载】施耐德电气三宝典:智能配电、关键电源,全生命周期服务