我用的是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硬件可以用了。