打印

FSMC 数据线GPIO配置问题

[复制链接]
6780|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
最近在弄STM32的FSMC问题。看到官方STM32F10E-EVAL的部分电路图如下:可以看到数据线和地址线上都没有接上拉电阻(当然,GPIO配置为推挽输出的话不用上拉),而官方例程里面的GPIO配置如下:
/*-- GPIO Configuration ------------------------------------------------------*/
  /* SRAM Data lines configuration */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_9 |
                                GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 |
                                GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 |
                                GPIO_Pin_15;
  GPIO_Init(GPIOE, &GPIO_InitStructure);
  
  /* SRAM Address lines configuration */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 |
                                GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_12 | GPIO_Pin_13 |
                                GPIO_Pin_14 | GPIO_Pin_15;
  GPIO_Init(GPIOF, &GPIO_InitStructure);
  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 |
                                GPIO_Pin_4 | GPIO_Pin_5;
  GPIO_Init(GPIOG, &GPIO_InitStructure);
  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
   
  /* NOE and NWE configuration */  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 |GPIO_Pin_5;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
  
  /* NE3 configuration */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_Init(GPIOG, &GPIO_InitStructure);
  
  /* NBL0, NBL1 configuration */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
  GPIO_Init(GPIOE, &GPIO_InitStructure);

GPIO配置的是推挽输出的。
我想问的是:FSMC的地址线和数据线配置成为推挽输出,可以正确的输出高低电平,那么对于在数据线上读数据的时候,是需要读取数据线上的数据,那么,就是作为输入了,即数据线作为双向IO。可是双向IO难道不应该配置为外接上拉电阻的开漏输出吗?为什么大家配置为推挽输出也可以作为双向IO呢?
配置为推挽输出的时候,在读FSMC外部设备(LCD或者SRAM)的时候,又该如何理解数据线的电平的呢?

MCU.png (45.17 KB )

MCU.png

sram.png (87.26 KB )

sram.png
沙发
desomond|  楼主 | 2012-1-8 21:28 | 只看该作者
FSMC的数据与地址线配置的是复用的推挽输出,在STM32的参考手册上面有这么一段,如图所示。其中的第三点,双向复用功能后面的这句“输入驱动器被配置成浮空输入模式”的意思,是否是:将此IO配置成利用推挽输出时,对于输出自不必说,对于输入是否就自动为浮空输入了呢?不知理解正确与否

复用功能.png (144.39 KB )

复用功能.png

使用特权

评论回复
板凳
IJK| | 2012-1-9 09:48 | 只看该作者
并行口的双向功能,通常是指数据总线,地址总线通常都是输出。并行口的数据总线,控制器会根据/WR、/RD控制信号,自动设置数据总线的输出(/WR有效时)、输入(/RD有效时)方向。对于STM32的FSMC,也符合通用的这个控制器的要求。

使用特权

评论回复
地板
desomond|  楼主 | 2012-1-9 10:44 | 只看该作者
并行口的双向功能,通常是指数据总线,地址总线通常都是输出。并行口的数据总线,控制器会根据/WR、/RD控制信号,自动设置数据总线的输出(/WR有效时)、输入(/RD有效时)方向。对于STM32的FSMC,也符合通用的这个 ...
IJK 发表于 2012-1-9 09:48

楼上的意思是,FSMC控制器会根据读写信号来改变GPIO总线的输入或者为输出,输出的时候是推挽输出模式,输入的时候输入驱动器配置成为浮空输入模式

使用特权

评论回复
5
IJK| | 2012-1-9 11:15 | 只看该作者
楼上的意思是,FSMC控制器会根据读写信号来改变GPIO总线的输入或者为输出,输出的时候是推挽输出模式,输入的时候输入驱动器配置成为浮空输入模式 ...
desomond 发表于 2012-1-9 10:44


是的。

使用特权

评论回复
6
lice311| | 2014-6-22 10:03 | 只看该作者
刚好碰到这个问题,学习了

使用特权

评论回复
7
ilikerome| | 2015-5-18 10:21 | 只看该作者
看到这块的代码,也很纳闷,原来如此。

使用特权

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

本版积分规则

1

主题

109

帖子

3

粉丝