hhh_ccboy 发表于 2016-7-30 21:09:46

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

这个例程很简单,就是配置好SDRAM,然后直接用指针访问,写数,读数,判断OK就常亮LED。
但最让我迷惑的是,找遍程序都没看到FMC的GPIO的初始化部分,唯一有个C文件有它的初始化,但函数却从没被调用过(把函数名改一下再编译没报错,证明没被调用),这也太诡异了吧??

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里能找到。。。


__weak void BSP_SDRAM_MspInit(SDRAM_HandleTypeDef*hsdram, void *Params)
{
static DMA_HandleTypeDef dma_handle;
GPIO_InitTypeDef gpio_init_structure;

/* Enable FMC clock */
__HAL_RCC_FMC_CLK_ENABLE();

/* Enable chosen DMAx clock */
__DMAx_CLK_ENABLE();

/* Enable GPIOs clock */
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();
__HAL_RCC_GPIOE_CLK_ENABLE();
__HAL_RCC_GPIOF_CLK_ENABLE();
__HAL_RCC_GPIOG_CLK_ENABLE();
__HAL_RCC_GPIOH_CLK_ENABLE();

/* Common GPIO configuration */
gpio_init_structure.Mode      = GPIO_MODE_AF_PP;
gpio_init_structure.Pull      = GPIO_PULLUP;
gpio_init_structure.Speed   = GPIO_SPEED_FAST;
gpio_init_structure.Alternate = GPIO_AF12_FMC;

/* GPIOC configuration */
gpio_init_structure.Pin   = GPIO_PIN_3;
HAL_GPIO_Init(GPIOC, &gpio_init_structure);

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

/* GPIOE configuration */
gpio_init_structure.Pin   = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_7| GPIO_PIN_8 | GPIO_PIN_9 |\
                              GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 |\
                              GPIO_PIN_15;
HAL_GPIO_Init(GPIOE, &gpio_init_structure);

/* GPIOF configuration */
gpio_init_structure.Pin   = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2| GPIO_PIN_3 | GPIO_PIN_4 |\
                              GPIO_PIN_5 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 |\
                              GPIO_PIN_15;
HAL_GPIO_Init(GPIOF, &gpio_init_structure);

/* GPIOG configuration */
gpio_init_structure.Pin   = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_4| GPIO_PIN_5 | GPIO_PIN_8 |\
                              GPIO_PIN_15;
HAL_GPIO_Init(GPIOG, &gpio_init_structure);

/* GPIOH configuration */
gpio_init_structure.Pin   = GPIO_PIN_3 | GPIO_PIN_5;
HAL_GPIO_Init(GPIOH, &gpio_init_structure);

/* Configure common DMA parameters */
dma_handle.Init.Channel             = SDRAM_DMAx_CHANNEL;
dma_handle.Init.Direction         = DMA_MEMORY_TO_MEMORY;
dma_handle.Init.PeriphInc         = DMA_PINC_ENABLE;
dma_handle.Init.MemInc            = DMA_MINC_ENABLE;
dma_handle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
dma_handle.Init.MemDataAlignment    = DMA_MDATAALIGN_WORD;
dma_handle.Init.Mode                = DMA_NORMAL;
dma_handle.Init.Priority            = DMA_PRIORITY_HIGH;
dma_handle.Init.FIFOMode            = DMA_FIFOMODE_DISABLE;         
dma_handle.Init.FIFOThreshold       = DMA_FIFO_THRESHOLD_FULL;
dma_handle.Init.MemBurst            = DMA_MBURST_SINGLE;
dma_handle.Init.PeriphBurst         = DMA_PBURST_SINGLE;

dma_handle.Instance = SDRAM_DMAx_STREAM;

   /* Associate the DMA handle */
__HAL_LINKDMA(hsdram, hdma, dma_handle);

/* Deinitialize the stream for new transfer */
HAL_DMA_DeInit(&dma_handle);

/* Configure the DMA stream */
HAL_DMA_Init(&dma_handle);

/* NVIC configuration for DMA transfer complete interrupt */
HAL_NVIC_SetPriority(SDRAM_DMAx_IRQn, 0x0F, 0);
HAL_NVIC_EnableIRQ(SDRAM_DMAx_IRQn);
}

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

http://1522gs6658.iok.la:81/bibis/upload/2016_7_31_10_50_06.jpg
这是例程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文件。但问题是这个例程运行时正确的,正确的!!这才是困扰我的地方!
页: [1]
查看完整版本: F7 DISC板子的官方例程里,SDRAM部分的代码找来找去不见GPIO...