OpenEdv-开源电子网

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

关于STM32F103发送OV7670的RGB565格式,上位机接收之后处理并存储为BMP

[复制链接]

1

主题

7

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2021-7-13
在线时间
4 小时
发表于 2022-4-18 10:16:21 | 显示全部楼层 |阅读模式
10金钱
描述问题如下:ov7670发送的是RGB565格式,比如发送的图片大小为240*320  也就是76800个像素,是153600个字节,STM32F103发送格式是这样的:
  1. for(j=0;j<76800;j++)
  2.                 {
  3.   OV7670_RCK_L;
  4.   color=GPIOC->IDR&0XFF;        //读数据

  5.   UART4->DR = GPIOC->IDR&0XFF;;
  6.   while((UART4->SR&0X40)==0);  
  7.   OV7670_RCK_H;
  8.   color<<=8;  
  9.   OV7670_RCK_L;
  10.   color|=GPIOC->IDR&0XFF;        //读数据
  11.                
  12.   UART4->DR =GPIOC->IDR&0XFF;;
  13.   while((UART4->SR&0X40)==0);  
  14.                        
  15.   OV7670_RCK_H;
  16.                        
  17.                 }   
复制代码
上位机也确实能够接收153600个字节,下面是上位机处理RGB565格式数据的代码:
  1. R := uint8(RGB&0xf800)>>11
  2.                                                 G := uint8((RGB&0x07e0)>>5)
  3.                                                 B := uint8(RGB & 0x001f)
  4.                                                 B = B << 3
  5.                                                 G = G << 2
  6.                                                 R = R << 3
复制代码
其中RGB为一个像素,也就是高低两个字节。
写入顺序为 B   G   R

然后这是BMP文件信息部分:
  1. new_bmp_head.FType = 0x4D42
  2.                                         new_bmp_head.FSize = width*height*int32(3) + 54
  3.                                         new_bmp_head.FOffBits = 54
  4.                                         new_bmp_head.FReserved1 = 0
  5.                                         new_bmp_head.FReserved2 = 0
复制代码


但是转换出来的最终结果是这样的:

转换后的BMP图片

转换后的BMP图片



请问是那个环节出问题了呢?



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

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2021-7-13
在线时间
4 小时
 楼主| 发表于 2022-4-18 10:18:52 | 显示全部楼层
由于编辑问题,导致BMP信息头未显示完全,补充如下:
  1.                               new_bmp_head.FType = 0x4D42
  2.                                         new_bmp_head.FSize = width*height*int32(3) + 54
  3.                                         new_bmp_head.FOffBits = 54
  4.                                         new_bmp_head.FReserved1 = 0
  5.                                         new_bmp_head.FReserved2 = 0

  6.                                         new_bmp_infohead.ISize = 40
  7.                                         new_bmp_infohead.IWidth = width
  8.                                         new_bmp_infohead.IHeight = height
  9.                                         new_bmp_infohead.IBitCount = 24
  10.                                         new_bmp_infohead.IPlanes = 1
  11.                                         new_bmp_infohead.ICompression = 0
  12.                                         new_bmp_infohead.ISizeImage = width * height * int32(3)
  13.                                         new_bmp_infohead.IClrUsed = 0
  14.                                         new_bmp_infohead.IClrImportant = 0
  15.                                         new_bmp_infohead.IXPelsPerMeter = 0
  16.                                         new_bmp_infohead.IYPelsPerMeter = 0                        
复制代码
回复

使用道具 举报

2

主题

582

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2690
金钱
2690
注册时间
2014-5-23
在线时间
188 小时
发表于 2022-4-18 10:35:27 | 显示全部楼层
电脑端文件是低8位在前,565的偏移位好像也不对
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2021-7-13
在线时间
4 小时
 楼主| 发表于 2022-4-18 10:41:00 | 显示全部楼层
awsawzj 发表于 2022-4-18 10:35
电脑端文件是低8位在前,565的偏移位好像也不对

这个是转24位BMP,不用调色板啊那些。但是我用你说的调换字节顺序处理之后,也是不行的。
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2023-4-17
在线时间
1 小时
发表于 2023-5-4 12:39:49 | 显示全部楼层
遥远的她 发表于 2022-4-18 10:41
这个是转24位BMP,不用调色板啊那些。但是我用你说的调换字节顺序处理之后,也是不行的。

我想问一下,您现在解决这个问题了吗?,我也遇到了这个问题,
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 09:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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