304|2

572

帖子

0

资源

一粒金砂(高级)

【AT-START-F403A测评】+FLASH读写及图片显示 [复制链接]

本帖最后由 jinglixixi 于 2020-10-24 13:12 编辑

在AT32F403A的开发板上,为增强存储的能力,特意配置了EN25QH128这样一个辅助存储器,作为第二存储器,并可参与编程,其接口如图1所示。

相应引脚的连接关系为:

SPIF_SCK    : PB1

SPIF_CS     : PA8

SPIF_TX     : PB10= MOSI

SPIF_RX     : PB11= MISO

SPIF_HOLD_N : PB6

SPIF_WP_N   : PB7

image-20201024130715-1.png

图1 W25Q128接口

有了EN25QH128,就不再为存储器容量小二发愁了,但新的问题也提了出来,该如何消化它那,白放在那岂不是浪费?

要问当今啥最费存储容量,除了强大规模的程序,就数图库和字库,字库还好说,毕竟谁也不会天天换字库,相对讲它是固定的。但图库就不同了,千图千样,非常好存储容量。所以就用EN25QH128作图库吧。

依EN25QH128的存储容量为128Mbit,即16MB。若以320*240像素的显示屏来显示一张图片,则需要320*240*2=153600B,也就是说它能存放6MB/153600B=40张图片。

 

1. EN25QH128的读写

要实现数码相框功能,首先就要从EN25QH128的读写开始。

在厂家的例程中,就有EN25QH128读写的程序,只不过粗糙了些,被写成了一个点灯程序,即读写一致就点亮指定的LED,缺少一种应用感。

但提供的这个EN25QH128读写基础是十分重要的。

该例程的执行结果如图2和图3所示,简不简单,惊不惊奇!

image-20201024130715-2.png

图2 串口的显示结果

 

image-20201024130715-3.png

图3 LED灯的显示效果

 

为了进行透明观察,特将数据写入过程添加了串口输出处理,其效果如图4所示。

image-20201024130715-4.png

图4按地址显示数据

 

2.图片的存储

要建立图库,首先要将图片存放到EN25QH128中,方法有2种,一种是通过数组调用内存来完成,具有操作简单的特点;另一种是使用串行通讯,将图片文件分批次的传入并进行相应处理。

这里选择前者,编写程序的工作相对较小,但不足是需要多次写入才能完成。

图片存储的主要步骤为:

1)整体尺寸一幅图片的存储区,因为EN25QH128是按页进行擦除的,每页为4096字节。

一幅图片要占20页,200*200*2/4096=19页,故擦除程序如下:

(#define SPIM_PAGE_SIZE    4096)

image-20201024130715-6.png

2)将数组中的数据转存到FLASH

图片转存的程序为:

image-20201024130715-7.png

image-20201024130715-8.png

3)TFT屏驱动

TFT显示屏所占用的引脚为:

CS:PA5

REST:PA6

DC:PA7

SDI: PC7

SCK: PA9

LED: PB6

TFT屏驱动的测试效果如图5所示

image-20201024130715-9.png

图5 测试TFT屏

4)模拟读取FLASH显示图片

为保证按读取FLASH数据显示图片的正确性,先按读取FLASH 的方式改写了原图片显示函数,其验证结果如图6所示。

image-20201024130715-10.png

图6 以读取FLASH方式显示图片

5)读取FLASH显示图片

显示一页FLASH数据的程序如下:

image-20201024130715-11.png

image-20201024130715-12.png

图7 图片再现

显示单张图片的测试主程序如下:

int main(void)
{
       AT32_Board_Init();
       AT32_TFT_Init();
       AT32_key_Init();
       Delay_ms(200);
       TFT_Init();
       LCD_Clear(RED);
       BACK_COLOR=RED;
       POINT_COLOR=WHITE;
       while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pins_0)==0);
       LCD_Clear(WHITE);
       show_imageh(10,300,1);  //200*200 * 1    
       UART_Print_Init(115200);
       LCD_ShowString(10,10,"ext.flash test");
       SPIM_test();
       LCD_ShowString(10,60,"test SPIM success!");
       while(1);
}

 

赞赏

1

查看全部赞赏


回复

398

帖子

0

资源

版主

感谢分享,好像又是小伙子你~不错不错!


回复

572

帖子

0

资源

一粒金砂(高级)

w494143467 发表于 2020-10-24 21:06 感谢分享,好像又是小伙子你~不错不错!


回复
您需要登录后才可以回帖 登录 | 注册

最新文章 更多>>
    关闭
    站长推荐上一条 1/5 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表