找回密码
 立即注册
楼主: 浦江一水

基于AI8051U_V1.2实验箱_学习实验之驱动TFT彩屏显示全屏图片(QSPI_DMA_P2P)(已优化)

[复制链接]
  • 打卡等级:以坛为家III
  • 打卡总天数:603
  • 最近打卡:2025-08-23 08:04:16

31

主题

360

回帖

4172

积分

荣誉版主

积分
4172
发表于 2025-3-4 09:02:41 | 显示全部楼层
电子*** 发表于 2025-3-3 22:16
QSPI_DMA_P2P_UART模式(不是CDC模式)的例程可以分享一下吗,我刚下载的本帖的链接资料,里面 ...

本帖的链接并没有改变, 还是原来CDC模式的.

如果对UART方式有兴趣,可以的, 稍后可在本贴此后下载.
现在需要整理一下, 还要补充一些说明....
稍等....
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:603
  • 最近打卡:2025-08-23 08:04:16

31

主题

360

回帖

4172

积分

荣誉版主

积分
4172
发表于 2025-3-4 09:39:46 | 显示全部楼层
改用串口1下载刷图方式的实验:
串口1连接.jpg

02-QSPI-TFT_DMA_P2P_ILI9341_UART1.rar (244.69 KB, 下载次数: 95)


功能说明:

本实验基于AI8051U_V1.2实验箱。
本实验在官方例程"72.4-QSPI-TFT_DMA_P2P外设到外设_显示视频级动画效果程序-ILI9341"的基础上改变而来,

使用串口通讯方式下载刷新图片:
1,建立下拉菜单,启用键盘操作;(上下键选项,OK键执行各功能);

2,实现浏览翻阅静态图片功能,  (上下键切后翻阅全屏图片显示,OK键退出,返回主菜单);
3,保留原例程功能:动态图片循环显示,类似动画视频;(用OK键退出,返回主菜单);
   下载新图片后,无需重启,即可播放动画;
4,不必重启即可进入下载刷新Flash存储器图片;(选择“刷新图片”项,OK进入,OK退出)。
5,使用STC_USB-TTL或者普通USB转TTL模块,连接PC机与实验箱的USB_Link口.

上位机使用Ver6.94U(以上)版软件-串口Flash编辑器-执行“打开多文件”操作。

关于W25Q128存储器读写,以及下载刷新图片操作(为配合上位机通讯协议),完全使用官方例程代码。
显示时QSPI读取Flash图片数据,通过P2P DMA直接发送数据到LCM显示图片。

QSPI一次读取Flash与LCM显示DMA的数据长度设置51200字节,一幅全屏图片需要DMA三次传输完成。
程序下载时, 建议选择时钟 35MHz (较40MHz显示动画稳定)



回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-03-14 18:28:41

2

主题

22

回帖

322

积分

中级会员

积分
322
发表于 2025-3-4 10:00:37 | 显示全部楼层
浦江*** 发表于 2025-3-4 09:39
改用串口1下载刷图方式的实验:

感谢感谢,我在研究学习一下,可能还是要采用普通串口模式来用了,CDC还没有琢磨透。
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-03-14 18:28:41

2

主题

22

回帖

322

积分

中级会员

积分
322
发表于 2025-3-13 23:08:14 | 显示全部楼层
蒲哥,我现在遇到一个问题,想向您请教一下:
  

点评

谢谢回复和提问. 对于AI8051U的RTC, 目前还没有实验和深入体会, 日后抽空实验后再作交流。 根据本人以往研发经历和印象。51单片机所做的项目,用到时钟时,一般都是外挂时钟芯片的。后来使用STM32F1xx系列芯片做  详情 回复 发表于 2025-3-14 15:31
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:603
  • 最近打卡:2025-08-23 08:04:16

31

主题

360

回帖

4172

积分

荣誉版主

积分
4172
发表于 2025-3-14 15:31:18 | 显示全部楼层
电子*** 发表于 2025-3-13 23:08
蒲哥,我现在遇到一个问题,想向您请教一下:
   我因为要使用AI8051的RTC时钟功能,由于这个单片机没有纽扣 ...

谢谢回复和提问.

对于AI8051U的RTC, 目前还没有实验和深入体会, 日后抽空实验后再作交流。

根据本人以往研发经历和印象。51单片机所做的项目,用到时钟时,一般都是外挂时钟芯片的。后来使用STM32F1xx系列芯片做项目,因其自身带有RTC功能,虽然免去了外挂时钟芯片。不过STM32F1xx系列芯片内部RTC是采用一个计数器计时,要通过软件计算,达到年月日时分秒的日期功能。在这一点上,AI8051U是略胜一筹的。而现在大多是在使用STM32F4xx系列芯片做项目,其RTC的年月日时分秒功能比较完备,应该是不逊于AI8051U的。其芯片上自有VBAT引脚,由电池独立供电为其维持时钟,因此没有遇到过你所说的情况。

从你的表达来看: RTC时钟数据被归零,估计是低电压(负载增加而电压被拉低)被复位的原因,目前还没看到资料表明与QSPI的使用有关。我的认知感觉“配置为推挽输出且输出为0”应该是增加功耗的,而“配置为开漏输入且输出置1”才是减少功耗的。另外,启用了QSPI,其SCK引脚就不是你所控制的了。有时间再看看坛子里的RTC版块,看是否有相关讨论。
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-03-14 18:28:41

2

主题

22

回帖

322

积分

中级会员

积分
322
发表于 2025-3-14 18:28:41 | 显示全部楼层
浦江*** 发表于 2025-3-14 15:31
谢谢回复和提问.

对于AI8051U的RTC, 目前还没有实验和深入体会, 日后抽空实验后再作交流。

感谢感谢,问题解决了。 是电源问题,唤醒后启动液晶屏和其他外设瞬间把MCU电压拉胯了。
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:126
  • 最近打卡:2025-08-21 09:09:58
已绑定手机

5

主题

54

回帖

426

积分

中级会员

积分
426
发表于 2025-7-31 17:27:09 | 显示全部楼层
请问下我的是竖屏的240X320的分辨率,下面部分没有画到显示,这个是改哪里呢,我换320跟240互换也没起到作用
截图202507311726223069.jpg

点评

这是一个关于屏幕旋转显示的问题. 不知道你"我换320跟240互换也没起到作用"是怎样换的? 一般而言, 先看显示屏的初始化函数中,关于X方向和Y方向的设置, 这就决定了显示屏坐标与内存地址的扫描关系. 其次要注意各显  详情 回复 发表于 2025-8-1 11:02
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:603
  • 最近打卡:2025-08-23 08:04:16

31

主题

360

回帖

4172

积分

荣誉版主

积分
4172
发表于 2025-8-1 11:02:27 | 显示全部楼层
toms*** 发表于 2025-7-31 17:27
请问下我的是竖屏的240X320的分辨率,下面部分没有画到显示,这个是改哪里呢,我换320跟240互换也没起到作 ...

这是一个关于屏幕旋转显示的问题.
不知道你"我换320跟240互换也没起到作用"是怎样换的?

一般而言, 先看显示屏的初始化函数中,关于X方向和Y方向的设置, 这就决定了显示屏坐标与内存地址的扫描关系. 其次要注意各显示函数使用时的坐标范围.

就你所提供的截图看, 你是在竖屏的方式下, 实验了本实验的程序.
那么, 当执行清屏函数时, 原程序X方向0...319, Y方向0...239, 现在用在竖屏,X方向0...239, Y方向0...319, 所以扫描不到Y方向的240...319范围, 所以下面部分就是原始杂乱数据...花屏了.
显然,要改变显示屏初始化函数中,关于屏方向坐标的设置了.

在我的程序源码中, 是有关于屏幕转换预设宏的:
在LCD9341.H文件中:
//支持横竖屏快速定义切换
#define LCD_DIR  3    //液晶屏顺时针旋转方向0:0度旋转,1:90度旋转,2:180度旋转,3:270度旋转
理论上讲, 只要改变为
#define LCD_DIR  0
或者      
#define LCD_DIR  2
就可以让屏程序竖屏显示了.
但是就本实验而言, 并非可以简单地使用, 而是要对具体的图像定位等着做相应的改变才行, 否则有些显示还会失真的, 比如,原先的图片数据是按横向扫描的, 当屏幕旋转后, 图像就乱了.因此要重新制作图像数据.
因此, 给两个建议选择:
一是改为横屏显示, 实验本实验程序.
二是确定竖屏显示,其它有关显示函数以及具体坐标定位作相应修改.
另外,要注意, 市售的显示屏模块,或是经过厂商二次开发的, 即使同型号驱动,也可能存在一些差异, 这就要细看对应手册了. 要弄清楚显示屏内寄存器各位的作用.
这方面, 可参考本实验程序中LCD_Init()的源码. 基本上每行代码都有注释的,
可特别关注:
LCD_WR_CMD(0x36); .....
LCD_WR_CMD(0x2A); .....
LCD_WR_CMD(0x2B); .....
等几行的设置...

预祝实验顺利.
回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-8-23 22:24 , Processed in 0.132609 second(s), 95 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表