金牌会员
- 积分
- 2092
- 金钱
- 2092
- 注册时间
- 2017-2-11
- 在线时间
- 306 小时
|
50金钱
本帖最后由 jiangyy 于 2022-5-6 21:02 编辑
一、将下载算法的文件STM32F767_W25Q256.stldr放入到C:\Drivers\STMicroelectronics\STM32CubeIDE_1.9.0\STM32CubeIDE\plugins\com.st.stm32cube.ide.mcu.externaltools.cubeprogrammer.win32_2.0.200.202202231230\tools\bin\ExternalLoader
打开调试设置参数,如下:
二、增加外部flash(W25Q)和外部SDRAM
编写链接文件 STM32F767IGTX_FLASH.ld,代码如下:
编译结果如下:
可以看到flash和SDRAM内存空间大小已经显示出来,编译不报错,但是SDRAM使用为0,这看起来不正常,可以正常下载进去,但是板子跑不起来,仿真进入hal.initialize()就进入ardFault_Handler(void)。
- void touchgfx_init()
- {
- Bitmap::registerBitmapDatabase(BitmapDatabase::getInstance(), BitmapDatabase::getInstanceSize());
- TypedText::registerTexts(&texts);
- 文本::设置语言(0);
- FontManager::setFontProvider(&fontProvider);
- FrontendHeap& heap = FrontendHeap::getInstance();
- /*
- * 我们需要获取上面的引用来初始化前端堆。
- */
- (空)堆;
- /*
- * Initialize TouchGFX
- */
- hal.initialize();</font>
- }
复制代码 我怀疑是touchgfx初始化申请内存没成功导致,代码如下(正点原子的tougfx例程代码):
- void TouchGFXHAL::initialize()
- {
- // 调用 initialize() 的父实现。
- //
- // 要覆盖生成的实现,请省略对父函数
- 的调用 // 并在此处实现所需的功能。
- // 请注意,必须调用 HAL::initialize() 来初始化框架。
- TouchGFXGeneratedHAL::initialize();
- uint32_t帧大小 = DISPLAY_HEIGHT * DISPLAY_WIDTH * 2;
- setFrameBufferStartAddresses((void *)Bank5_SDRAM_ADDR,(void *)(Bank5_SDRAM_ADDR + frameSize),(void *)(Bank5_SDRAM_ADDR + frameSize * 2));
- setFrameRateCompensation(true);
- //图片缓存功能
- #define BITMAP_CACHE_SIZE 0x1400000
- W25QXX_Init();
- 位图::setCache((uint16_t*)(Bank5_SDRAM_ADDR+ frameSize*3),BITMAP_CACHE_SIZE,1);
- 位图::cacheAll();
- HAL_GPIO_WritePin(LCD_BL_GPIO_Port,LCD_BL_Pin,GPIO_PIN_SET);</font>
- }
复制代码 因为Bank5_SDRAM_ADDR这个宏定义指向的是((u32)(0XC0000000)),但是IDE应该是不识别这个地址段,请问论坛的哪位大神告知一下,如何更改?是不是这个问题导致的?:handshake
|
|