STM32中FSMC与硬件I2C1冲突

在STM32F103芯片中,FSMC功能与硬件I2C1存在引脚冲突,导致I2C1无法正常工作。问题在于I2C1_SDA和FSMC_NADV共用PB7引脚,当FSMC启用时,NADV被配置为复用输出,使I2C1_SDA无法拉低。解决办法包括引脚重映射或在I2C代码中关闭FSMC时钟。
摘要由CSDN通过智能技术生成

我用的是STM32F103芯片。

问题:

代码中,使用FSMC时,

1、软件模拟I2C主机发数据是OK的,但是硬件I2C1从机就会不应答。

2、硬件I2C1主机也不OK。

即,使用FSMC时,硬件I2C1作为主机和从机都会有问题。

原因如下:

stm32勘误手册指南上写道:

从stm32f103的数据手册上可以看出:I2C1_SDA和FSMC_NADV共用同一个引脚,即PB7。

而勘误表上说,当使用FSMC功能时,NADV被配置成复用输出,该信号会被默认地置位为‘1’,因此,使用硬件I2C时,没有办法把I2C1_SDA信号拉低。体现在硬件I2C从机上就是,从机无法应答。如图,在第9个时钟时,SDA一直是高电平,从机无法拉低该信号,即从机无应答。

解决办法:

1、根据勘误表的建议,把I2C1引脚重映射。

2、我这边硬件电路已经画好(使用PB6和PB7),因此无法在软件上使用重映射功能,

好在我这边使用I2C时,可以不使用FSMC功能,因此我在I2C代码里添加了一句:

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC,DISABLE); //close FSMC clock.

关闭FSMC时钟,即关闭FSMC功能,这样我的I2C硬件可以用了。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值