OpenEdv-开源电子网

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

死磕到底2—STM32F407驱动无FIFO无时钟ov7670

[复制链接]

17

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
402
金钱
402
注册时间
2020-5-8
在线时间
153 小时
发表于 2020-7-4 20:31:05 | 显示全部楼层 |阅读模式
上次的F103驱动OV7670究竟没有实用价值,我又买了一块STM32F407开发小板,
驱动了无FIFO无时钟ov7670,320*240每秒28帧(应该还可以快点)。
感觉到这个方案比用有FIFO的划算,STM32F407开发小板+ov7670=60元左右。
一、407带摄像头接口,取摄像头数据由片内硬件操作,超爽。
二、我用示波器看PA8输出时钟,幅度很小,这不是程序问题,是示波器频率不够,
      调试时候不要怀疑这个信号。我在这里白白纠结了几天。
三、摄像头相关的口线比较多,一根口线多处设置,还有硬件连接的问题,容易出错。
       调式时候可以一步一步来,先调SCCB,把摄像头初始化搞OK,再调直接读取图像数据,
       这样,端口和线路连接都没有问题了,就可以进入第三步,上DCMI和DMA。
        //ov7670_GPIO2_Init();        //老的端口输入设置
        //camera_refresh();   //老的取数操作

     这两句就是直接取数据,不用DCMI和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秒钟中断一次        //打印帧率
      
//          TIM1_PWM_Init();
//          usmart_dev.init(84);                //初始化USMART
      
        POINT_COLOR=RED;//设置字体为红色        
      
        LCD_ShowString(30,130,240,16,16,"OV7670 Init?");
      
      
        while(OV7670_Init())//初始化OV7670
        {
                LCD_ShowString(30,130,240,16,16,"OV7670 ERR");
                delay_ms(200);
          LCD_Fill(30,130,239,170,WHITE);
                delay_ms(200);
        }
      
        LCD_ShowString(30,130,200,16,16,"OV7670    OK   ");
        delay_ms(1500);      
               
        OV7670_Window_Set(12,176,240,320);//OV7670设置输出窗口
        //OV7670_Color_Saturation(4);//颜色饱和度
      
  //ov7670_GPIO2_Init();        //老的端口输入设置
        //camera_refresh();   //老的取数操作
      
        My_DCMI_Init();                        //DCMI配置
        DCMI_DMA_Init((u32)&LCD->LCD_RAM,  10,  DMA_MemoryDataSize_HalfWord,  DMA_MemoryInc_Disable);//DCMI DMA配置  
        DCMI_Start();                 //启动传输
         
        while(1)
        {      

        }
}


例程来源于正点原子,特此感谢!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

3401

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8683
金钱
8683
注册时间
2020-5-11
在线时间
4165 小时
发表于 2020-7-4 21:27:16 | 显示全部楼层
专治疑难杂症
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2018-10-6
在线时间
19 小时
发表于 2020-10-13 09:30:46 | 显示全部楼层
本帖最后由 少校扬 于 2020-10-13 15:20 编辑

楼主可以发一份源码吗?邮箱:992159857@qq.com       我在LCD上显示的图像只能看到比较清晰的轮廓,找了好几天的原因也没有解决。图片是这样的:

IMG20201013-151758159.png
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 07:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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