• 关于stm32f10xRB系列的PB5和PB12外设冲突问题


      上周在公司做了一个项目,调试一个mcu,本以为很简单的调试一下裸机驱动,但是调试过程中遇到了一些问题让我觉得比较有意思,记录一下。

    1、关于stm32的SMBUS功能的介绍

      由于笔者也没有玩过smbus,只是在stm32的参考手册上看到过关于它的介绍,就直接放出stm32参考手册上的官方说明,更详细的介绍大家可以直接去看stm32的参考手册。
    image

    2、关于外设功能冲突的介绍

      之所以要介绍SMBus功能,是因为这两根管脚的默认功能都是SMBus,笔者当时做项目的时候,使用的是pb5管脚重映射功能为SPI的MOSI功能。但是调试的时候发现我的硬件I2C1功能一开启,I2C1和SPI1功能都会异常,让硬件打过信号发现我的PB5管脚一直为高电平状态,功能异常。
    image
      后面我发现,一旦我将pb5管脚重映射为SPI1_MOSI后,开启I2C1的时钟时,就会导致SPI1功能失效,后面笔者查询了一下官方的勘误手册,才发现这个在勘误手册上已经有了说明。
    image

    there is a conflict between the SPI1 MOSI and the I2C1 SMBA signals (even if SMBA is not used).
    there is a conflict between the TIM3_CH2 signal and the I2C1 SMBA signal (even if SMBA is not used)

    这两句话很关键,它的意思是:

    • SPI1 MOSI和I2C1 SMBA信号冲突(即使不使用SMBA)。

    • TIM3_CH2信号与I2C1 SMBA信号冲突(即使不使用SMBA)。

      后面官方给出的解决办法就是说在使用它的SPI MOSI功能和TIM3_CH2功能的时候需要将i2c时钟关闭,也就是说如果使用PB5管脚的重映射功能的时候,I2C1是不可以被开启的,它的外设时钟也需要关闭。

      笔者怀疑是因为PB5自身默认功能I2C1_SMBA受到I2C时钟的影响导致其他功能无法使用,我尝试寻找关闭I2C1_SMBA的方法,没有找到,看来这个问题是设计芯片的时候就有的配置,笔者查询了另一根默认功能为I2C2_SMBA的管脚PB12,也在勘误手册上找到了有关解释,虽然PB12管脚没有重映射功能,但是他的复用功能很多。
    image
      后面查询了勘误手册,果然是有记录的。
    image
      也是同样的意思,开启I2C2时钟以后其他功能无法使用。

      笔者后面发现这个问题以后就使用了软件模拟I2C来解决这个问题,但是实际上如果大家想要使用硬件I2C的话,一定要关注这两根管脚,尽量避开冲突,以免引起不必要的麻烦。笔者后面也发现不光是stm32f103RB这一款mcu有这个问题,常用的c8t6等也有,大家可以多多关注他们的勘误手册。

  • 相关阅读:
    速卖通创业5年,从借款10万到年销千万,他通过一款氛围灯征服全球游戏市场
    Nginx + KeepAlived高可用负载均衡集群
    【人工智能Ⅰ】实验1:谓词表示法与产生式知识表示
    docker & k8s
    前端下载文件重命名
    数据结构与算法之排序: 快速排序 (Javascript版)
    MyBatis标签之Select resultType和resultMap
    【随笔记】C++ condition_variable 陷阱
    C++ Qt开发:如何使用信号与槽
    微服务中间件
  • 原文地址:https://www.cnblogs.com/dudiaoguhan/p/16630439.html