STM32驱动OV7670摄像头寻迹(直线)初步调试成功

发布者:幸福花开最新更新时间:2020-08-02 来源: 51hei关键字:STM32  驱动OV7670  摄像头  寻迹(直线) 手机看文章 扫描二维码
随时随地手机看文章

#include "sys.h"

#include "usart.h"               

#include "delay.h"       

#include "led.h"

#include "usmart.h"

#include "lcd.h"

#include "ov7670.h"

#include "exti.h"

#include "timer.h"

//ALIENTEK Mini STM32开发板扩展实验9


extern u8 ov_sta;        //在exit.c里面定义

extern u8 ov_frame;        //在timer.c里面定义


//更新LCD显示

void camera_refresh(void)

{

        u32 j,i=0;

        u16 color;

    u16 x[320],y[240],m,n;  

    u16 Xmin,Xmax,Ymin,Ymax;        

        if(ov_sta==2)

        {

                LCD_Scan_Dir(U2D_L2R);                //从上到下,从左到右

                LCD_SetCursor(0x00,0x0000);        //设置光标位置

                LCD_WriteRAM_Prepare();     //开始写入GRAM       

                OV7670_CS=0;         

                OV7670_RRST=0;                                //开始复位读指针

                OV7670_RCK=0;

                OV7670_RCK=1;

                OV7670_RCK=0;

                OV7670_RRST=1;                                //复位读指针结束

                OV7670_RCK=1;  

                for(j=0;j<76800;j++)

                {

                        GPIOB->CRL=0X88888888;                  

                        OV7670_RCK=0;

                        color=OV7670_DATA;                //读数据

                        OV7670_RCK=1;        

                        color<<=8;                                          

                        OV7670_RCK=0;

                        color|=OV7670_DATA;                //读数据                  

                        OV7670_RCK=1;

                        GPIOB->CRL=0X33333333;

            if(color<25000)

            {

                color=0x0000;

                m=j%320;

                n=j/320;

                if(i==0)

                {

                    x[i]=m;

                    y[i]=n;

                    Xmin=m;

                    Xmax=m;

                    Ymin=n;

                    Ymax=n;

                    i++;                    

                }

                x[i]=m;

                y[i]=n;

                if((x[i]-x[i-1])<50&&(y[i]-y[i-1])<50)

                {

                    if((x[i]<315)&&(x[i]>5)&&(y[i]<235)&&(y[i]>5))

                    {                        

                        if(x[i]>Xmax)

                            Xmax=x[i];

                        if(x[i]                            Xmin=x[i];

                        if(y[i]>Ymax)

                            Ymax=y[i];

                        if(y[i]                            Ymin=y[i];

                        i++;

                    }

                }                              

            }

            else

                color=0xFFFF;                     

                        LCD_WR_DATA(color);         

                }

        POINT_COLOR=RED;

        LCD_DrawRectangle(Xmin,Ymin,Xmax,Ymax);        

                OV7670_CS=1;                                                          

                OV7670_RCK=0;

                OV7670_RCK=1;

                EXTI->PR=1<<15;                     //清除LINE8上的中断标志位

                ov_sta=0;                                        //开始下一次采集

                ov_frame++;

                LCD_Scan_Dir(DFT_SCAN_DIR);        //恢复默认扫描方向                                                     

        }

}          

int main(void)

{       

        u8 i;       

        delay_init();                     //延时函数初始化

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2

        uart_init(9600);

        OV7670_Init();       

        LED_Init();                                  //初始化与LED连接的硬件接口

        LCD_Init();                                   //初始化LCD

        if(lcddev.id==0X6804||lcddev.id==0X5310||lcddev.id==0X5510||lcddev.id==0X1963) //强制设置屏幕分辨率为320*240.以支持3.5寸大屏

        {

                lcddev.width=240;

                lcddev.height=320;

        }

        usmart_dev.init(72);        //初始化USMART       

       

        POINT_COLOR=RED;//设置字体为红色

        LCD_ShowString(60,50,200,200,16,"Mini STM32");       

        LCD_ShowString(60,70,200,200,16,"OV7670 TEST");       

        LCD_ShowString(60,90,200,200,16,"ATOM@ALIENTEK");

        LCD_ShowString(60,110,200,200,16,"2014/3/27");           

        LCD_ShowString(60,130,200,200,16,"Use USMART To Set!");         

          LCD_ShowString(60,150,200,200,16,"OV7670 Init...");          

[1] [2]
关键字:STM32  驱动OV7670  摄像头  寻迹(直线) 引用地址:STM32驱动OV7670摄像头寻迹(直线)初步调试成功

上一篇:基于stm32f103c8t6的温度检测程序
下一篇:STM32通过两个按键变量控制多种花样灯亮法源程序

推荐阅读最新更新时间:2024-11-05 20:07

基于STM32的水位传感器气密性检测仪
在水位传感器的出厂检测过程中需要进行气密性检测,为此,设计了一个基于STM32的水位传感器气密性检测仪。该检测仪采用直压式气体检漏的方法,以STM32F030R8为控制核心,控制气泵进行充气,压力传感器检测气压并通过电桥差分信号输出,高精度气压测量模块测量电桥信号的输出,通过程序控制实现气密性检测的加压、稳压、保载、判断、输出等步骤,并将判断结果通过LCD显示和继电器输出。通过多次实验和测试,该气密性检漏系统能够实现对水位传感器泄漏的检测,且实验数据较为准确、稳定,重复性较好。 引言 早期对气密性检测常采用的是气泡法,即将待测工件放入水中,向待测工件的腔体中充入一定压力的气体,通过观察有无气泡从水中冒出来判断气密性好坏。气泡法
[单片机]
基于<font color='red'>STM32</font>的水位传感器气密性检测仪
STM32 关于ADC采交直流问题探讨(一)
前沿 关于STM32采样问题,相信很多人曾遇到过这样的问题,无论是关于ADC底层相关的配置还是ADC采样方案的抉择,或者是ADC软硬件滤波算法,这里博主就自己曾做过的训练题为引申,探讨ADC采样过程中的问题。 1.ADC的认识 1.1 ADC初始化参数 /* Exported types ------------------------------------------------------------*/ /** * @brief ADC Init structure definition */ typedef struct { uint32_t ADC_Resolution;
[单片机]
<font color='red'>STM32</font> 关于ADC采交直流问题探讨(一)
STM32中CAN中断2
void CAN_SetBaudRate(uint8_t iBaud) { CAN_StructInit(&CAN_InitStructure); CAN_InitStructure.CAN_TTCM = DISABLE; CAN_InitStructure.CAN_ABOM = ENABLE; //ENABLE:一旦硬件检测到128 次11位连续的隐性位,则自动退出离线状态 CAN_InitStructure.CAN_AWUM = ENABLE;//ENABLE硬件自动唤醒 CAN_InitStructure.CAN_NART = DISABLE;//DISABLE:CAN报文一直重传直到成功 CAN_In
[单片机]
STM32 PWM占空比的计算及输出比较时CCR不同
下面的这个是stm32的定时器逻辑图,上来有助于理解: TIM3的ARR寄存器和PSC寄存器, 确定PWM频率。 这里配置的这两个定时器确定了PWM的频率,我的理解是:PWM的周期(频率)就是ARR寄存器值与PSC寄存器值相乘得来,但不是简单意义上的相乘,例如要设置PWM的频率参考上次通用定时器中设置溢出时间的算法,例如输出100HZ频率的PWM,首先,确定TIMx的时钟,除非APB1的时钟分频数设置为1,否则通用定时器TIMx的时钟是APB1时钟的2倍,这时的TIMx时钟为72MHz,用这个TIMx时钟72MHz除以(PSC+1),得到定时器每隔多少秒涨一次,这里给PSC赋7199,计算得定时器每隔0.0001秒涨一次,即
[单片机]
<font color='red'>STM32</font> PWM占空比的计算及输出比较时CCR不同
关于STM32的ADC的扫描模式
下面这张截图是 我看的 STM32参考手册的关于ADC状态寄存器ADC1_SR的资料 我经过参考网上的资料 感觉EOC位 好像是每个通道转换结束 置位。而不是像书上这样说的 通道组转换结束时置位。 就像扫描模式,应该是每一个通道转换完就置一次,而不是等所有的通道都结束了才置位的。 不知道我理解的对不对? 书上写错了的? 1L: 额!这个还真不知道 2L(版主): 回复【楼主位】 utopia779 : --------------------------------- 这个要实验一下了.以实际实验结果为准. 3L: 应该是每一个通道转换完就置一次 这样的话DMA才能在每个通道转换完立即取出数据
[单片机]
STM32 usb_pwr.c文件分析
usb_pwr.c 这个文件看文件名就知道跟功耗有关了,有很多的状态:上电、掉电、挂起、恢复。 当首先是usb的上电和断电函数的定义了。 usb上电函数如下: /******************************************************************************* * Function Name : PowerOn * Description : 上电 * Input : None. * Output : None. * Return : USB_SUCCESS. *******************************************
[单片机]
STM32输入捕获模式设置并用DMA接收数据
参考: STM32的PWM输入模式设置并用DMA接收数据 Input capture mode The input stage samples the corresponding TIx input to generate a filtered signal TIxF. Then, an edge detector with polarity selection generates a signal (TIxFPx) which can be used as trigger input by the slave mode controller or as the capture command. It is presca
[单片机]
<font color='red'>STM32</font>输入捕获模式设置并用DMA接收数据
对比STM32各系列产品特性和外设兼容性
在考虑更换STM32,且跨系列更换,可以看看下面各系列的对比图。 STM32产品系列特性比较 下面是STM32F0、F1、F2、F4、L1各产品系列的特性进行对比: 3 外设兼容性分析对比 对STM32进行过研究的朋友,特别是使用过寄存器开发的朋友应该很明白STM32片上外设,进行过对比的朋友,会发现,各系列MCU的片上外设很多相似之处,甚至完全一样。 下面将F1分别和F0、F2、F4、L1对比一下,大家看看有哪些差异。 1.STM32 F1 与 F0 系列外设兼容性分析对比 2.STM32 F1 与 F2 系列外设兼容性分析对比 3.STM32 F1 与 F4 系列外设兼容性分析对比 4.STM32 F
[单片机]
对比<font color='red'>STM32</font>各系列产品特性和外设兼容性
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved