F7 DISC板子的官方例程里,SDRAM部分的代码找来找去不见GPIO...
这个例程很简单,就是配置好SDRAM,然后直接用指针访问,写数,读数,判断OK就常亮LED。但最让我迷惑的是,找遍程序都没看到FMC的GPIO的初始化部分,唯一有个C文件有它的初始化,但函数却从没被调用过(把函数名改一下再编译没报错,证明没被调用),这也太诡异了吧??
补充一下,例程目录里,FMC_SDRAM_DataMemory这个例程倒是有GPIO的初始化,而且是在main函数之前就初始化了的,因为这个例程是把所有的RAM定位到外部SDRAM上,所以在MAIN函数之前就已经初始化了SDRAM了。 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);
}
Paderboy 发表于 2016-7-30 22:59
在HAL库F7驱动文件BSP里能找到。。。
首先,你说的这个文件并没有被包含到工程里,其次,我把这个文件的函数改了一下名字(文件是只读的,要取消只读属性),然后重新编译(build all),工程依旧没有报任何错误。
其实包含到这个SDRAM工程里也就那么几个C文件,没有被包含的理论上跟这个工程师没有关系的吧。所以我再工程左边目录里浏览了所有的C文件,的确找不到任何初始化GPIO的函数。 或者我有点强迫症,但这点东西找不到原因,总觉得浑身不舒服。 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函数也没有,为什么,我无法理解!!!:'(:'(:'( 工程里面是不是缺少了 stm32f7xx_hal_msp.c 文件。
creep 发表于 2016-7-31 11:53
工程里面是不是缺少了 stm32f7xx_hal_msp.c 文件。
这个其实是官方历程,的确没有你说的msp文件。但问题是这个例程运行时正确的,正确的!!这才是困扰我的地方!
页:
[1]