STM32F1 的硬件 Bug

  1. 1. SPI1 重映射后 SDA 无信号输出
    1. 1.1. 触发条件
    2. 1.2. 原因
    3. 1.3. 解决办法
  2. 2. I2C 的 BUSY 标志位被置位,阻止进入主模式
    1. 2.1. 原因
    2. 2.2. 解决办法

最近在设计 RoboMaster 的能量机关时,遇到了很多玄学问题,查阅 STM32F1 的勘误表(errata)后,才发现这些都是芯片在设计阶段发生的 Bug。在这里记录一下触发 Bug 的条件和解决办法。

SPI1 重映射后 SDA 无信号输出

触发条件

  • I2C1 和 SPI1 使能 RCC 时钟
  • SPI1 引脚重映射
  • PB5 被配置为复用功能输出

原因

SPI1 的 MOSI 信号和 I2C1 SMBA 信号发生冲突(甚至 SMBA 没有使用

解决办法

不要同时使用 SPI1 的主模式和 I2C1;当 SPI1 重映射后,I2C1 的时钟必须禁用。

I2C 的 BUSY 标志位被置位,阻止进入主模式

原因

根据官方手册的描述,好像是因为 I2C 的滤波器因为某些玄学问题,会被拉低到低电平,使 BUSY 标志位被置位,导致 I2C 被阻塞。更无语的是,这个问题还是随机出现的……

解决办法

不要用硬件 I2C,老老实实用 软件 I2C

本网站所有文章除特别声明外,均采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。