微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 第041例:FSMC-扩展SRAM

第041例:FSMC-扩展SRAM

时间:10-02 整理:3721RD 点击:
【HAL库每天一例】系列例程从今天开始持续更新。
我们将坚持每天至少发布一个基于YS-F1Pro开发板的HAL库例程,
该系列例程将带领大家从零开始使用HAL库,后面会持续添加模块应用例程。
同样的,我们还程序发布基于HAL库的指导文档和视频教程,欢迎持续关注,并提出改进意见。
例程下载:
资料包括程序、相关说明资料以及软件使用截图
链接:http://pan.baidu.com/s/1i574oPv
密码:r3s3

(硬石YS-F1Pro开发板HAL库例程持续更新\1. 软件设计之基本裸机例程(HAL库版本)\YSF1_HAL-041. FSMC-扩展SRAM)
/**
  ******************************************************************************
  *                           硬石YS-F1Pro开发板例程功能说明
  *
  *  例程名称: YSF1_HAL-041. FSMC-扩展SRAM
  *   
  ******************************************************************************
  * 说明:
  * 本例程配套硬石stm32开发板YS-F1Pro使用。
  *
  * 淘宝:
  * 论坛:http://www.ing10bbs.com
  * 版权归硬石嵌入式开发团队所有,请勿商用。
  ******************************************************************************
  */
【1】例程简介
  FSMC:可变静态存储控制器,是STM32系列采用的一种新型的存储器扩展技术。
  RAM在单片机作用类似与电脑的内存。STM32F106ZET6内部有64KB大小的RAM,对应一般工程程序
是足够使用的,但如果需要运行类似STemWin支持的界面设计就显得有点捉襟见肘,我们可以外部扩
展SRAM。
  YS-F1Pro开发板板载1M字节的扩展SRAM,本例程对扩展SRAM进行读写测试。
  
【2】跳线帽情况
******* 为保证例程正常运行,必须插入以下跳线帽 **********
丝印编号     IO端口      目标功能引脚        出厂默认设置
  JP1        PA10        TXD(CH340G)          已接入
  JP2        PA9         RXD(CH340G)          已接入
  
【3】操作及现象
  使用开发板配套的MINI USB线连接到开发板标示“调试串口”字样的MIMI USB接口(需要安装驱动),
在电脑端打开串口调试助手工具,设置参数为115200 8-N-1。下载完程序之后,在串口调试助手窗口
可接收到信息。
/******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/






  1. /**
  2.   ******************************************************************************
  3.   * 文件名程: bsp_exSRAM.c
  4.   * 作    者: 硬石嵌入式开发团队
  5.   * 版    本: V1.0
  6.   * 编写日期: 2015-10-04
  7.   * 功    能: 液晶底层驱动函数实现
  8.   ******************************************************************************
  9.   * 说明:
  10.   * 本例程配套硬石stm32开发板YS-F1Pro使用。
  11.   *
  12.   * 淘宝:
  13.   * 论坛:http://www.ing10bbs.com
  14.   * 版权归硬石嵌入式开发团队所有,请勿商用。
  15.   ******************************************************************************
  16.   */
  17. /* 包含头文件 ----------------------------------------------------------------*/
  18. #include "exSRAM/bsp_exSRAM.h"

  19. /* 私有类型定义 --------------------------------------------------------------*/
  20. /* 私有宏定义 ----------------------------------------------------------------*/
  21. /* 私有变量 ------------------------------------------------------------------*/
  22. SRAM_HandleTypeDef hexSRAM;
  23. static int FSMC_exSRAM_Initialized = 0;
  24. static int FSMC_exSRAM_DeInitialized = 0;

  25. /* 扩展变量 ------------------------------------------------------------------*/
  26. /* 私有函数原形 --------------------------------------------------------------*/
  27. /* 函数体 --------------------------------------------------------------------*/
  28. /**
  29.   * 函数功能: 初始化扩展SRAM
  30.   * 输入参数: 无
  31.   * 返 回 值: 无
  32.   * 说    明:无
  33.   */
  34. void MX_FSMC_exSRAM_Init(void)
  35. {
  36.   FSMC_NORSRAM_TimingTypeDef Timing;

  37.   /* FSMC配置 */
  38.   hexSRAM.Instance = FSMC_NORSRAM_DEVICE;
  39.   hexSRAM.Extended = FSMC_NORSRAM_EXTENDED_DEVICE;
  40.   /* hexSRAM.Init */
  41.   hexSRAM.Init.NSBank = FSMC_NORSRAM_BANK3; // 使用NE3
  42.   hexSRAM.Init.DataAddressMux = FSMC_DATA_ADDRESS_MUX_DISABLE;
  43.   hexSRAM.Init.MemoryType = FSMC_MEMORY_TYPE_SRAM;
  44.   hexSRAM.Init.MemoryDataWidth = FSMC_NORSRAM_MEM_BUS_WIDTH_16;//存储器数据宽度为16bit  
  45.   hexSRAM.Init.BurstAccessMode = FSMC_BURST_ACCESS_MODE_DISABLE;
  46.   hexSRAM.Init.WaitSignalPolarity = FSMC_WAIT_SIGNAL_POLARITY_LOW;
  47.   hexSRAM.Init.WrapMode = FSMC_WRAP_MODE_DISABLE;
  48.   hexSRAM.Init.WaitSignalActive = FSMC_WAIT_TIMING_BEFORE_WS;
  49.   hexSRAM.Init.WriteOperation = FSMC_WRITE_OPERATION_ENABLE; //存储器写使能
  50.   hexSRAM.Init.WaitSignal = FSMC_WAIT_SIGNAL_DISABLE;
  51.   hexSRAM.Init.ExtendedMode = FSMC_EXTENDED_MODE_DISABLE;// 读写使用相同的时序
  52.   hexSRAM.Init.AsynchronousWait = FSMC_ASYNCHRONOUS_WAIT_DISABLE;
  53.   hexSRAM.Init.WriteBurst = FSMC_WRITE_BURST_DISABLE;
  54.   /* FSMC操作时间 */
  55.   Timing.AddressSetupTime = 0x00; //地址建立时间(ADDSET)
  56.   Timing.AddressHoldTime = 0x00;  //地址保持时间(ADDHLD)模式A未用到
  57.   Timing.DataSetupTime = 0x03;    //数据保持时间(DATAST)为3个HCLK 4/72M=55ns
  58.   Timing.BusTurnAroundDuration = 0x00;
  59.   Timing.CLKDivision = 0x00;
  60.   Timing.DataLatency = 0x00;
  61.   Timing.AccessMode = FSMC_ACCESS_MODE_A; //模式A
  62.   HAL_SRAM_Init(&hexSRAM, &Timing, &Timing);//读写同样时序

  63.   __HAL_AFIO_FSMCNADV_DISCONNECTED();

  64. }

  65. /**
  66.   * 函数功能: 初始化扩展SRAM的IO引脚
  67.   * 输入参数: 无
  68.   * 返 回 值: 无
  69.   * 说    明:该函数被HAL_SRAM_MspInit函数调用
  70.   */
  71. static void HAL_FSMC_exSRAM_MspInit(void)
  72. {
  73.   GPIO_InitTypeDef GPIO_InitStruct;
  74.   /* 如果已经完成初始化就无需初始化第二遍 */
  75.   if (FSMC_exSRAM_Initialized)
  76.   {
  77.     return;
  78.   }
  79.   FSMC_exSRAM_Initialized = 1;
  80.   
  81.   
  82.   /* 使能相关端口时钟 */
  83.   __HAL_RCC_GPIOF_CLK_ENABLE();
  84.   __HAL_RCC_GPIOG_CLK_ENABLE();
  85.   __HAL_RCC_GPIOE_CLK_ENABLE();
  86.   __HAL_RCC_GPIOD_CLK_ENABLE();
  87.   
  88.   /* 使能FSMC外设时钟 */
  89.   __HAL_RCC_FSMC_CLK_ENABLE();
  90.   
  91.   /** FSMC GPIO Configuration  
  92.   PF0   ------> FSMC_A0
  93.   PF1   ------> FSMC_A1
  94.   PF2   ------> FSMC_A2
  95.   PF3   ------> FSMC_A3
  96.   PF4   ------> FSMC_A4
  97.   PF5   ------> FSMC_A5
  98.   PF12   ------> FSMC_A6
  99.   PF13   ------> FSMC_A7
  100.   PF14   ------> FSMC_A8
  101.   PF15   ------> FSMC_A9
  102.   PG0   ------> FSMC_A10
  103.   PG1   ------> FSMC_A11
  104.   PE7   ------> FSMC_D4
  105.   PE8   ------> FSMC_D5
  106.   PE9   ------> FSMC_D6
  107.   PE10   ------> FSMC_D7
  108.   PE11   ------> FSMC_D8
  109.   PE12   ------> FSMC_D9
  110.   PE13   ------> FSMC_D10
  111.   PE14   ------> FSMC_D11
  112.   PE15   ------> FSMC_D12
  113.   PD8   ------> FSMC_D13
  114.   PD9   ------> FSMC_D14
  115.   PD10   ------> FSMC_D15
  116.   PD11   ------> FSMC_A16
  117.   PD12   ------> FSMC_A17
  118.   PD14   ------> FSMC_D0
  119.   PD15   ------> FSMC_D1
  120.   PG2   ------> FSMC_A12
  121.   PG3   ------> FSMC_A13
  122.   PG4   ------> FSMC_A14
  123.   PG5   ------> FSMC_A15
  124.   PD0   ------> FSMC_D2
  125.   PD1   ------> FSMC_D3
  126.   PD4   ------> FSMC_NOE
  127.   PD5   ------> FSMC_NWE
  128.   PG10   ------> FSMC_NE3
  129.   PE0   ------> FSMC_NBL0
  130.   PE1   ------> FSMC_NBL1
  131.   */
  132.   GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
  133.                           |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_12|GPIO_PIN_13
  134.                           |GPIO_PIN_14|GPIO_PIN_15;
  135.   GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; /* 复用推挽输出模式 */
  136.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;/* 高速 */
  137.   HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);

  138.   GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
  139.                           |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_10;
  140.   GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; /* 复用推挽输出模式 */
  141.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;/* 高速 */
  142.   HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);

  143.   GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10
  144.                           |GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14
  145.                           |GPIO_PIN_15|GPIO_PIN_0|GPIO_PIN_1;
  146.   GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; /* 复用推挽输出模式 */
  147.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;/* 高速 */
  148.   HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

  149.   GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11
  150.                           |GPIO_PIN_12|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_0
  151.                           |GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5;
  152.   GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; /* 复用推挽输出模式 */
  153.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;/* 高速 */
  154.   HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
  155. }

  156. /**
  157.   * 函数功能: 初始化FSMC的IO引脚
  158.   * 输入参数: hsram:SRAM外设句柄指针
  159.   * 返 回 值: 无
  160.   * 说    明:该函数被HAL库内部函数调用
  161.   */       
  162. void HAL_SRAM_MspInit(SRAM_HandleTypeDef* hsram)
  163. {
  164.   /* 初始化扩展SRAM的IO引脚 */
  165.   HAL_FSMC_exSRAM_MspInit();
  166. }

  167. /**
  168.   * 函数功能: 反初始化扩展SRAM的IO引脚
  169.   * 输入参数: 无
  170.   * 返 回 值: 无
  171.   * 说    明:该函数被HAL_SRAM_MspDeInit函数调用
  172.   */
  173. static void HAL_FSMC_exSRAM_MspDeInit(void)
  174. {
  175.   /* 如果已经完成反初始化就无需初始化第二遍 */
  176.   if (FSMC_exSRAM_DeInitialized) {
  177.     return;
  178.   }
  179.   FSMC_exSRAM_DeInitialized = 1;
  180.   
  181.   /* 禁用FSMC外设时钟 */
  182.   __HAL_RCC_FSMC_CLK_DISABLE();
  183.   
  184.   /** FSMC GPIO Configuration  
  185.   PF0   ------> FSMC_A0
  186.   PF1   ------> FSMC_A1
  187.   PF2   ------> FSMC_A2
  188.   PF3   ------> FSMC_A3
  189.   PF4   ------> FSMC_A4
  190.   PF5   ------> FSMC_A5
  191.   PF12   ------> FSMC_A6
  192.   PF13   ------> FSMC_A7
  193.   PF14   ------> FSMC_A8
  194.   PF15   ------> FSMC_A9
  195.   PG0   ------> FSMC_A10
  196.   PG1   ------> FSMC_A11
  197.   PE7   ------> FSMC_D4
  198.   PE8   ------> FSMC_D5
  199.   PE9   ------> FSMC_D6
  200.   PE10   ------> FSMC_D7
  201.   PE11   ------> FSMC_D8
  202.   PE12   ------> FSMC_D9
  203.   PE13   ------> FSMC_D10
  204.   PE14   ------> FSMC_D11
  205.   PE15   ------> FSMC_D12
  206.   PD8   ------> FSMC_D13
  207.   PD9   ------> FSMC_D14
  208.   PD10   ------> FSMC_D15
  209.   PD11   ------> FSMC_A16
  210.   PD12   ------> FSMC_A17
  211.   PD14   ------> FSMC_D0
  212.   PD15   ------> FSMC_D1
  213.   PG2   ------> FSMC_A12
  214.   PG3   ------> FSMC_A13
  215.   PG4   ------> FSMC_A14
  216.   PG5   ------> FSMC_A15
  217.   PD0   ------> FSMC_D2
  218.   PD1   ------> FSMC_D3
  219.   PD4   ------> FSMC_NOE
  220.   PD5   ------> FSMC_NWE
  221.   PG10   ------> FSMC_NE3
  222.   PE0   ------> FSMC_NBL0
  223.   PE1   ------> FSMC_NBL1
  224.   */

  225.   HAL_GPIO_DeInit(GPIOF, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
  226.                           |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_12|GPIO_PIN_13
  227.                           |GPIO_PIN_14|GPIO_PIN_15);

  228.   HAL_GPIO_DeInit(GPIOG, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
  229.                           |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_10);

  230.   HAL_GPIO_DeInit(GPIOE, GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10
  231.                           |GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14
  232.                           |GPIO_PIN_15|GPIO_PIN_0|GPIO_PIN_1);

  233.   HAL_GPIO_DeInit(GPIOD, GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11
  234.                           |GPIO_PIN_12|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_0
  235.                           |GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5);
  236. }

  237. /**
  238.   * 函数功能: 反初始化FSMC的IO引脚
  239.   * 输入参数: hsram:SRAM外设句柄指针
  240.   * 返 回 值: 无
  241.   * 说    明:该函数被HAL库内部函数调用
  242.   */       
  243. void HAL_SRAM_MspDeInit(SRAM_HandleTypeDef* hsram)
  244. {
  245.   HAL_FSMC_exSRAM_MspDeInit();
  246. }
  247. /******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/

复制代码



真的很不错的说

请问这个开发板大概要多少钱,我想买来学习学习

http://www.ing10bbs.com
我们论坛有淘宝链接,欢迎访问

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top