搜索
查看: 2611|回复: 7

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

[复制链接]

该用户从未签到

3

主题

12

帖子

0

蝴蝶豆

初级会员

最后登录
1970-1-1
发表于 2016-7-30 21:09:46 | 显示全部楼层 |阅读模式
这个例程很简单,就是配置好SDRAM,然后直接用指针访问,写数,读数,判断OK就常亮LED。
但最让我迷惑的是,找遍程序都没看到FMC的GPIO的初始化部分,唯一有个C文件有它的初始化,但函数却从没被调用过(把函数名改一下再编译没报错,证明没被调用),这也太诡异了吧??
QQ截图20160730163300.jpg
QQ截图20160730163308.jpg
回复

使用道具 举报

该用户从未签到

3

主题

12

帖子

0

蝴蝶豆

初级会员

最后登录
1970-1-1
 楼主| 发表于 2016-7-30 21:10:06 | 显示全部楼层
补充一下,例程目录里,FMC_SDRAM_DataMemory这个例程倒是有GPIO的初始化,而且是在main函数之前就初始化了的,因为这个例程是把所有的RAM定位到外部SDRAM上,所以在MAIN函数之前就已经初始化了SDRAM了。
回复 支持 反对

使用道具 举报

该用户从未签到

47

主题

3456

帖子

30

蝴蝶豆

版主

最后登录
2022-12-25
发表于 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. }
复制代码


回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

12

帖子

0

蝴蝶豆

初级会员

最后登录
1970-1-1
 楼主| 发表于 2016-7-31 10:39:51 | 显示全部楼层
Paderboy 发表于 2016-7-30 22:59
在HAL库F7驱动文件BSP里能找到。。。

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

其实包含到这个SDRAM工程里也就那么几个C文件,没有被包含的理论上跟这个工程师没有关系的吧。所以我再工程左边目录里浏览了所有的C文件,的确找不到任何初始化GPIO的函数。
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

12

帖子

0

蝴蝶豆

初级会员

最后登录
1970-1-1
 楼主| 发表于 2016-7-31 10:41:23 | 显示全部楼层
或者我有点强迫症,但这点东西找不到原因,总觉得浑身不舒服。
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

12

帖子

0

蝴蝶豆

初级会员

最后登录
1970-1-1
 楼主| 发表于 2016-7-31 10:57:18 | 显示全部楼层

这是例程SRAM的工程,这里的C文件我都找过了,有一个system_stm32f7xx.c文件里有IO初始化,但函数没被调用过(事实上这个函数要定义一个DATA_IN_ExtSDRAM宏,用于在main前调用,这是另一个程序用上的代码)。
在这个例程中,SDRAM只是初始化了SDRAM的寄存器,我甚至连总线,GPIO使能(LED除外)的代码都没找到。。。main之前调用的SystemInit函数也没有,为什么,我无法理解!!!
回复 支持 反对

使用道具 举报

该用户从未签到

60

主题

2111

帖子

31

蝴蝶豆

版主

最后登录
2023-6-21
发表于 2016-7-31 11:53:59 | 显示全部楼层
工程里面是不是缺少了 stm32f7xx_hal_msp.c 文件。

回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

12

帖子

0

蝴蝶豆

初级会员

最后登录
1970-1-1
 楼主| 发表于 2016-8-1 15:49:37 | 显示全部楼层
creep 发表于 2016-7-31 11:53
工程里面是不是缺少了 stm32f7xx_hal_msp.c 文件。

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

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-5-2 11:57 , Processed in 1.177319 second(s), 44 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表