【小作品】STM32无线WIFI视频小车制作剖析(下)

本文介绍了一个由arvik在2014年完成的国家级大学生科技创新项目,项目利用STM32进行实现。项目包含摄像头、TCP/IP、ARP等模块,涉及LWIP协议、UCOS-II操作系统等技术。项目代码主要分为LED任务、ARP任务和摄像头任务三部分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实体作品请参看优酷视频
若以上链接点击无效请把该链接地址复制到浏览器地址栏 http://v.youku.com/v_show/id_XODYzODczNzQ4.html


说明:
该作品为arvik于2014年下半年在学校实验室做的一个国家级大学生科技创新项目,大概花了两个多月课余时间完成。
其实博客早在几个月前就写好了,一共3篇,后来发现第一篇丢失。本想补起来,却没有时间,且实际作品早已拆开,保留在学校“博物馆”,没办法重新试验了,就不补了。


本篇主要是代码,不多赘述,直接贴关键代码,代码不详细解释了,稍微花点功夫应该能看懂。

软件部分直接贴代码讲解,main函数如下,创建起始任务

static OS_STK startup_task_stk[STARTUP_TASK_STK_SIZE];        //定义栈

int main(void)
{
    BSP_Init();
    OSInit();
    OSTaskCreate(Task_LED,(void *)0,
       &startup_task_stk[STARTUP_TASK_STK_SIZE-1], STARTUP_TASK_PRIO);

    OSStart();
    return 0;
 }

在Task_LED任务中:

#include "includes.h"

#include "err.h"  
#include "lwip/init.h"
#include "etharp.h"
#include "udp.h"
#include "tcp.h"
#include "httpd.h"

#include "stm32f10x.h"
#include "OV7725.h"
#include "Imag_App.h"   
#include "usart1.h"
#include "SCCB.h"

#include "Imag_App.h"

OS_STK task_led2_stk[TASK_LED2_STK_SIZE];
OS_STK task_led3_stk[TASK_LED3_STK_SIZE];

extern volatile u8 Frame_Count;

extern int UDP_task();
extern struct netif enc28j60;


void Task_LED(void *p_arg)
{
    (void)p_arg;   

    OSTaskCreate(Task_LED3,(void *)0,  
       &task_led3_stk[TASK_LED3_STK_SIZE-1], TASK_LED3_PRIO);
    OSTaskCreate(Task_LED2,(void *)0,
       &task_led2_stk[TASK_LED2_STK_SIZE-1], TASK_LED2_PRIO);

    while (1)                       //TCP定时器
    {
        LED1( ON );
        OSTimeDlyHMSM(0, 0,0,250);
        LED1( OFF);
        tcp_tmr();
        OSTimeDlyHMSM(0, 0,0,250);
        tcp_tmr();     //每250ms调用一次        
    }
}

void Task_LED2(void *p_arg)         //arp任务
{
    (void)p_arg;
    while(1)
    {
        LED2(ON);
        OSTimeDlyHMSM(0,0,5,0);
        etharp_tmr();  //每5s调用一次
        LED2(OFF);
        OSTimeDlyHMSM(0,0,5,0);
        etharp_tmr();  //每5s调用一次
    }
}

extern struct udp_pcb *UdpPcb;
extern struct pbuf *p;
extern Data OVdata;

void Task_LED3(void *p_arg)    
{
    (void)p_arg;

        //摄像头
    SCCB_GPIO_Configuration();  
    FIFO_GPIO_Configuration();
    while(Ov7725_Init() != SUCCESS);
    VSYNC_Init();                           
    Ov7725_vsync = 0;        

    //LWIP初始化
    UDP_task();
    OSTimeDlyHMSM(0,0,0,100); //等待其他任务初始化完毕

//  p = pbuf_alloc(PBUF_RAW,sizeof(OVdata),PBUF_RAM);
//  p->payload = (void *)(&OVdata);
    while(1)
    {
        ethernetif_input(&enc28j60);            //轮询是否接收到数据

        if( Ov7725_vsync == 2 )
        {
            FIFO_PREPARE;           /*FIFO准备*/
            Get_imag_and_discor();  /*采集并显示*/
            Ov7725_vsync = 0;
            Frame_Count++;          /*帧计数器加1*/
        }

        LED3(ON);
        OSTimeDlyHMSM(0,0,0,4);
        LED3(OFF);
    }       
}

相关资料阅读:
LWIP协议请参看网上老衲五木的 lwip协议详解
摄像头部分代码请参看野火的PDF教程,毕竟摄像头是直接用的野火的代码,同鞋们也可以用正点原子的代码(开源电子网)或奋斗论坛的代码,可到相关论坛收集相关资料。
ucos-ii操作系统网上论坛有不少资料,也可在我的博客(http://blog.csdn.net/u012819339)查找相关内容。

酱紫,就介绍到这儿了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值