[STM32F1]

STM32知识点分享+100引脚芯片外扩SRAM

[复制链接]
4374|8
手机看帖
扫描二维码
随时随地手机跟帖
jinyi7016|  楼主 | 2017-9-18 10:24 | 显示全部楼层 |阅读模式
都知道SRAM有地址线与数据线还有一些控制线,而这些引脚加起来已经有近30多个,而对于100引脚的STM32F103V系列上是没有SRAM的地址线的。但是可以通过与数据线共用来使用SRAM。而这里的共用就是地址线与数据线进行分时复用实现的。
对于PCB面积有限、成本控制严格、内部RAM不够的情况下,本功能则可以很好的解决。虽然在SRAM的访问速率上不如144引脚带有地址线的芯片快,但是也是一个折中的方案。

电路上,IS61LV51216这样的SRAM的接口是不变的,但是要加74LV373进行数据的锁存
将两个373LE引脚连接在一起接在MCU的一个引脚上。

无标题.png
使用STM32CubeMX时的配置如下图。

无标题.png


上文说的锁存器的LE就是要接在PB7上。

无标题.png


引脚配置:
  
static void HAL_FSMC_MspInit(void){
  
   /* USER CODE BEGIN FSMC_MspInit 0 */
  
  
   /* USER CODE END FSMC_MspInit 0 */
  
   GPIO_InitTypeDef GPIO_InitStruct;
  
   if (FSMC_Initialized) {
  
     return;
  
  }
  
   FSMC_Initialized = 1;
  
   /* Peripheral clock enable */
  
   __HAL_RCC_FSMC_CLK_ENABLE();
  
  
   /** FSMC GPIO Configuration  
  
   PE7   ------> FSMC_DA4
  
   PE8   ------> FSMC_DA5
  
   PE9   ------> FSMC_DA6
  
   PE10   ------> FSMC_DA7
  
   PE11   ------> FSMC_DA8
  
   PE12   ------> FSMC_DA9
  
   PE13   ------> FSMC_DA10
  
   PE14   ------> FSMC_DA11
  
   PE15   ------> FSMC_DA12
  
   PD8   ------> FSMC_DA13
  
   PD9   ------> FSMC_DA14
  
   PD10   ------> FSMC_DA15
  
   PD14   ------> FSMC_DA0
  
   PD15   ------> FSMC_DA1
  
   PD0   ------> FSMC_DA2
  
   PD1   ------> FSMC_DA3
  
   PD4   ------> FSMC_NOE
  
   PD5   ------> FSMC_NWE
  
   PD6   ------> FSMC_NWAIT
  
   PD7   ------> FSMC_NE1
  
   PB7   ------> FSMC_NL
  
   */
  
   GPIO_InitStruct.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_InitStruct.Mode = GPIO_MODE_AF_PP;
  
   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  
   HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
  
  
   GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_14
  
                           |GPIO_PIN_15|GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_4
  
                           |GPIO_PIN_5|GPIO_PIN_7;
  
   GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  
   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  
   HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
  
  
   GPIO_InitStruct.Pin = GPIO_PIN_6;
  
   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  
   GPIO_InitStruct.Pull = GPIO_NOPULL;
  
   HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
  
  
   GPIO_InitStruct.Pin = GPIO_PIN_7;
  
   GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  
   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  
   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  
  
   /* USER CODE BEGIN FSMC_MspInit 1 */
  
  
   /* USER CODE END FSMC_MspInit 1 */
  
}
  
FSMC配置
  
static void MX_FSMC_Init(void)
  
{
  
   FSMC_NORSRAM_TimingTypeDef Timing;
  
  
   /** Perform the SRAM1 memory initialization sequence
  
   */
  
   hsram1.Instance = FSMC_NORSRAM_DEVICE;
  
   hsram1.Extended = FSMC_NORSRAM_EXTENDED_DEVICE;
  
   /* hsram1.Init */
  
   hsram1.Init.NSBank = FSMC_NORSRAM_BANK1;
  
   hsram1.Init.DataAddressMux = FSMC_DATA_ADDRESS_MUX_ENABLE;
  
   hsram1.Init.MemoryType = FSMC_MEMORY_TYPE_PSRAM;
  
   hsram1.Init.MemoryDataWidth = FSMC_NORSRAM_MEM_BUS_WIDTH_16;
  
   hsram1.Init.BurstAccessMode = FSMC_BURST_ACCESS_MODE_DISABLE;
  
   hsram1.Init.WaitSignalPolarity = FSMC_WAIT_SIGNAL_POLARITY_LOW;
  
   hsram1.Init.WrapMode = FSMC_WRAP_MODE_DISABLE;
  
   hsram1.Init.WaitSignalActive = FSMC_WAIT_TIMING_BEFORE_WS;
  
   hsram1.Init.WriteOperation = FSMC_WRITE_OPERATION_DISABLE;
  
   hsram1.Init.WaitSignal = FSMC_WAIT_SIGNAL_DISABLE;
  
   hsram1.Init.ExtendedMode = FSMC_EXTENDED_MODE_DISABLE;
  
   hsram1.Init.AsynchronousWait = FSMC_ASYNCHRONOUS_WAIT_ENABLE;
  
   hsram1.Init.WriteBurst = FSMC_WRITE_BURST_DISABLE;
  
   /* Timing */
  
   Timing.AddressSetupTime = 15;
  
   Timing.AddressHoldTime = 15;
  
   Timing.DataSetupTime = 255;
  
   Timing.BusTurnAroundDuration = 15;
  
   Timing.CLKDivision = 16;
  
   Timing.DataLatency = 17;
  
   Timing.AccessMode = FSMC_ACCESS_MODE_A;
  
   /* ExtTiming */
  
  
   if (HAL_SRAM_Init(&hsram1, &Timing, NULL) != HAL_OK)
  
  {
  
     Error_Handler();
  
  }
  
  
}
  



工程文件:
ttt3.rar (3.08 MB)
mmuuss586| | 2017-9-18 12:56 | 显示全部楼层

谢谢分享;

不过现在还是用SPI接口的RAM简单,成本还低;

使用特权

评论回复
jinyi7016|  楼主 | 2017-9-18 16:48 | 显示全部楼层
mmuuss586 发表于 2017-9-18 12:56
谢谢分享;

不过现在还是用SPI接口的RAM简单,成本还低;

有没有SPI口的RAM型号,推荐一下啊。

使用特权

评论回复
mmuuss586| | 2017-9-18 17:41 | 显示全部楼层
jinyi7016 发表于 2017-9-18 16:48
有没有SPI口的RAM型号,推荐一下啊。

有32M的,而且便宜;
还没拿到DEMO板;

拿到后会分享资料的;

使用特权

评论回复
jinyi7016|  楼主 | 2017-9-19 11:23 | 显示全部楼层
mmuuss586 发表于 2017-9-18 17:41
有32M的,而且便宜;
还没拿到DEMO板;

有没有型号啊,是哪家的?正在选型,如果好用可以用用。数据手册应该有吧。

使用特权

评论回复
mmuuss586| | 2017-9-19 14:00 | 显示全部楼层
jinyi7016 发表于 2017-9-19 11:23
有没有型号啊,是哪家的?正在选型,如果好用可以用用。数据手册应该有吧。 ...

或者加我QQ:103472959,注明:21IC

Brochure(CN) draft Vol2 2017.pdf (199.87 KB)

使用特权

评论回复
gaoke231| | 2017-9-19 21:37 | 显示全部楼层
感谢分享,SPI的外设还是用的很普遍绝大多数都是SPI的硬件。

使用特权

评论回复
jinyi7016|  楼主 | 2017-9-20 23:55 | 显示全部楼层
gaoke231 发表于 2017-9-19 21:37
感谢分享,SPI的外设还是用的很普遍绝大多数都是SPI的硬件。

SPI是方便,但是没有并口的快。

使用特权

评论回复
mmuuss586| | 2017-9-21 13:31 | 显示全部楼层
jinyi7016 发表于 2017-9-20 23:55
SPI是方便,但是没有并口的快。

QSPI也很快的,SRAM内部带DDR;
不过相对并行还是慢一些;

ST官方今年4月份已经在测试了;

使用特权

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

本版积分规则

131

主题

1318

帖子

12

粉丝