【精品博文】STM32F7——摄像机之上位机显示jpeg图片

1、前言

经过了前期的若干铺垫,再没有干货有点说不过去。最初定下的 网络摄像机 也要提上日程了。

2、计划回顾

拿到开发板之后的规划如下(标绿部分已经按计划完成):

---------------------------------------分割线---------------------------------------------

方案设计:

大致看了一下板子的原理图,除了很常用的USB接口,大多数引脚都是通过插针或焊点的形式扩展出来。本来想做一个STM32+OV7725数码照相机的,发现DCMI、SDMMC、LCD-TFT控制器都只是扩展出来,具体能不能把三个接口同时用起来,还要花时间确认相关引脚是否被占用。鉴于上述原因,保险起见,就改为设计一个网络摄像机,整体框图如图1所示。

DCMI管脚不多,且确认过并未被占用,可以自己引出来,板子提供的网络接口完全够用了,有了输入和输出,剩下的就是软件工作了。虽然不是非常高大上的方案,但是目标很明确:体验低端开发板所没有的功能。该方案用到了低端芯片里所没有的DCMI接口和Ethernet接口,条件允许的话还可以增加本地显示,图像编解码功能,进一步测评其他高大上功能模块。

图1 网络摄像机整体框图

学习过程及发文规划:

1、开发板展示及硬件原理简析(前期准备)

2、开发平台搭建,用最简单的流水灯程序熟悉开发环境(前期准备)

3、为了后续调试的方便,需要搞定虚拟串口(前期准备)

4、利用DCMI控制器驱动0V7725摄像头(基本功能)

5、通过网口将数据上传至Internet(基本功能)

6、编写网页程序显示视频图像(基本功能)

7、添加简单的图像处理算法,将视频处理后上传(扩展功能)

后续:

如果能拿到板子,我会继续发一些测评文章,想办法把感兴趣的内容都试用一下。

1、体验DAC模块:设计一个简易波形发生器(正弦波、三角波、方波)

2、体验LCD-TFT控制器:驱动液晶屏

3、评估STM32F767ZI运算能力:做一个简单的图形发生器,利用MCU绘制复杂图形,例如:电子飞行仪表系统(EFIS)显示画面绘制等。

----------------------------------------分割线---------------------------------------------

其中,流水灯、串口、DAC(波形发生器)都已经完成,今天也开始网络摄像机的调试,这块有所变化,网页设计还是大学的时候玩了一段时间,N年没碰了,有些难度,而网上恰好有一款显示图片、视频的上位机,所以打算拿这个上位机来做显示。

3、网络摄像机调试规划

第一步就是要调试上位机显示功能。一方面是调试整个项目的功能之一;另一方面是为摄像头的调试打下基础,如果加入摄像头之后,显示有问题,就可以知道问题出在摄像头控制部分,有助于问题的快速定位。

第二步是利用DCMI实现对摄像头的控制。这块不必多说,主要是对摄像头的配置。

第三步综合调试,问题改进。做到第二步,其实就差不多了,因为为了验证程序能够成功控制摄像头,必须显示成功才行。

4、上位机显示JPEG图片

首次调试并没有直接选择网口,而是选择常用的串口作为传输设备,降低了调试难度。网络传输也可以参考该方法进行。

首先,设计了一个小程序,把JPEG图片转化为16进制的数组,并保存在 .C文件内。关键代码如下:

fprintf(fp_w,"const unsigned char gImage_test_pic[]={");while(!feof(fp_r)){    if(i%10==0)    {        fprintf(fp_w,"\n");    }        i++;    ch=fread(buf,sizeof(char),1,fp_r);    printf("0x%X,",(unsigned char)buf[0]);    fprintf(fp_w,"0x%x,",(unsigned char)buf[0]); }fprintf(fp_w,"};\n");

这部分代码并不是很完善,还需要手动修改一下.C文件,后续打算做一个JPEG图片转.C文件的GUI的程序,到时候再完善。

然后,利用库函数里的发送函数,将图片数据通过串口发送至上位机。

5、测试结果

串口发送图片显示成功,如下图所示:

接下来,再调通摄像头,整个摄像机计算完成一大半了。最后把通信方式由串口变更为网口就OK了。当然也可以先调网络通信,然后再调摄像头,看串口传输的显示效果吧,如果太卡,就换成网口通信。

本文由博主“cuter”发布。欢迎转载,但不得擅自更改博文内容,也不得用于任何盈利目的。转载时不得删除作者简介和版权声明。如有盗用而不说明出处引起的版权纠纷,由盗用者自负。

(0)

相关推荐

  • STM32 ~ USART接收不定长数据

    IDLE中断什么时候发生? IDLE就是串口收到一帧数据后,发生的中断.什么是一帧数据呢?比如说给单片机一次发来1个字节,或者一次发来8个字节,这些一次发来的数据,就称为一帧数据,也可以叫做一包数据. ...

  • 【精品博文】为什么I2C从机地址要左移一位?

    对许多刚开始接触I2C的新手来说,最开始比较疑惑,当MCU做主机与一些I2C接口的从机(比如一些数字传感器,大多数仍为I2C接口)通信时,无论是用IO模拟I2C协议还是使用I2C模块,在发送从机地址时 ...

  • 【精品博文】详细解析基于FPGA的VGA控制器显示字符程序

    一个双肩背包 有多难? 戳一下试试看! →_→ 长摁识别 [主题]:详细解析基于FPGA的VGA控制器显示字符程序 [作者]:LinCoding VGA大家一定不陌生,本篇文章就详细解析下基于FPGA ...

  • 【精品博文】STM32F7开箱初体验

    赢一个双肩背包 有多难? 戳一下试试看! →_→ 长摁识别 STM32最强F7探索大冒险活动已经评选出15名获得开发板的网友,并已经顺利寄出.现在已经进入到了网友分享阶段.昨天刚刚拿到开发板的网友已经 ...

  • 【精品博文】VGA显示640*480真彩色图像时FPGA存储资源不够用怎么办?

    本次试验采用的器件是Cyclone IV E EP4CE15F17C8,其存储资源有516096个比特.一般情况下,如果我们要用纯逻辑在VGA显示器上显示一幅640*480真彩色图像时需要存储资源为6 ...

  • 易懂 | 手把手教你编写你的第一个上位机

    一.前言 大家好,我是ZhengN,本次来教大家编写一个基于QT的简单的上位机. 学习一个新的东西我们都从最基础地实例开始,比如学习C语言我们会从编写一个hello程序开始.学习嵌入式我们从点灯开始. ...

  • 台达变频器通过以太网方式与上位机组态王通讯实例

    此例以台达变频器型号:VFD-M+来说明,该款台达变频器是只有RS485接口的,现在上位机最方便的就是通过网口来连接,要想与上位机通讯,那么就得接一个转换器,这个转换器就是RS485转网口的,当然协议 ...

  • 上位机通过以太网方式连接台达485变频器

    演示下德嘉ModbusTCP转ModbusRTU转换器,用来连接一款台达变频器,然后用上位机控制这个台达变频器,下面以上位机控制变频器的其中一个参数(运行)来举个例子: 一.所用硬件设备: 1.台达品 ...

  • 上位机

    发送--接收--解码--显示 发送口:有线Rs232485 无线模块 数传模块:红外,显示,无线电波433m WiFi传全球

  • 搞工控这么久了,到底什么是上位机,什么是下位机都知道吗?

    上位机 P ART.01 上位机是指可以直接发出操控命令的计算机, 一般是PC/host computer/master computer/upper computer,屏幕上显示各种信号变化(液压, ...