stm32f4+ov2640颜 {MOD}识别

2019-07-20 04:56发布

我想用f4+ov2640做颜 {MOD}识别,基本原理是摄像头捕获一帧数据,关闭DMA,调用lcd读点函数读取颜 {MOD}值,处理过后开启DMA传输下一帧数据。用的是原子的摄像头实验的程序并做了些修改。结果lcd只显示一次,之后再也不刷新了。但是LED1灯一直闪。
//DCMI中断服务函数
void DCMI_IRQHandler(void)   
{
        if(DCMI_GetITStatus(DCMI_IT_FRAME)==SET)//捕获到一帧图像
        {
                rgb_data_process();     来一次帧中断进入这个函数处理。            
                DCMI_ClearITPendingBit(DCMI_IT_FRAME);//清除帧中断
                LED1=!LED1;
                ov_frame++;  
        }
}

下面是main.c里面的函数。
void rgb_data_process(void)         在这个函数里面开启或者关闭dma。
{
       
                if(rgb_data_ok==0)        //rgb数据还未采集完?                     
                {       
                        DMA_Cmd(DMA2_Stream1,DISABLE);//关闭DMA2,Stream1
                        while (DMA_GetCmdStatus(DMA2_Stream1) != DISABLE){}//等待DMA2_Stream1可配置  
                        rgb_data_ok=1;                                 //标记rgb数据采集完按成,等待其他函数处理
                }
                if(rgb_data_ok==2)        //上一次的rgb数据已经被处理了
                {
                        DMA2_Stream1->NDTR=1;
                        LCD_SetCursor(0,0);                       
                        DMA_Cmd(DMA2_Stream1,ENABLE);//开启DMA2,Stream1
                        rgb_data_ok=0;                                                //标记数据未采集
                }
       
}

//RGB565测试
//RGB数据直接显示在LCD上面
void rgb565_test(void)
{
        u8 key;
        u8 effect=0,saturation=2,contrast=2;
        u8 scale=1;                //默认是全尺寸缩放
        u8 msgbuf[15];        //消息缓存区
        LCD_Clear(WHITE);
        POINT_COLOR=RED;
        LCD_ShowString(30,50,200,16,16,"ALIENTEK STM32F4");
        LCD_ShowString(30,70,200,16,16,"OV2640 RGB565 Mode");
       
        LCD_ShowString(30,100,200,16,16,"KEY0:Contrast");                        //对比度
        LCD_ShowString(30,130,200,16,16,"KEY1:Saturation");                 // {MOD}彩饱和度
        LCD_ShowString(30,150,200,16,16,"KEY2:Effects");                         //特效
        LCD_ShowString(30,170,200,16,16,"KEY_UP:FullSize/Scale");        //1:1尺寸(显示真实尺寸)/全尺寸缩放
       
        OV2640_RGB565_Mode();        //RGB565模式
        My_DCMI_Init();                        //DCMI配置
        DCMI_DMA_Init((u32)&LCD->LCD_RAM,1,DMA_MemoryDataSize_HalfWord,DMA_MemoryInc_Disable);//DCMI DMA配置  
        OV2640_OutSize_Set(lcddev.width,lcddev.height);
        DCMI_Start();                 //启动传输
        while(1)
        {
               
                if(rgb_data_ok==1)        //已经采集完一帧图像了
                {
                         LCD_Read(115,160);                                                               ----->这一部分进行lcd的读点和颜 {MOD}值的处理。
                         equr=(G[0]+G[1]+G[2]+G[3]+G[4]+G[5])/6;         
                         if(0x35<equr&&equr<0x39)
                         {
                                        LED0=!LED0;
                         }
                   rgb_data_ok=2;        //标记rgb数据处理完了,可以让DMA去采集下一帧了.       
           }               
        }   
}
int main(void)
{
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
        delay_init(168);  //初始化延时函数
        uart_init(115200);                //初始化串口波特率为115200
        usart2_init(42,115200);                //初始化串口2波特率为115200
        LED_Init();                                        //初始化LED
        LCD_Init();                                        //LCD初始化  
        KEY_Init();                                        //按键初始化
        //TIM3_Int_Init(10000-1,8400-1);//10Khz计数,1秒钟中断一次
       
        usmart_dev.init(84);                //初始化USMART
        POINT_COLOR=RED;//设置字体为红 {MOD}
        LCD_ShowString(30,50,200,16,16,"Explorer STM32F4");       
        LCD_ShowString(30,70,200,16,16,"OV2640 TEST");       
        LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
        LCD_ShowString(30,110,200,16,16,"2014/5/14");           
        while(OV2640_Init())//初始化OV2640
        {
                LCD_ShowString(30,130,240,16,16,"OV2640 ERR");
                delay_ms(200);
          LCD_Fill(30,130,239,170,WHITE);
                delay_ms(200);
        }
        LCD_ShowString(30,130,200,16,16,"OV2640 OK");            
        rgb565_test();
}

STM32F4摄像头.zip (7.12 MB, 下载次数: 24517) 2016-4-13 17:47 上传 点击文件名下载附件
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。