OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 17218|回复: 6

关于RGB888和RGB565每个像素包含几个字节的疑问

[复制链接]

38

主题

195

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1171
金钱
1171
注册时间
2015-11-9
在线时间
248 小时
发表于 2016-10-31 13:52:11 | 显示全部楼层 |阅读模式
1金钱
原子官方手册上的代码:
#if LCD_PIXFORMAT==LCD_PIXFORMAT_ARGB8888||LCD_PIXFORMAT==LCD_PIXFORMAT_RGB888
        ltdc_framebuf[0]=(u32*)&ltdc_lcd_framebuf;
        lcdltdc.pixsize=4;                                //每个像素4字节
#else
    lcdltdc.pixsize=2;                                //每个像素2字节
        ltdc_framebuf[0]=(u32*)&ltdc_lcd_framebuf;
#endif        


对于RGB565格式,很好理解:16位,所以每个像素是2字节。
RGB8888,也很好理解,32位,自然每个像素是4字节。
但是RGB888,,24位,不应该是每个像素是3字节吗????而上面原子的代码,RGB888也是4字节,是什么原因???求解释

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-10-31 14:29:47 | 显示全部楼层
其实在ASCII设计时char是占7-bit的,为什么现在char占8bit(1byte)你不觉得有问题?
很简单啊,单片机中简单数据类型有char,short,int分别占8bit(1byte),16bit(2bytes),32bit(4bytes),

代码这样写只是想简单地用一个变量来表示一个像素,至于32bit中肯定有8bit没有用,浪费了。

再看看手册中是怎么说的,,(以NT35510例)
1.png


2.png

LCD使用8080并口总线传输数据,总线位宽是16-bit
所以RGB888格式的一个像素是需要分两次来传输,
为了防止总线浪费,其将两个像素紧密排列可以实现只需三个时钟传输两个像素。


上面的是写入,这个芯片对读取可能稍微慢了些:
一个像素固定俩时钟,,,

3.png
坚决不用寄存器,拒绝重复造轮子。
回复

使用道具 举报

38

主题

195

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1171
金钱
1171
注册时间
2015-11-9
在线时间
248 小时
 楼主| 发表于 2016-10-31 15:00:32 | 显示全部楼层
非常感谢你的仔细解答。学到不少。
但是我是要用这个LCD控制器控制其他器件,不是控制LCD
回复

使用道具 举报

38

主题

195

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1171
金钱
1171
注册时间
2015-11-9
在线时间
248 小时
 楼主| 发表于 2016-10-31 15:01:33 | 显示全部楼层

非常感谢你的仔细解答。学到不少。
但是我是要用这个LCD控制器控制其他器件,不是控制LCD。
所以要知道RGB888一个像素点准确占用几个字节,应该是3个吧
回复

使用道具 举报

38

主题

195

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1171
金钱
1171
注册时间
2015-11-9
在线时间
248 小时
 楼主| 发表于 2016-10-31 15:02:26 | 显示全部楼层
xkwy 发表于 2016-10-31 14:29
其实在ASCII设计时char是占7-bit的,为什么现在char占8bit(1byte)你不觉得有问题?
很简单啊,单片机中简 ...

非常感谢你的仔细解答。学到不少。
但是我是要用这个LCD控制器控制其他器件,不是控制LCD。
所以要知道RGB888一个像素点准确占用几个字节,应该是3个吧
回复

使用道具 举报

38

主题

195

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1171
金钱
1171
注册时间
2015-11-9
在线时间
248 小时
 楼主| 发表于 2016-10-31 15:40:12 | 显示全部楼层
xkwy 发表于 2016-10-31 14:29
其实在ASCII设计时char是占7-bit的,为什么现在char占8bit(1byte)你不觉得有问题?
很简单啊,单片机中简 ...

你好,我现在改成RGB888,每个像素3个字节,能正常显示。但是在写缓冲区的时间内显示是乱的(像老式电视机没有信号时的那样),只有等缓冲区的数据全部写完之后,突然就显示正常了。你能分析大概是什么原因吗
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2021-1-5
在线时间
1 小时
发表于 2021-1-29 14:52:36 | 显示全部楼层
shibinjie 发表于 2016-10-31 15:40
你好,我现在改成RGB888,每个像素3个字节,能正常显示。但是在写缓冲区的时间内显示是乱的(像老式电视 ...

你可以试试把LTDC的频率降低一点,你说的情况我也遇到过,后来发现是跟频率有关.
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-28 21:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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