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

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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版