打印

STM32 AHB_FSMC 和 APB1_I2C1冲突的问题

[复制链接]
8581|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 thinpadhoho 于 2010-5-19 11:47 编辑

我在调STM32的IIC通讯功能,IIC通讯一切正常,没有问题,但是 void RCC_Configuration(void) 中如果加了 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);  IIC通讯就不对了,示波器观察IIC管脚通讯时没有任何变化,怀疑 RCC_AHBPeriph_FSMC 影响了IIC1时钟,看STM32资料,AHB_FSMC 和 APB1_I2C1 两者之间没关系,设置的寄存器一个是 RCC_AHBENR,一个是 RCC_APB1ENR,但是开启了 RCC_AHBPeriph_FSMC, IIC就不行了,关掉了IIC就没问题,这是怎么回事?


void RCC_Configuration(void)
{
  
  /* Setup the microcontroller system. Initialize the Embedded Flash Interface,  
     initialize the PLL and update the SystemFrequency variable. */
  SystemInit();
/* Enable peripheral clocks --------------------------------------------------*/
  
  /* GPIOB Periph clock enable */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  
  /* I2C1 and I2C2 Periph clock enable */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);
  
  //RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
}
沙发
香水城| | 2010-5-19 11:51 | 只看该作者
你看看数据手册上的引脚分布,I2C1与FSMC有公用引脚。

使用特权

评论回复
板凳
thinpadhoho|  楼主 | 2010-5-19 11:54 | 只看该作者
我用的是PB6 PB7 功能口 管脚没有冲突

使用特权

评论回复
地板
香水城| | 2010-5-19 12:34 | 只看该作者
我用的是PB6 PB7 功能口 管脚没有冲突
thinpadhoho 发表于 2010-5-19 11:54


管脚没有冲突?

STM32_I2C_Pins.GIF (24.69 KB )

STM32_I2C_Pins.GIF

使用特权

评论回复
5
thinpadhoho|  楼主 | 2010-5-19 13:28 | 只看该作者
我用的PB6- IIC -SCL  PB7-IIC-SDA

PB7虽然有FSMC_NADV复用功能,Norflash上用到的 用户手册365页  FSMC_NADV :Latch enable (this signal is called address valid, NADV, by some NOR Flash devices)

RCC_AHBPeriph_FSMC 使能了,但还没有做FSMC设置初始化 应该


FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);  
  
  /* BANK 3 (of NOR/SRAM Bank 1~4) is enabled */
  FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM3, ENABLE);



FSMC才开启吧

使用特权

评论回复
6
thinpadhoho|  楼主 | 2010-5-19 14:55 | 只看该作者
确实是这样 PB7复用了 我用remap PB8 PB9再开AHB_FSMC就没问题了 那我要是想用PB6 PB7 还使能FSMC时钟 有办法吗 ?

使用特权

评论回复
7
IJK| | 2010-5-19 15:12 | 只看该作者
“想用PB6 PB7 还使能FSMC时钟”,同时用作I2C和FSMC当然是不可能的,分时使用是可以的。

使用特权

评论回复
8
thinpadhoho|  楼主 | 2010-5-19 15:34 | 只看该作者
我不是同时使用 就说PB7是FSMC_NADV和IIC1_SCL两种功能 但是我FSMC并没有用 没有外接 也没有初始化 只把AHB_FSMC时钟打开了 PB7当做IIC1_SCL使用 可以吗

使用特权

评论回复
9
香水城| | 2010-5-19 15:38 | 只看该作者
呵呵,7楼说不可能,你却要问可不可以,我说“不可以”,:lol

使用特权

评论回复
10
thinpadhoho|  楼主 | 2010-5-19 16:30 | 只看该作者
7楼分时使用 怎么使用? 用IIC的时候禁掉FSMC 这个不太可能啊

使用特权

评论回复
11
香水城| | 2010-5-19 16:32 | 只看该作者
7楼分时使用 怎么使用? 用IIC的时候禁掉FSMC 这个不太可能啊
thinpadhoho 发表于 2010-5-19 16:30


如果用IIC的时候又不能禁掉FSMC,那么你的要求不能实现,请想其它办法吧,例如使用其它I2C模块或使用软件模拟I2C。

使用特权

评论回复
12
thinpadhoho|  楼主 | 2010-5-19 16:42 | 只看该作者
郁闷的勒

使用特权

评论回复
13
thinpadhoho|  楼主 | 2010-5-19 16:45 | 只看该作者
我用remap功能试了PB8 PB9用作IIC 1功能口,再开AHB_FSMC是木的问题的 我不想改 PB8、PB9是因为牵扯到硬件的问题 得重做板子 很费事的 用PB6、PB7IO口模拟IIC是没有问题的 但模拟口读出来的东西有点i不对 郁闷

使用特权

评论回复
14
IJK| | 2010-5-19 21:45 | 只看该作者
7楼分时使用 怎么使用? 用IIC的时候禁掉FSMC 这个不太可能啊
thinpadhoho 发表于 2010-5-19 16:30


用IIC之前把FSMC的时钟关掉,就可以了

使用特权

评论回复
15
wfmartin28| | 2013-1-25 14:49 | 只看该作者
楼主能否将你的IIC程序分享一下!!!

使用特权

评论回复
16
mueua| | 2014-1-15 11:32 | 只看该作者
实际测试,用I2C1  (读),  之前禁止FSMC时钟,     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, DISABLE);

那么 I2C_EE_BufferRead(Rx1_Buffer, adr, num);  就没问题,否则就在EV5处过不去;

但如果上述两句反复循环运行时,还是会有I2C-state的问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

38

帖子

0

粉丝