29165|90

104

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

分享个用STM32F407做的网络摄像头 [复制链接]

 
本帖最后由 1428662475 于 2016-10-28 13:33 编辑

先来看看硬件资源:         主控是STM32F407ZG,1MB flash,256KB RAM;外扩512KB SRAM,用于暂存camera 输出的JPEG数据,摄像头这块使用DCMI传输数据。

简单实现原理:
      以太网使用lwip,netconn API编程,这种编程方式相比RAW 比较简单,只是需要OS的支持;然后,板子当服务器,PC当客户端,当建立连接后,服务器将采集到的摄像头数据发送到客户端显示。



关键代码:

     系统中建立了两个任务,task1用来处理服务器的一些周期性任务,task2用来发送JPEG数据流。
void TCP_Server_task1(void *arg)
{
        err_t err;
        err_t recv_err;
        struct netconn  *server_coon;

        struct netbuf  *recvbuf;            
        struct pbuf  *bufptr;      
        
        server_coon = netconn_new(NETCONN_TCP);                 //创建一个TCP链接
        netconn_bind(server_coon,IP_ADDR_ANY,8080);            //绑定端口
        netconn_listen(server_coon);                                           //监听
         
        while (1)   
        {
                  err = netconn_accept(server_coon,&client_conn);        //接收连接请求
                  if (err == ERR_OK)                                                        //有客户端接入
                  {                                                
                            while(1)
                                {                                
                                        if((recv_err = netconn_recv(client_conn,&recvbuf)) == ERR_OK)          //接收到数据且正确
                                        {               
                                                bufptr=recvbuf->p;                                 
                                                memcpy(Data_buff,bufptr->payload,bufptr->tot_len);                        
                                                Data_buff[bufptr->tot_len]='\0';                                               //添加结束符
                                                
                                                if(!memcmp(Data_buff,Video_Start,9))                                   //是否为cam_start命令
                                                {                     
                                                        Video_flag=1;                                                                //标记开始采集
                                                        Frame=0;                                                                      //复位帧率
                                                        DCMI_Start();                                                               //开始采集
               
                                                }
                                                else if(!memcmp(Data_buff,Video_Stop,8))                          //是否为cam_stop命令
                                                {                     
                                                        Video_flag=0;                                                              //标记停止采集
                                               }
                                                
                                                netbuf_delete(recvbuf);                                                      //清除缓冲
                                        }
                                        else if(recv_err == ERR_CLSD)                                                    //关闭连接
                                        {
                                                netconn_close(client_conn);                                                
                                               netconn_delete(client_conn);                                                
                                                break;
                                        }
                                }
                                OSTimeDly(2);
                  }
        }
}



void OV2640_Send_task2(void *pdata)
{                 
        u16  len,i,temp;
        u8  *ptr;
        u8   flag;
        
        while(1)
        {               
                if(Buf_DoutPtr!=Buf_DinPtr)
                {
                        len=(*Buf_DoutPtr);                        
                        ptr=(u8 *)(Buf_DoutPtr+1);                                 //指向2640数组
                        flag=0;
                        
                        for(i=0;i                         {
                                if((ptr==0xFF)&&(ptr[i+1]==0xD9))           //查找JPEG数据尾部
                                {
                                        ptr[i+2]='\r';
                                        ptr[i+3]='\n';
                                        temp=i+4;                                             //数据长度
                                        flag=1;
                                        break;
                                }
                        }
                        if(flag)
                        {        
                                netconn_write(client_conn ,ptr,temp,NETCONN_COPY);  //发送数据
                                Frame++;                                       
                        }
                        
                        Buf_DoutPtr+=BUFF_SIZE;                        
                        if(Buf_DoutPtr==Buf_EndPtr)                                                    //到数据尾部了
                       Buf_DoutPtr=Buf_StartPtr;                                                         //重新开始               
            }
               
                OSTimeDly(1);
        }
}


现象:





代码比较乱,我整理后再上传上来。






此帖出自stm32/stm8论坛

最新回复

支持探讨stm32有关技术   详情 回复 发表于 2024-2-20 20:53

赞赏

2

查看全部赞赏

点赞(1) 关注(16)
 

回复
举报

104

帖子

0

TA的资源

一粒金砂(中级)

来自 31楼
 
STM32F407网络摄像头源码(TCP).rar (1.24 MB, 下载次数: 975)
此帖出自stm32/stm8论坛

点评

下载源码,学习下~~  详情 回复 发表于 2016-11-1 11:15
 
 

回复

104

帖子

0

TA的资源

一粒金砂(中级)

来自 53楼
 
网络摄像头上位机代码(TCP).rar (478.2 KB, 下载次数: 507)
此帖出自stm32/stm8论坛
 
 

回复

104

帖子

0

TA的资源

一粒金砂(中级)

来自 83楼
 
有没有人会搞在网页上显示摄像头画面的,输入ip就能显示,我现在只会显示静态的图像。

此帖出自stm32/stm8论坛
 
 
 

回复

943

帖子

25

TA的资源

一粒金砂(中级)

沙发
 
做得不错,支持一下。
此帖出自stm32/stm8论坛
 
 
 

回复

732

帖子

2

TA的资源

纯净的硅(中级)

板凳
 
不错不错,网络摄像头就这么搞定了。
此帖出自stm32/stm8论坛
 
个人签名亚里士缺德
 
 

回复

565

帖子

0

TA的资源

一粒金砂(高级)

4
 
厉害哦
此帖出自stm32/stm8论坛
 
个人签名stm32/LoRa物联网:304350312
 
 

回复

1310

帖子

3

TA的资源

一粒金砂(高级)

5
 
很好,上位机源码能否参考一下
此帖出自stm32/stm8论坛
 
个人签名

RTEMS

 
 

回复

22

帖子

0

TA的资源

一粒金砂(中级)

6
 
楼主啊请问你的板子有包含原理图,用户手册,实验例程,驱动库,安装软件吗,我想玩玩
此帖出自stm32/stm8论坛
 
 
 

回复

305

帖子

0

TA的资源

一粒金砂(高级)

7
 
,哎哟可以哦,视频录制的很有心机和细心,给我分享下芯片手册,操作系统系统等详细资料
此帖出自stm32/stm8论坛
 
个人签名http://openmcu.taobao.com]77[/url]
 
 

回复

13

帖子

0

TA的资源

一粒金砂(中级)

8
 
咦哟楼主啊请问下:你的板子会不会出现功耗低,能提供负载电流大,发热量大呢
此帖出自stm32/stm8论坛
 
 
 

回复

140

帖子

0

TA的资源

一粒金砂(中级)

9
 
LZ,连的是局域网还是???
此帖出自stm32/stm8论坛
 
 
 

回复

23

帖子

0

TA的资源

一粒金砂(初级)

10
 
请问F103的可以做吗?还是要M4开始的才能用呢~~~
此帖出自stm32/stm8论坛
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

11
 
楼主啊 我看到你的以太网原理了,想问问啊云端就是很大的服务器,设备可以挂到上面,是不是终端CLIENT只要按协议就能轻松实现互动
此帖出自stm32/stm8论坛
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

12
 
我感觉你的操作系统研究比较深,能不能加我好友下。学习啦
此帖出自stm32/stm8论坛
 
 
 

回复

1158

帖子

2

TA的资源

版主

13
 
666666,很厉害!
此帖出自stm32/stm8论坛
 
 
 

回复

104

帖子

0

TA的资源

一粒金砂(中级)

14
 
54chenjq 发表于 2016-10-28 13:30
很好,上位机源码能否参考一下

在整理,整理好后我再发上来
此帖出自stm32/stm8论坛
 
 
 

回复

104

帖子

0

TA的资源

一粒金砂(中级)

15
 
ngbc88jj 发表于 2016-10-28 13:56
楼主啊请问你的板子有包含原理图,用户手册,实验例程,驱动库,安装软件吗,我想玩玩

这是原来卖家给我的。红龙407 链接:
链接已隐藏,如需查看请登录或者注册
密码: t9xn
此帖出自stm32/stm8论坛
 
 
 

回复

104

帖子

0

TA的资源

一粒金砂(中级)

16
 
clmtc77 发表于 2016-10-28 14:07
咦哟楼主啊请问下:你的板子会不会出现功耗低,能提供负载电流大,发热量大呢:lovelin ...

帧率高的时候,摄像头发热量会比较大。
此帖出自stm32/stm8论坛
 
 
 

回复

104

帖子

0

TA的资源

一粒金砂(中级)

17
 
加勒比海盗 发表于 2016-10-28 14:07
LZ,连的是局域网还是???

局域网的。
此帖出自stm32/stm8论坛
 
 
 

回复

104

帖子

0

TA的资源

一粒金砂(中级)

18
 
ruanshi 发表于 2016-10-28 14:12
请问F103的可以做吗?还是要M4开始的才能用呢~~~

当然、、、可以
此帖出自stm32/stm8论坛
 
 
 

回复

104

帖子

0

TA的资源

一粒金砂(中级)

19
 
xhczz888 发表于 2016-10-28 14:17
楼主啊 我看到你的以太网原理了,想问问啊云端就是很大的服务器,设备可以挂到上面,是不是终端CLIENT只要 ...

是。你在玩哪家的云?
此帖出自stm32/stm8论坛
 
 
 

回复

180

帖子

0

TA的资源

一粒金砂(中级)

20
 
楼主,视频中好像帧率有些慢啊
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表