斥巨资买了一块STM32F746G-DISCO开发板,上电工作正常。应该不存在硬件或PCB布线问题。我想仔细的研究一下STM32的所有硬件接口,就开始做实验,但是就是一个SDRAM的实验就让我很崩溃。
过程如下:使用STM32CubeMX最新版6.10.0,参考BOARD Selector的设计,设置了一个简单应用。
参数于参考相同。GPIO的设置也相同,这点很重要,因为默认的GPIO和板子的设计是有出入的。需要修改PC3的引脚。
修改完成后,需要修改CLOCK的设置也要与开发板相同。
因为很多的外设没有设置,所以和参考设计有些出入。但是基本是相同的。接下来就是程序了。代码如下:
- int main(void)
- {
-
- uint16_t sdramv[1000] __attribute__ ((at(0xC0000000)));
-
-
-
-
-
- HAL_Init();
-
-
-
-
-
-
- SystemClock_Config();
-
-
-
-
-
-
- MX_GPIO_Init();
- MX_FMC_Init();
- MX_USART1_UART_Init();
-
- printf("\n\r UART Printf Example: retarget the C library printf function to the UART\n\r");
-
- sdramv[0] = 1000;
- sdramv[1] = 2000;
-
-
-
-
-
-
- printf("value=%d\n",sdramv[0]);
- printf("value=%d\n",sdramv[1]);
-
-
-
-
-
-
-
-
- while (1)
- {
-
- HAL_Delay(100);
-
- }
-
- }
-
代码主要是使用一个数组读写数据和printf输出内存数据,检验程序是否成功。
这个程序运行结果与预期相同。但是将程序修改成循环就不一样了。
- int main(void)
- {
-
- uint16_t sdramv[1000] __attribute__ ((at(0xC0000000)));
-
-
-
-
-
- HAL_Init();
-
-
-
-
-
-
- SystemClock_Config();
-
-
-
-
-
-
- MX_GPIO_Init();
- MX_FMC_Init();
- MX_USART1_UART_Init();
-
- printf("\n\r UART Printf Example: retarget the C library printf function to the UART\n\r");
-
-
-
-
- for(int16_t i=0;i<2;i++)
- {
- sdramv[i]=(int16_t)i;
- }
-
-
-
-
- for(int16_t i=0;i<2;i++)
- {
- printf("value=%d\n",sdramv[i]);
- }
-
-
-
- while (1)
- {
-
- HAL_Delay(100);
-
- }
-
- }
程序就卡在这里无法继续。程序根本就到不了循环。
程序逻辑上应该没有什么不一样的。请知道的高手给指导。
|