gpt4 book ai didi

stm32 - 为 I2C 配置 STM32 输出端口

转载 作者:行者123 更新时间:2023-12-04 14:44:56 26 4
gpt4 key购买 nike

我目前正在尝试使用一对 stm32l152(探索套件)通过 I2C 进行通信。 (我没有使用 STM 提供的标准外设库,因为我想尝试自己实现 i2c ..)

我的配置如下:

  • 7 位寻址模式(无双地址,只有 OAR1)
  • 100khz速度
  • ACK 已启用(在从设备上)
  • ACK 禁用(在主机上,因为任何时候在主机/从机之间只传输 1 个字节)
  • 在主/从上,使用 GPIOB (PB10) 作为 SCL,使用 GPIOB (PB11) 作为 SDA

  • 这是奇怪的部分:当我将 2 个 GPIOB 引脚配置为推挽(无上拉/下拉)时,我能够在示波器上看到我的主机发送起始位、地址字节..。

    但是我的奴隶没有发回确认。我肯定知道这一点,因为主机没有断言 SR1 中的 ADDR 位,我在示波器上看不到 ack,而且从机也没有进入中断(我在从机上启用了 I2C 事件中断)。

    仔细观察示波器上的波形,我意识到信号(SCL、SDA)没有完全达到逻辑低电平的 0 伏,而是 1 伏。我猜这可能是为什么从站无法从主站读取地址字节,因此没有发回 ack。

    所以我将 2 个 GPIO 引脚配置为漏极开路(无上拉/下拉)。设置 START 位 .. 但我没有看到示波器上的 SDA 和 SCL 信号有任何响应(两者都为 3V 高)。

    (我在每条线上使用 10kohms 将 SCL 和 SDA 拉至 3v)。

    最佳答案

    好的,我想我找到了答案..我查找了STM提供的标准外设库并遵循了它们的配置顺序。在此之前,我使用了错误的 GPIO 端口配置顺序...

    测试工作的顺序是:

  • 启用 i2c 和 GPIO 时钟。
  • 配置所需的端口 AF。 (stm32 中 i2c 的 AF4)。
  • 配置 GPIO:

    3a.将 GPIO 设置为 AF。

    3b.设置端口速度。

    3c。设置端口类型(开漏)。

    3d。设置为无上拉/下拉。
  • 配置 i2c。 (寄存器 CR2、CCR、CR1、OAR1、...)。

  • 以前,我在第 2 步之前执行第 3 步,当我生成 START 位时,端口没有输出。

    希望这可以帮助那些有同样问题的人。

    关于stm32 - 为 I2C 配置 STM32 输出端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24078696/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com