找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1110|回复: 1
打印 上一主题 下一主题
收起左侧

求问stm32f4打开摄像头会阻塞我下面的程序

[复制链接]
跳转到指定楼层
楼主
ID:757274 发表于 2020-8-18 10:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我打开摄像头后能实时显示图像,但是不能运行下面的循环(比如我下面程序led灯闪烁),我看很多大佬程序都行,请问我这情况一般是什么问题

下面是主程序
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"
#include "lcd.h"

#include "timer.h"
#include "ov7670.h"
#include "dcmi.h"
#include "key.h"
#include "spi.h"
#include "touch.h"
#include "w25q128xx.h"

/**************************************************************************************
项目:
STm32F407简易摄像机
                               
功能要求:
                1、基本拍照功能
                                                驱动OV7670摄像头捕获图像 并在按下快门(某个按键)的同时
                                                将当前的图像保存(不保存 显示屏只是暂时定格当前画面)
                                                拓展(将照片能通过SPI Flash--16MByte)
                       
                2、屏幕显示功能
                                                开启相机但未按下快门拍照时
                                                屏幕能实时显示当前的画面
                       
                拓展3、如果买到的屏幕是带触摸屏  驱动触摸屏
                                                添加拍照后照片编辑功能(涂鸦 画笔....)
                                       
                拓展4、加入无线传输模块(WIfi)
                                                能将指定的照片数据上传到上位机
                               
                拓展5、添加陀螺仪  对拍摄的照片进行简易的矫正(图像处理)                                                       
1 2要求是基本   3 4 5能做多少做多少(4要买额外的模块)

探索者STM32F407开发板
作者:李欣
创建时间:2020.8.7
版本1.0
参考:正点原子,秉火
lcdid:9341
分辨率:320*240
电阻式触摸屏
玻璃式触摸屏
ov7670标准SCCB,兼容IIC
DCMI DMA SCCB FSMC
步骤:
1.初始化
2.开启摄像头捕获
3.使能DMA,开启搬运数据
4.lcd显示图像
************************************************************************************/

//清空屏幕并在右上角显示"RST"
void Load_Drow_Dialog(void)
{
        LCD_Clear(WHITE);//清屏   
        POINT_COLOR=BLUE;//设置字体为蓝色
        LCD_ShowString(lcddev.width-24,0,200,16,16,"RST");//显示清屏区域
          POINT_COLOR=RED;//设置画笔蓝色
}

void ov7670_test(void)
{
        //u8 key=0;
        //DCMI_Start();         //开启cam
        u8 key;
        u8 i=0;          
        while(1)
        {
                 key=KEY_Scan(0);
                tp_dev.scan(0);                  
                if(tp_dev.sta&TP_PRES_DOWN)                        //触摸屏被按下
                {       
                         if(tp_dev.x[0]<lcddev.width&&tp_dev.y[0]<lcddev.height)
                        {       
                                if(tp_dev.x[0]>(lcddev.width-24)&&tp_dev.y[0]<16)Load_Drow_Dialog();//清除
                                else TP_Draw_Big_Point(tp_dev.x[0],tp_dev.y[0],RED);                //画图                                    
                        }
                }else delay_ms(10);        //没有按键按下的时候             
                if(key==KEY0_PRES)        //KEY0按下,则执行校准程序
                {
                        LCD_Clear(WHITE);        //清屏
                    TP_Adjust();                  //屏幕校准
                        TP_Save_Adjdata();         
                        Load_Drow_Dialog();
                }
                i++;
                //if(i%20==0)LED0=!LED0;
        }
       
}
int main(void)
{
        //u32 a1;
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
        SystemInit();
        delay_Init();//初始化延时函数       
        usart1_init(115200);//串口1初始化                       
        LED_Init();//初始化LED
        LCD_Init();//LCD初始化         
        TIM1_PWM_Init();//定时器1初始化
        KEY_Initxx();//初始化按键
        EXTI_Initxx();//初始化按键中断
        SPI_GPIOInit();//SPI模式0
        tp_dev.init();        //触摸屏阻塞
        printf("OV7670初始化开启");
        int ret=OV7670_Init();
        if(ret){
                LCD_ShowString(30,130,240,16,16,"OV7670 ERROR!!");
        }
        POINT_COLOR=RED;//设置字体为红色
        //if(tp_dev.touchtype!=0XFF)LCD_ShowString(30,130,200,16,16,"Press KEY0 to Adjust");//电阻屏才显示       
        /*
        if(tp_dev.touchtype!=0XFF)LCD_ShowString(30,130,200,16,16,"Press KEY0 to Adjust");//电阻屏才显示
        //delay_ms(500);
        Load_Drow_Dialog();         //清屏        */
        /*while()//初始化OV7670
        {
                LCD_ShowString(30,130,240,16,16,"OV7670 ERROR!!");
                //LED0=0;
                delay_ms(200);
                LCD_Fill(30,130,239,170,WHITE);
                //LED0=1;
                delay_ms(200);
               
        }
        LCD_ShowString(40,150,200,20,20,"OV7670 OK!!!!!!");
        delay_ms(300);        //延时一
       
        //OV7670_Window_Set(12,176,240,320);//OV7670设置输出窗口*/
        DCMI_Initxx();        //DCMI初始化
        DCMI_DMA_Init();//初始化DMA
        DCMI_Start();         //开启cam
        //ov7670_test();
       
        while(1)
        {       
                //LCD_ShowString(30,60,210,20,20,"INIT SUCCESS!!!!");       
                //a1=DCMI_ReadData();
                printf("0x\r\n");
               
                LED1(0);
               
                delay_ms(300);
                LED1(1);
                delay_ms(300);
        }
       
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:757274 发表于 2020-8-18 11:11 | 只看该作者
有没有大佬啊
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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