你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

F7 DISC板子的官方例程里,SDRAM部分的代码找来找去不见GPIO...

[复制链接]
hhh_ccboy 提问时间:2016-7-30 21:09 /
这个例程很简单,就是配置好SDRAM,然后直接用指针访问,写数,读数,判断OK就常亮LED。
但最让我迷惑的是,找遍程序都没看到FMC的GPIO的初始化部分,唯一有个C文件有它的初始化,但函数却从没被调用过(把函数名改一下再编译没报错,证明没被调用),这也太诡异了吧??
QQ截图20160730163300.jpg
QQ截图20160730163308.jpg
收藏 评论7 发布时间:2016-7-30 21:09

举报

7个回答
hhh_ccboy 回答时间:2016-7-30 21:10:06
补充一下,例程目录里,FMC_SDRAM_DataMemory这个例程倒是有GPIO的初始化,而且是在main函数之前就初始化了的,因为这个例程是把所有的RAM定位到外部SDRAM上,所以在MAIN函数之前就已经初始化了SDRAM了。
Paderboy 回答时间:2016-7-30 22:59:59
hhh_ccboy 发表于 2016-7-30 21:10
补充一下,例程目录里,FMC_SDRAM_DataMemory这个例程倒是有GPIO的初始化,而且是在main函数之前就初始化了 ...


在HAL库F7驱动文件BSP里能找到。。。
QQ截图20160730225708.png

  1. __weak void BSP_SDRAM_MspInit(SDRAM_HandleTypeDef  *hsdram, void *Params)
  2. {  
  3.   static DMA_HandleTypeDef dma_handle;
  4.   GPIO_InitTypeDef gpio_init_structure;
  5.   
  6.   /* Enable FMC clock */
  7.   __HAL_RCC_FMC_CLK_ENABLE();
  8.   
  9.   /* Enable chosen DMAx clock */
  10.   __DMAx_CLK_ENABLE();

  11.   /* Enable GPIOs clock */
  12.   __HAL_RCC_GPIOC_CLK_ENABLE();
  13.   __HAL_RCC_GPIOD_CLK_ENABLE();
  14.   __HAL_RCC_GPIOE_CLK_ENABLE();
  15.   __HAL_RCC_GPIOF_CLK_ENABLE();
  16.   __HAL_RCC_GPIOG_CLK_ENABLE();
  17.   __HAL_RCC_GPIOH_CLK_ENABLE();
  18.   
  19.   /* Common GPIO configuration */
  20.   gpio_init_structure.Mode      = GPIO_MODE_AF_PP;
  21.   gpio_init_structure.Pull      = GPIO_PULLUP;
  22.   gpio_init_structure.Speed     = GPIO_SPEED_FAST;
  23.   gpio_init_structure.Alternate = GPIO_AF12_FMC;
  24.   
  25.   /* GPIOC configuration */
  26.   gpio_init_structure.Pin   = GPIO_PIN_3;
  27.   HAL_GPIO_Init(GPIOC, &gpio_init_structure);

  28.   /* GPIOD configuration */
  29.   gpio_init_structure.Pin   = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_8 | GPIO_PIN_9 |
  30.                               GPIO_PIN_10 | GPIO_PIN_14 | GPIO_PIN_15;
  31.   HAL_GPIO_Init(GPIOD, &gpio_init_structure);

  32.   /* GPIOE configuration */  
  33.   gpio_init_structure.Pin   = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_7| GPIO_PIN_8 | GPIO_PIN_9 |\
  34.                               GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 |\
  35.                               GPIO_PIN_15;
  36.   HAL_GPIO_Init(GPIOE, &gpio_init_structure);
  37.   
  38.   /* GPIOF configuration */  
  39.   gpio_init_structure.Pin   = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2| GPIO_PIN_3 | GPIO_PIN_4 |\
  40.                               GPIO_PIN_5 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 |\
  41.                               GPIO_PIN_15;
  42.   HAL_GPIO_Init(GPIOF, &gpio_init_structure);
  43.   
  44.   /* GPIOG configuration */  
  45.   gpio_init_structure.Pin   = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_4| GPIO_PIN_5 | GPIO_PIN_8 |\
  46.                               GPIO_PIN_15;
  47.   HAL_GPIO_Init(GPIOG, &gpio_init_structure);

  48.   /* GPIOH configuration */  
  49.   gpio_init_structure.Pin   = GPIO_PIN_3 | GPIO_PIN_5;
  50.   HAL_GPIO_Init(GPIOH, &gpio_init_structure);
  51.   
  52.   /* Configure common DMA parameters */
  53.   dma_handle.Init.Channel             = SDRAM_DMAx_CHANNEL;
  54.   dma_handle.Init.Direction           = DMA_MEMORY_TO_MEMORY;
  55.   dma_handle.Init.PeriphInc           = DMA_PINC_ENABLE;
  56.   dma_handle.Init.MemInc              = DMA_MINC_ENABLE;
  57.   dma_handle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
  58.   dma_handle.Init.MemDataAlignment    = DMA_MDATAALIGN_WORD;
  59.   dma_handle.Init.Mode                = DMA_NORMAL;
  60.   dma_handle.Init.Priority            = DMA_PRIORITY_HIGH;
  61.   dma_handle.Init.FIFOMode            = DMA_FIFOMODE_DISABLE;         
  62.   dma_handle.Init.FIFOThreshold       = DMA_FIFO_THRESHOLD_FULL;
  63.   dma_handle.Init.MemBurst            = DMA_MBURST_SINGLE;
  64.   dma_handle.Init.PeriphBurst         = DMA_PBURST_SINGLE;
  65.   
  66.   dma_handle.Instance = SDRAM_DMAx_STREAM;
  67.   
  68.    /* Associate the DMA handle */
  69.   __HAL_LINKDMA(hsdram, hdma, dma_handle);
  70.   
  71.   /* Deinitialize the stream for new transfer */
  72.   HAL_DMA_DeInit(&dma_handle);
  73.   
  74.   /* Configure the DMA stream */
  75.   HAL_DMA_Init(&dma_handle);
  76.   
  77.   /* NVIC configuration for DMA transfer complete interrupt */
  78.   HAL_NVIC_SetPriority(SDRAM_DMAx_IRQn, 0x0F, 0);
  79.   HAL_NVIC_EnableIRQ(SDRAM_DMAx_IRQn);
  80. }
复制代码


hhh_ccboy 回答时间:2016-7-31 10:39:51
Paderboy 发表于 2016-7-30 22:59
在HAL库F7驱动文件BSP里能找到。。。

首先,你说的这个文件并没有被包含到工程里,其次,我把这个文件的函数改了一下名字(文件是只读的,要取消只读属性),然后重新编译(build all),工程依旧没有报任何错误。

其实包含到这个SDRAM工程里也就那么几个C文件,没有被包含的理论上跟这个工程师没有关系的吧。所以我再工程左边目录里浏览了所有的C文件,的确找不到任何初始化GPIO的函数。
hhh_ccboy 回答时间:2016-7-31 10:41:23
或者我有点强迫症,但这点东西找不到原因,总觉得浑身不舒服。
hhh_ccboy 回答时间:2016-7-31 10:57:18

这是例程SRAM的工程,这里的C文件我都找过了,有一个system_stm32f7xx.c文件里有IO初始化,但函数没被调用过(事实上这个函数要定义一个DATA_IN_ExtSDRAM宏,用于在main前调用,这是另一个程序用上的代码)。
在这个例程中,SDRAM只是初始化了SDRAM的寄存器,我甚至连总线,GPIO使能(LED除外)的代码都没找到。。。main之前调用的SystemInit函数也没有,为什么,我无法理解!!!
creep 回答时间:2016-7-31 11:53:59
工程里面是不是缺少了 stm32f7xx_hal_msp.c 文件。

hhh_ccboy 回答时间:2016-8-1 15:49:37
creep 发表于 2016-7-31 11:53
工程里面是不是缺少了 stm32f7xx_hal_msp.c 文件。

这个其实是官方历程,的确没有你说的msp文件。但问题是这个例程运行时正确的,正确的!!这才是困扰我的地方!

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版