STM32F429使用touchGFX驱动外部flash存储资源

起源

做单片机开发的时候,总会遇到单片机内存不够,图片需要存储到外部flash的情况。

开始

开发环境:
1、开发板:安富莱V6
2、显示屏:LCD7寸,480*800分辨率
3、外部flash:W25Q64,8M
4、touchgfx版本:4.20
5、stm32CubeMX版本:6.6.1
6、单片机开发:keil

准备工作

获取外部flash通过keil进行下载的算法。
我是直接使用安富莱的算法。
对于程序,我们需要做一些修改,以适应外部数据存取。
1,首先进行touchgfx修改
找到touchGFXHAL.CPP文件,修改其中内容。(需要增加flash头文件)

bool TouchGFXHAL::blockCopy(void* RESTRICT dest, const void* RESTRICT src, uint32_t numBytes)
{
//    return TouchGFXGeneratedHAL::blockCopy(dest, src, numBytes);
	uint32_t dataOffset = (uint32_t)src;
 
  //if (dataOffset >= 0x90000000 && dataOffset < 0x92000000)
	if (dataOffset >= 0x90000000 && dataOffset < 0x91000000)//如果GFX调用的地址在0x90000000~0x91000000之间执行
  {
    dataOffset =  dataOffset - 0x90000000;//dataOffset 最终等于卸载外置SPI_FLASH中的地址
    // for copying data from there.
    sf_ReadBuffer((uint8_t *)dest, dataOffset, numBytes);//读取SPI_FLASH内容
    return true;
  }
  else
  {
    // For all other addresses, just use the default implementation.
    // This is important, as blockCopy is also used for other things in the core framework.
    return HAL::blockCopy(dest, src, numBytes);
  }
}

2其次进行图片缓存,我是直接在起始screen1里面全部缓存了,这样会造成开机缓存时间比较长,所以可以缓存指定图片。
在这里插入图片描述

void Screen1View::setupScreen()
{
		percent = 0;
		Bitmap::setCache((uint16_t *)0xc0300000,0x800000,128);//
		Bitmap::cacheAll();
    Screen1ViewBase::setupScreen();
}

通过通过keil下载图片文件到外部flash通过通过keil下载图片文件到外部flash

1新建rom空间
在这里插入图片描述
2配置需要下载到外部flash文件到外部地址空间(右键点击)
在这里插入图片描述
3加载外部空间下载算法
在这里插入图片描述
4编译下载。
过程中会提示0x08000000地址空间没有下载算法,是因为我们现在还没有加载,不管。
在这里插入图片描述

下载主程序

1.加载芯片的下载算法
在这里插入图片描述
注意缓存要大
2.修改链表
在这里插入图片描述
在这里插入图片描述

LR_EROM1 0x90000000 0x01000000  {    ; load region size_region
    ER_EROM1 0x90000000 0x01000000  {  ; load address = execution address
		*.o (ExtFlashSection)
	}
}

手动增加上面的链表文件。
3.编译下载
编译会提示警告,主要是上面定义到外部存储空间的图片没有扇区匹配。
在这里插入图片描述
然后下载主程序就可以了。

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值