c - 在 STM32F101 控制器中,由于复位导致通信中断,I2C BUSY 标志置位。恢复机制也失败了
问题描述
在 STM32F101 中,由于复位发生了一些意外,BUSY 标志保持高电平。为了摆脱它,我遵循了 STM 以下文档第 26 页中给出的步骤:
在做这些步骤时,我可以做第一步。在第二步(将 SCL 和 SDA 设置为开漏输出,其值为高),我已将 SCL 和 SDA 设置为输出开漏,但如果我将引脚设置为高,则只有 SCL 的 IDR 寄存器设置为高,而 SDA 引脚的无法设置 IDR 寄存器(但设置了 ODR 寄存器)。因此,我无法继续执行进一步的步骤。请帮我解决这个问题
解决方案
在这种情况下,这不是问题。从设备保持 SDA 为低电平。要退出这个死锁,您需要提供 8 到 12 个时钟。您需要切换 SCL 引脚,并且在每个时钟之后您需要检查 SDA 线是否已被从设备释放。这与本勘误表没有任何共同之处。
在这之后很好地重置 I2C 外设。
推荐阅读
- angular - 无法通过本地 ionic 应用程序连接到 azure iot hub
- oracle - 从交互式报告中的列中选择行值
- reactjs - 使用未声明的别名导入 React Typescript 组件
- python - 在 Ubuntu 16.04 (AWS EC2) 上损坏了 python 依赖项
- c++ - 如何使用 ISpLexicon::GetWords 获取单词列表?
- python - 用“with语句”关闭psyopg2中的连接的正确方法是什么?
- c# - 如何从列表中删除生成的标签
- c++ - 无法使用构造函数为类函数赋值
- c# - 从 System.IO.Abstractions 抛出 UnauthorizedAccessException
- apache-kafka - Openwhisk - 订阅队列