打印
[其他ST产品]

OV摄像头数据串口输出异常

[复制链接]
364|38
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cr315|  楼主 | 2023-1-9 09:10 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
使用STM43F429驱动OV5640摄像头模块,目前在尝试通过串口输出摄像头数据,遇到2个问题1.每次得到的jpeg数据长度差别很大
2.上位机软件没有图像显示
右图中数据跟JPEG文件的头格式已经非常接近了,感觉像是因为有误码



目前开发主要参考了正点原子探索者的源码“(库函数版本,适合探索者STM32F4开发板)扩展实验15A OV5640摄像头实验”,主要处理流程如下,我想请教一下,我应该重点排查哪些地方。
①DCMI帧中断触发后,启动jpeg_data_process;
②jpeg_data_process中,根据当前数据状态,处理标志位jpeg_data_ok
  • //处理JPEG数据,这个函数较为关键
  • //当采集完一帧JPEG数据后,调用此函数,切换JPEG BUF.开始下一帧采集.
  • void jpeg_data_process(void)
  • {
  •         if(jpeg_data_ok==0)        //jpeg数据还未采集完?
  •         {
  •                 DMA_Cmd(DMA2_Stream1, DISABLE);        //停止当前传输
  •                 while (DMA_GetCmdStatus(DMA2_Stream1) != DISABLE){}//等待DMA2_Stream1可配置
  •                 jpeg_data_len=jpeg_buf_size-DMA_GetCurrDataCounter(DMA2_Stream1);//得到此次数据传输的长度
  •                 jpeg_data_ok=1;                                 //标记JPEG数据采集完按成,等待其他函数处理
  •         }
  •         if(jpeg_data_ok==2)        //上一次的jpeg数据已经被处理了
  •         {
  •                 DMA2_Stream1->NDTR=jpeg_buf_size;                //更新DMA流结构体中数据量
  •                 DMA_SetCurrDataCounter(DMA2_Stream1,jpeg_buf_size);//传输长度为jpeg_buf_size*4字节
  •                 DMA_Cmd(DMA2_Stream1, ENABLE);                        //重新传输
  •                 jpeg_data_ok=0;                                                        //标记数据未采集
  •         }
  • }

复制代码

③主函数中:
jpeg_data_ok=1 时,串口输出数据

  • //***************OV数据串口输出测试代码*********************
  •                 if(jpeg_data_ok==1)        //已经采集完一帧图像了
  •                 {
  •                         OV_UART_p=(u8*)jpeg_buf;
  •                         CAMERA_DEBUG("jpeg_data_len:%d\r\n",jpeg_data_len*4);//
  •                         //LCD_ShowString(30,210,210,16,16,"Sending JPEG data..."); //提示正在传输数据
  •                         jpglen=0;        //设置jpg文件大小为0
  •                         headok=0;        //清除jpg头标记
  •                         for(OV_i=0;OV_i<jpeg_data_len*4;OV_i++)//查找0XFF,0XD8和0XFF,0XD9,获取jpg文件大小
  •                         {
  •                                 if((OV_UART_p[OV_i]==0XFF)&&(OV_UART_p[OV_i+1]==0XD8))//找到FF D8
  •                                 {
  •                                         jpgstart=OV_i;
  •                                         headok=1;        //标记找到jpg头(FF D8)
  • CAMERA_DEBUG("已匹配到jpg头标志FFD8\r\n");//调试输出
  •                                 }
  •                                 if((OV_UART_p[OV_i]==0XFF)&&(OV_UART_p[OV_i+1]==0XD9)&&headok)//找到头以后,再找FF D9
  •                                 {
  • CAMERA_DEBUG("已匹配到jpg尾标志FFD9\r\n");//调试输出
  •                                         jpglen=OV_i-jpgstart+2;
  •                                         break;
  •                                 }
  •                         }
  •                         if(jpglen)        //正常的jpeg数据
  •                         {
  • CAMERA_DEBUG("jpg文件数据长为:%d\r\n",jpglen);//
  •                                 OV_UART_p+=jpgstart;                        //偏移到0XFF,0XD8处(头)
  •                                 for(OV_i=0;OV_i<jpglen;OV_i++)        //发送整个jpg文件
  •                                 {
  •                                         while((UART7->SR&0X40)==0);        //循环发送,直到发送完毕
  •                                         UART7->DR=OV_UART_p[OV_i];
  •                                 }
  •                         }
  •                         jpeg_data_ok=2;        //标记jpeg数据处理完了,可以让DMA去采集下一帧了.
  •                 }//if(jpeg_data_ok==1)        //已经采集完一帧图像了

复制代码


使用特权

评论回复
沙发
她已醉| | 2023-3-17 19:04 | 只看该作者
是不是波特率设置的有点高了

使用特权

评论回复
板凳
春日负喧| | 2023-3-17 20:35 | 只看该作者
你这样,把波特率设置成115200试试呢?

使用特权

评论回复
地板
温室雏菊| | 2023-3-17 21:18 | 只看该作者
误码有可能的,你这921600太高了

使用特权

评论回复
5
故意相遇| | 2023-3-17 22:19 | 只看该作者
你将串口的线设置短点试试吧,弄个短点的线

使用特权

评论回复
6
西洲| | 2023-3-18 01:33 | 只看该作者
为啥用串口输出摄像头数据呢?很慢的啊

使用特权

评论回复
7
一只眠羊| | 2023-3-18 02:14 | 只看该作者
你程序可以压缩一下照片吧,这样就能好一些了

使用特权

评论回复
8
一只眠羊| | 2023-3-18 06:06 | 只看该作者
你用原子的demo试试?他原来实现的是啥功能?

使用特权

评论回复
9
失物招領| | 2023-3-18 07:33 | 只看该作者
正常来说就是因为串口波特率有点大,可能会这样

使用特权

评论回复
10
未说出口的像你| | 2023-3-18 11:25 | 只看该作者
你换成一个好用的串口芯片呗,比如波特率支持比较大的,误码率比较低的呗

使用特权

评论回复
11
在曼谷的春| | 2023-3-18 14:07 | 只看该作者
正常来说一条一条接收是OK的,能稳很多

使用特权

评论回复
12
Stahan| | 2023-3-19 22:45 | 只看该作者
是不是波特率太高了?

使用特权

评论回复
13
V853| | 2023-3-20 10:17 | 只看该作者
估计是串口模块质量有问题。

使用特权

评论回复
14
朝生| | 2023-3-20 10:17 | 只看该作者
有可能线太长了?你是用的板载的串口模块吗?

使用特权

评论回复
15
软核硬核| | 2023-3-20 10:18 | 只看该作者
是自己画的板子吗?如果是,可能是板子哪里有些问题。

使用特权

评论回复
16
MessageRing| | 2023-3-20 20:18 | 只看该作者
感觉你这波特率太高了,降低试试

使用特权

评论回复
17
LLGTR| | 2023-3-23 09:44 | 只看该作者
用好一点的串口模块呗

使用特权

评论回复
18
AloneKaven| | 2023-3-23 22:43 | 只看该作者
波特率太高了吧

使用特权

评论回复
19
SantaBunny| | 2023-5-5 22:59 | 只看该作者
试试把波特率设置成115200

使用特权

评论回复
20
chenho| | 2023-5-16 19:05 | 只看该作者
是不是波特率设置的有点高了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1203

主题

3142

帖子

0

粉丝