[STM32F1] HAL库每天一例】第041例:FSMC-扩展SRAM

[复制链接]
 楼主| 亼亽 发表于 2016-6-15 08:39 | 显示全部楼层 |阅读模式
【HAL库每天一例】系列例程从今天开始持续更新。。。。。
我们将**每天至少发布一个基于YS-F1Pro开发板的HAL库例程,
该系列例程将带领大家从零开始使用HAL库,后面会持续添加模块应用例程。
同样的,我们还程序发布基于HAL库的指导文档和视频教程,欢迎持续关注,并提出改进意见。
例程下载:
资料包括程序、相关说明资料以及软件使用截图
等级不够,不给发连接(去掉下面链接空格)
百度云:pan. baidu. com/s/1jIvrqlC
(硬石YS-F1Pro开发板HAL库例程持续更新\1. 软件设计之基本裸机例程(HAL库版本)\YSF1_HAL-041. FSMC-扩展SRAM


/**
  ******************************************************************************
  *                           硬石YS-F1Pro开发板例程功能说明
  *
  *  例程名称: YSF1_HAL-041. FSMC-扩展SRAM
  *   
  ******************************************************************************
  * 说明:
  * 本例程配套硬石stm32开发板YS-F1Pro使用。
  *
  * 淘宝:
  * 论坛:ing10bbs
  * 版权归硬石嵌入式开发团队所有,请勿商用。
  ******************************************************************************
  */

【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****/

CubeMX_1.jpg
CubeMX_2.jpg
CubeMX_3.jpg
CubeMX_4.jpg
CubeMX_5.jpg


bsp_exSRAM.c文件内容
  1. /**
  2.   ******************************************************************************
  3.   * 文件名程: bsp_exSRAM.c
  4.   * 作    者: 硬石嵌入式开发团队
  5.   * 版    本: V1.0
  6.   * 编写日期: 2015-10-04
  7.   * 功    能: 液晶底层驱动函数实现
  8.   ******************************************************************************
  9.   * 说明:
  10.   * 本例程配套硬石stm32开发板YS-F1Pro使用。
  11.   *
  12.   * 淘宝:
  13.   * 论坛:ing10bbs
  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****/

main.c文件内容
  1. /**
  2.   ******************************************************************************
  3.   * 文件名程: main.c
  4.   * 作    者: 硬石嵌入式开发团队
  5.   * 版    本: V1.0
  6.   * 编写日期: 2015-10-04
  7.   * 功    能: 外部扩展SRAM读写测试
  8.   ******************************************************************************
  9.   * 说明:
  10.   * 本例程配套硬石stm32开发板YS-F1Pro使用。
  11.   *
  12.   * 淘宝:
  13.   * 论坛:ing10bbs
  14.   * 版权归硬石嵌入式开发团队所有,请勿商用。
  15.   ******************************************************************************
  16.   */
  17. /* 包含头文件 ----------------------------------------------------------------*/
  18. #include "stm32f1xx_hal.h"
  19. #include "usart/bsp_debug_usart.h"
  20. #include "exSRAM/bsp_exSRAM.h"

  21. /* 私有类型定义 --------------------------------------------------------------*/
  22. typedef enum
  23. {
  24.   FAILED = 0,
  25.   PASSED = !FAILED
  26. }
  27. TestStatus;

  28. /* 私有宏定义 ----------------------------------------------------------------*/
  29. #define BUFFER_SIZE         (1024*1024/8)           // 定义缓冲区大小
  30. #define WRITE_READ_ADDR     EXSRAM_BANK_ADDR        //
  31. /* 私有变量 ------------------------------------------------------------------*/
  32. /* 定义读写缓冲区,并且是直接定义在扩展SRAM上 */
  33. #if defined ( __CC_ARM )  // 使用Keil编译环境

  34. uint32_t aTxBuffer[BUFFER_SIZE] __attribute__((at(EXSRAM_BANK_ADDR)));
  35. uint32_t aRxBuffer[BUFFER_SIZE] __attribute__((at(EXSRAM_BANK_ADDR+1024*1024/2)));

  36. #elif defined ( __ICCARM__ ) // 使用IAR编译环境

  37. #pragma location=EXSRAM_BANK_ADDR
  38. uint32_t aTxBuffer[BUFFER_SIZE];
  39. #pragma location=(EXSRAM_BANK_ADDR+1024*1024/2)
  40. uint32_t aRxBuffer[BUFFER_SIZE];

  41. #endif

  42. /* 读写结果 */
  43. __IO uint8_t uwWriteReadStatus = 0;

  44. /* 计数值*/
  45. uint32_t uwIndex = 0;

  46. /* 扩展变量 ------------------------------------------------------------------*/
  47. /* 私有函数原形 --------------------------------------------------------------*/
  48. static void Fill_Buffer(uint32_t *pBuffer, uint32_t uwBufferLenght);
  49. static TestStatus Buffercmp(uint32_t *pBuffer1, uint32_t *pBuffer2, uint32_t BufferLength);

  50. /* 函数体 --------------------------------------------------------------------*/
  51. /**
  52.   * 函数功能: 系统时钟配置
  53.   * 输入参数: 无
  54.   * 返 回 值: 无
  55.   * 说    明: 无
  56.   */
  57. void SystemClock_Config(void)
  58. {
  59.   RCC_OscInitTypeDef RCC_OscInitStruct;
  60.   RCC_ClkInitTypeDef RCC_ClkInitStruct;

  61.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;  // 外部晶振,8MHz
  62.   RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  63.   RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
  64.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  65.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  66.   RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;  // 9倍频,得到72MHz主时钟
  67.   HAL_RCC_OscConfig(&RCC_OscInitStruct);

  68.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  69.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  70.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;       // 系统时钟:72MHz
  71.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;              // AHB时钟:72MHz
  72.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;               // APB1时钟:36MHz
  73.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;               // APB2时钟:72MHz
  74.   HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);

  75.         // HAL_RCC_GetHCLKFreq()/1000    1ms中断一次
  76.         // HAL_RCC_GetHCLKFreq()/100000         10us中断一次
  77.         // HAL_RCC_GetHCLKFreq()/1000000 1us中断一次
  78.   HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);  // 配置并启动系统滴答定时器
  79.   /* 系统滴答定时器时钟源 */
  80.   HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
  81.   /* 系统滴答定时器中断优先级配置 */
  82.   HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
  83. }

  84. /**
  85.   * 函数功能: 主函数.
  86.   * 输入参数: 无
  87.   * 返 回 值: 无
  88.   * 说    明: 无
  89.   */
  90. int main(void)
  91. {  
  92.   /* 复位所有外设,初始化Flash接口和系统滴答定时器 */
  93.   HAL_Init();
  94.   /* 配置系统时钟 */
  95.   SystemClock_Config();
  96.   
  97.   MX_FSMC_exSRAM_Init();

  98.   /* 初始化串口并配置串口中断优先级 */
  99.   MX_DEBUG_USART_Init();
  100.   
  101.   printf ( "FSMC 扩展SRAM 读写测试\n" );         
  102.        
  103.          /* 写测试:往缓冲区写入数据*/
  104.   Fill_Buffer(aTxBuffer, BUFFER_SIZE);

  105.   /* 拷贝数据:扩展SRAM拷贝到扩展SRAM */
  106.   for(uwIndex = 0; uwIndex < BUFFER_SIZE; uwIndex++)
  107.   {
  108.     aRxBuffer[uwIndex] = *(__IO uint32_t *)(WRITE_READ_ADDR + 4 * uwIndex);
  109.     if(uwIndex%4096==0)
  110.       printf("aRxBuffer[%d]=0x%08X\n",uwIndex,aRxBuffer[uwIndex]);
  111.   }

  112.   /* 数据比较 */
  113.   uwWriteReadStatus = Buffercmp(aTxBuffer, aRxBuffer, BUFFER_SIZE);
  114.   if(uwWriteReadStatus != PASSED)
  115.   {
  116.     /* KO */
  117.     printf("扩展SRAM读写测试OK!!\n");
  118.   }
  119.   else
  120.   {
  121.     /* Fail */
  122.     printf("扩展SRAM读写测试失败!!\n");
  123.   }
  124.   
  125.   /* 无限循环 */
  126.   while (1)
  127.   {

  128.   }
  129. }

  130. /**
  131.   * 函数功能: 填充缓冲区
  132.   * 输入参数: pBuffer:缓冲区指针
  133.   * 输入参数: uwBufferLenght:缓冲区大小
  134.   * 返 回 值: 无
  135.   * 说    明: 无
  136.   */
  137. static void Fill_Buffer(uint32_t *pBuffer, uint32_t uwBufferLenght)
  138. {
  139.   uint32_t tmpIndex = 0;

  140.   /* 为缓冲区填入不同的值 */
  141.   for (tmpIndex = 0; tmpIndex < uwBufferLenght; tmpIndex++)
  142.   {
  143.     pBuffer[tmpIndex] = tmpIndex;
  144.     if(tmpIndex%4096==0)
  145.       printf("pBuffer[%d]=0x%08X\n",tmpIndex,pBuffer[tmpIndex]);
  146.   }
  147. }

  148. /**
  149.   * 函数功能: 对比两个缓冲区内容是否完全一样
  150.   * 输入参数: pBuffer1:缓冲区1指针
  151.   * 输入参数: pBuffer2:缓冲区2指针
  152.   * 输入参数: BufferLength:缓冲区大小
  153.   * 返 回 值: 比较结果:
  154.   *           PASSED:缓冲区内容完全一致
  155.   *           FAILED:缓冲区内容至少存在一个不一致
  156.   * 说    明: 无
  157.   */
  158. static TestStatus Buffercmp(uint32_t *pBuffer1, uint32_t *pBuffer2, uint32_t BufferLength)
  159. {
  160.   while (BufferLength--)
  161.   {
  162.     if (*pBuffer1 != *pBuffer2)
  163.     {
  164.       return FAILED;
  165.     }
  166.     pBuffer1++;
  167.     pBuffer2++;
  168.   }
  169.   return PASSED;
  170. }

  171. /******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/

串口调试助手截图.jpg

mmuuss586 发表于 2016-6-15 16:50 | 显示全部楼层

谢谢分享;
Coffey1001 发表于 2019-7-7 18:47 | 显示全部楼层
刚好用到,但是还是有问题,LCD无显示。不知道为何?
Coffey1001 发表于 2019-7-7 20:56 | 显示全部楼层
正好用到,试试
您需要登录后才可以回帖 登录 | 注册

本版积分规则

122

主题

216

帖子

48

粉丝
快速回复 在线客服 返回列表 返回顶部

122

主题

216

帖子

48

粉丝
快速回复 在线客服 返回列表 返回顶部