OpenEdv-开源电子网

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

网络摄像头

[复制链接]

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2017-7-21
在线时间
10 小时
发表于 2017-8-1 17:03:33 | 显示全部楼层 |阅读模式
有没有人使用f407+ov2640做网络摄像头啊,裸奔的,不带操作系统的,发现改来改去都去,LWIP里面有死循环,改不好,有没有做过,求交流。。。。。。。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2017-8-2
在线时间
17 小时
发表于 2017-8-3 09:57:39 | 显示全部楼层
你的弄好了没,我的网络摄像头软件有邮局上来,但是不显示图像
回复 支持 反对

使用道具 举报

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2017-7-21
在线时间
10 小时
 楼主| 发表于 2017-8-3 10:35:42 | 显示全部楼层
快乐之路 发表于 2017-8-3 09:57
你的弄好了没,我的网络摄像头软件有邮局上来,但是不显示图像

我没有用操作系统,我把摄像头的死循环和tcp服务器的死循环放在一起,屏幕就不停的刷,也没有数据
回复 支持 反对

使用道具 举报

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2017-7-21
在线时间
10 小时
 楼主| 发表于 2017-8-3 10:58:38 | 显示全部楼层
http://www.openedv.com/forum.php ... 7%C9%E3%CF%F1%CD%B7这里有个别人做好的,ov2640+stm32f4在开发板上实现的,你可以参考一下,我试过了可以运行,上位机是阿波罗网络摄像头实验的那个上位机,开发板是服务器
回复 支持 反对

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2017-8-2
在线时间
17 小时
发表于 2017-8-3 11:18:18 | 显示全部楼层
flj1234 发表于 2017-8-3 10:58
http://www.openedv.com/forum.php?mod=viewthread&tid=83741&highlight=%CD%F8%C2%E7%C9%E3%CF%F1%CD%B7这 ...

char *tcp_server_sendbuf=NULL;
u8 res123=0;
void tcp_server_test(void)
{
        err_t err;  
        struct tcp_pcb *tcppcbnew;  
        struct tcp_pcb *tcppcbconn;         
       
        u8 *tbuf;
        u8 key;
        u8 res=0;               
        u8 t=0;
        u32 **tbuf_data;
       
        LCD_Clear(WHITE);        //ÇåÆá
        POINT_COLOR=RED;         //oìé«×Öìå
        LCD_ShowString(30,30,200,16,16,"Apollo STM32F4/F7");
        LCD_ShowString(30,50,200,16,16,"TCP Server Test");
        LCD_ShowString(30,70,200,16,16,"ATOM@ALIENTEK");  
        LCD_ShowString(30,90,200,16,16,"KEY0:Send data");  
        LCD_ShowString(30,110,200,16,16,"KEY_UPuit");  
        tbuf=mymalloc(SRAMIN,200);       
        if(tbuf==NULL)return ;               
        sprintf((char*)tbuf,"Server IP:%d.%d.%d.%d",lwipdev.ip[0],lwipdev.ip[1],lwipdev.ip[2],lwipdev.ip[3]);
        LCD_ShowString(30,130,210,16,16,tbuf);  
        sprintf((char*)tbuf,"Server Port:%d",TCP_SERVER_PORT);
        LCD_ShowString(30,150,210,16,16,tbuf);
        tcppcbnew=tcp_new();       
        if(tcppcbnew)               
        {
                err=tcp_bind(tcppcbnew,IP_ADDR_ANY,TCP_SERVER_PORT);
                if(err==ERR_OK)       
                {
                        tcppcbconn=tcp_listen(tcppcbnew);                
                        tcp_accept(tcppcbconn,tcp_server_accept);        
                }
                else
                        res=1;  
        }
        else
                res=1;
        POINT_COLOR=BLUE;//à¶é«×Öìå
        camera_init();                //×Ô¼oìí¼óμÄ
        while(res==0)
        {
                if(tcp_server_flag&1<<6)
                {
                        tcp_server_flag&=~(1<<6);
                }
                if(tcp_server_flag&1<<5)
                {
                        res123=netcam_fifo_read(tbuf_data);   
                        if(res123)   
                        {
                                tcp_server_sendbuf=(char *)(*tbuf_data);
                                tcp_server_usersent(tcppcbnew);           
                        }else
                        {
                                delay_ms(2);
                        }
                }
                else if((tcp_server_flag&1<<5)==0)
                {
                        LCD_Fill(30,170,lcddev.width-1,lcddev.height-1,WHITE);//&#199;&#229;&#198;á
                }
               
                lwip_periodic_handle();
                delay_ms(2);
                t++;
                if(t==200)
                {
                        t=0;
                        LED0_Toggle;
                }
        }   
        tcp_server_connection_close(tcppcbnew,0);
        tcp_server_connection_close(tcppcbconn,0);
        tcp_server_remove_timewait();
        memset(tcppcbnew,0,sizeof(struct tcp_pcb));
        memset(tcppcbconn,0,sizeof(struct tcp_pcb));
        myfree(SRAMIN,tbuf);
        LCD_Clear(WHITE);                       
        POINT_COLOR = RED;
        LCD_ShowString(30,30,200,16,16,"Apollo STM32F4/F7");
        LCD_ShowString(30,50,200,16,16,"TCP Server Test");
        LCD_ShowString(30,70,200,16,16,"ATOM@ALIENTEK");
       
        POINT_COLOR=BLUE;
        LCD_ShowString(30,90,200,16,16,"Connect break£&#161;");  
        LCD_ShowString(30,110,200,16,16,"KEY1:Connect");
}

我的这个程序就是没有操作系统的,但是不能在  串口&网络摄像头软件  中显示图像。
回复 支持 反对

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2017-8-2
在线时间
17 小时
发表于 2017-8-3 11:19:21 | 显示全部楼层
本帖最后由 快乐之路 于 2017-8-3 11:22 编辑


你发的链接里面的程序还是带操作系统的
回复 支持 反对

使用道具 举报

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2017-7-21
在线时间
10 小时
 楼主| 发表于 2017-8-3 11:31:04 | 显示全部楼层
快乐之路 发表于 2017-8-3 11:18
char *tcp_server_sendbuf=NULL;
u8 res123=0;
void tcp_server_test(void)

不知道你主函数是怎么处理的,摄像头的数据采集和摄像头数据信息传送到tcp_sendbuf里面不知道你是怎么处理的
回复 支持 反对

使用道具 举报

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2017-7-21
在线时间
10 小时
 楼主| 发表于 2017-8-3 11:33:01 | 显示全部楼层
flj1234 发表于 2017-8-3 11:31
不知道你主函数是怎么处理的,摄像头的数据采集和摄像头数据信息传送到tcp_sendbuf里面不知道你是怎么处 ...

这里有个while循环,程序会死在这里,我试过,你如果不把摄像头采集数据的程序放进来,数据是采集不到的。
回复 支持 反对

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2017-8-2
在线时间
17 小时
发表于 2017-8-3 11:39:35 | 显示全部楼层
flj1234 发表于 2017-8-3 11:31
不知道你主函数是怎么处理的,摄像头的数据采集和摄像头数据信息传送到tcp_sendbuf里面不知道你是怎么处 ...

摄像头的数据会通过这个回调函数写入fifo中,在tcp_server_test调用netcam_fifo_read会读取fifo中的摄像头数据
static void netcam_dcmi_rx_callback(void)
{   
        if(DMA2_Stream1->CR&(1<<19))netcam_fifo_write(netcam_line_buf0);        //netcam_line_buf0D′è&#235;FIFO
        else netcam_fifo_write(netcam_line_buf1);                                                        //netcam_line_buf1D′è&#235;FIFO
}
回复 支持 反对

使用道具 举报

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2017-7-21
在线时间
10 小时
 楼主| 发表于 2017-8-3 14:43:05 | 显示全部楼层
快乐之路 发表于 2017-8-3 11:39
摄像头的数据会通过这个回调函数写入fifo中,在tcp_server_test调用netcam_fifo_read会读取fifo中的摄像 ...

void jpeg_test(void)
{
        u8 key;
        u8 size=3;                //&#196;&#172;è&#207;ê&#199;QVGA 320*2403&#223;′&#231;
        u8 msgbuf[15];        //&#207;&#251;&#207;¢&#187;o′&#230;&#199;&#248;
        LCD_Clear(WHITE);
  POINT_COLOR=RED;
        OV2640_JPEG_Mode();                //JPEG&#196;£ê&#189;
        My_DCMI_Init();                        //DCMI&#197;&#228;&#214;&#195;
        DCMI_DMA_Init((u32)&jpeg_buf,jpeg_buf_size,DMA_MemoryDataSize_Word,DMA_MemoryInc_Enable);//DCMI DMA&#197;&#228;&#214;&#195;   
        OV2640_OutSize_Set(jpeg_img_size_tbl[size][0],jpeg_img_size_tbl[size][1]);//éè&#214;&#195;ê&#228;3&#246;3&#223;′&#231;
        DCMI_Start();                 //&#198;&#244;&#182;ˉ′&#171;ê&#228;
        if(jpeg_data_ok==1)        //ò&#209;&#190;-2é&#188;ˉíêò&#187;&#214;&#161;í&#188;&#207;&#241;á&#203;
        {  
                LCD_ShowString(30,300,210,16,16,"Sending JPEG data..."); //ìáê&#190;&#213;y&#212;ú′&#171;ê&#228;êy&#190;Y                       
                tcp_server_sendbuf=(u8*)jpeg_buf;       //&#188;&#199;&#194;&#188;&#191;aê&#188;2&#187;&#206;a0μ&#196;&#206;&#187;&#214;&#195;
                LCD_ShowString(30,210,210,16,16,"Send data complete!!");//ìáê&#190;′&#171;ê&#228;&#189;áê&#248;éè&#214;&#195;
                jpeg_data_ok=2;        //±ê&#188;&#199;jpegêy&#190;Y′|àííêá&#203;,&#191;éò&#212;è&#195;DMAè¥2é&#188;ˉ&#207;&#194;ò&#187;&#214;&#161;á&#203;.
        }               
            
}
你的这个函数放在什么位置呢?如果是顺序执行的话,函数会在while(res=0)这个循环里面进行死循环的
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-20 06:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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