1517|10

6993

帖子

11

TA的资源

版主

楼主
 

【ST NUCLEO-U5A5ZJ-Q开发板测评】ADC之五 基于touchGFX LCD多彩电压表 [复制链接]

【ST NUCLEO-U5A5ZJ-Q开发板测评】ADC体验之一 

【ST NUCLEO-U5A5ZJ-Q开发板测评】ADC体验之二 

【ST NUCLEO-U5A5ZJ-Q开发板测评】ADC体验之三 

【ST NUCLEO-U5A5ZJ-Q开发板测评】移植TouchGFX实现数字时钟 

【ST NUCLEO-U5A5ZJ-Q开发板测评】ADC之四 基于touchGFX的电压表 

在上面的几篇文章中,我使用的是OLED屏他是基于sh1106的SPI接口的,只是单色屏,还有像素也非常有限,经过两天的摸索,今天综于把touchGFX移植到了ILI9488这年LCD屏上面。

在前面的基础上,工程做了如下修改:

1、修改spi的时钟极性,原来sh1106的CPOL是HIGH,而ILI9488为LOW,CPHA由2修心为1。

  2、进入touchGFX修改颜色值为RGB565,同时修改像素,如下图所示:

 

3、把ili9488的驱动,替换掉sh1106的驱动,修改TouchGFXHAL::flushFrameBuffer函数如以下代码所示:

/**
 * This function is called whenever the framework has performed a partial draw.
 *
 * @param rect The area of the screen that has been drawn, expressed in absolute coordinates.
 *
 * [url=home.php?mod=space&uid=418085]@see[/url] flushFrameBuffer().
 */
void TouchGFXHAL::flushFrameBuffer(const touchgfx::Rect& rect)
{
    // Calling parent implementation of flushFrameBuffer(const touchgfx::Rect& rect).
    //
    // To overwrite the generated implementation, omit call to parent function
    // and implemented needed functionality here.
    // Please note, HAL::flushFrameBuffer(const touchgfx::Rect& rect) must
    // be called to notify the touchgfx framework that flush has been performed.
    // To calculate he start adress of rect,
    // use advanceFrameBufferToRect(uint8_t* fbPtr, const touchgfx::Rect& rect)
    // defined in TouchGFXGeneratedHAL.cpp

    TouchGFXGeneratedHAL::flushFrameBuffer(rect);
//    const unsigned char* bitmap = (const unsigned char*) getClientFrameBuffer();
//	  SSD1306_Fill(0x00);
//	  SSD1306_DrawBitmap(0, 0, bitmap, 128, 64, 0x01);
//	  SSD1306_UpdateScreen();
    volatile uint16_t* buffer = getClientFrameBuffer()+(rect.y*320)+rect.x;
    uint16_t height,i;
    setAddrWindow(rect.x,rect.y,rect.x+rect.width-1,rect.y+rect.height-1);
	DC_DATA();
	CS_A();

	for(height=0;height<rect.height;height++)
	{
		//定义�?个buff
		uint8_t spisend_buff[rect.width*3];

		for(i=0;i<rect.width;i++)
		{
			  uint8_t r = (buffer[i] & 0xF800) >> 11;
			  uint8_t g = (buffer[i] & 0x07E0) >> 5;
			  uint8_t b = buffer[i] & 0x001F;
			spisend_buff[i*3] = (r * 255) / 31;
			spisend_buff[i*3+1] = (g * 255) / 63;
			spisend_buff[i*3+2] = (b * 255) / 31;
		}

		ILI9488_Disp.state = ILI9488_STATE_BUSY;
		HAL_SPI_Transmit_DMA(&hspi1, spisend_buff,rect.width*3);
		while(ILI9488_Disp.state == ILI9488_STATE_BUSY);
		buffer += DISPLAY_WIDTH;
	}

}

到此就完成了程序的迁移。

实现的效果如下:

 

【总结】

其实touchgfx在显示方便的移植,主要就是获得像素点,然后发送给屏。了解了这个原理之后还是比较容易的。

【感谢】

这次能成功要感谢为篇文章:基于正点原子F407开发版和SPI接口屏移植touchgfx完整教程(一)_touchgfx 正点原子-CSDN博客

 

此帖出自stm32/stm8论坛

最新回复

你这是铁了心要搞块万用表啊。   详情 回复 发表于 2024-2-23 12:48
点赞 关注
 

回复
举报

7196

帖子

2

TA的资源

版主

沙发
 

玩屏幕肯定要去学习一下Adobe Illustrator或者PS,自己画原型图~

此帖出自stm32/stm8论坛

点评

恩恩,看来学的东西太多了,如果身体有这样的高手,那多好呀!  详情 回复 发表于 2024-2-20 17:38
 
 

回复

6993

帖子

11

TA的资源

版主

板凳
 
wangerxian 发表于 2024-2-20 17:26 玩屏幕肯定要去学习一下Adobe Illustrator或者PS,自己画原型图~

恩恩,看来学的东西太多了,如果身体有这样的高手,那多好呀!

此帖出自stm32/stm8论坛

点评

哈哈,只能自己学呀~加油加油!  详情 回复 发表于 2024-2-20 17:40
 
 

回复

7196

帖子

2

TA的资源

版主

4
 
lugl4313820 发表于 2024-2-20 17:38 恩恩,看来学的东西太多了,如果身体有这样的高手,那多好呀!

哈哈,只能自己学呀~加油加油!

此帖出自stm32/stm8论坛

点评

不能学太多了,没有这么多的精力了,有些还是给专业的人去干吧!  详情 回复 发表于 2024-2-20 18:32
 
 
 

回复

6993

帖子

11

TA的资源

版主

5
 
wangerxian 发表于 2024-2-20 17:40 哈哈,只能自己学呀~加油加油!

不能学太多了,没有这么多的精力了,有些还是给专业的人去干吧!

此帖出自stm32/stm8论坛
 
 
 

回复

6495

帖子

9

TA的资源

版主

6
 

主要的疑虑就是touchgfx的控制速度与自主的控制速度谁更快  

此帖出自stm32/stm8论坛

点评

touchgfx的显示,如果屏有同步信号线,是可以做一致的,但是SPI这个屏没有。  详情 回复 发表于 2024-2-21 10:44
 
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 

回复

6993

帖子

11

TA的资源

版主

7
 
秦天qintian0303 发表于 2024-2-21 09:14 主要的疑虑就是touchgfx的控制速度与自主的控制速度谁更快  

touchgfx的显示,如果屏有同步信号线,是可以做一致的,但是SPI这个屏没有。

此帖出自stm32/stm8论坛
 
 
 

回复

286

帖子

0

TA的资源

一粒金砂(高级)

8
 

TouchGFX只有是LCD屏,都支持吗?有什么要求吗?

此帖出自stm32/stm8论坛

点评

都支持的,只要是显示屏就支持,支持i2c、spi、8080接口的都支持。  详情 回复 发表于 2024-2-22 13:32
 
个人签名

阅读改变人生

 
 

回复

6993

帖子

11

TA的资源

版主

9
 
怀揣少年梦 发表于 2024-2-22 11:28 TouchGFX只有是LCD屏,都支持吗?有什么要求吗?

都支持的,只要是显示屏就支持,支持i2c、spi、8080接口的都支持。

此帖出自stm32/stm8论坛

点评

可以可以  详情 回复 发表于 2024-2-22 17:17
 
 
 

回复

286

帖子

0

TA的资源

一粒金砂(高级)

10
 
lugl4313820 发表于 2024-2-22 13:32 都支持的,只要是显示屏就支持,支持i2c、spi、8080接口的都支持。

可以可以

此帖出自stm32/stm8论坛
 
个人签名

阅读改变人生

 
 

回复

6105

帖子

4

TA的资源

版主

11
 

你这是铁了心要搞块万用表啊。

此帖出自stm32/stm8论坛
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

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