完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 吴伟镖 于 2013-9-25 09:57 编辑
先上传代码,这是我用OV7670摄像头+野火开发板的液晶显示屏做的移植但发现VSYNC检测不到信号,导致进入不到中断,我检测了摄像头初始化正常的,我中断函数写的也是正常的。请教各位大神什么问题呢 //主函数 #include "STM32f10x.h" #include "lcd_botton.h" #include "fifo.h" #include "sensor.h" #include "Systick.h" unsigned char i; static volatile ErrorStatus HSEStartUpStatus = SUCCESS; static vu32 TimingDelay = 0; static vu32 SELStatus = 0; extern unsigned int a, bn,c_data; unsigned int kkk=0,s=0; unsigned int M=0,N=0; int main (void) { SystemInit(); SysTick_Init(); LCD_Init(); FIFO_Set_GPIO_Config(); FIFO_GPIO_INPUT(); FIFO_CS_L();//准备读数据 FIFO_WE_H(); while(1!=Sensor_init()){}//初始化CMOS Sensor LCD_open_windows(0, 0, 320, 240); bn=0; //////////////////////////////////////// FIFO_RRST_L(); FIFO_RD_L(); FIFO_RD_H(); FIFO_RD_L(); FIFO_RRST_H(); FIFO_RD_H(); Delay_us(5000); //////////////////////////////////////// while(1) { if(bn==2) { FIFO_RRST_L(); FIFO_RD_L(); FIFO_RD_H(); FIFO_RD_L(); FIFO_RRST_H(); FIFO_RD_H(); for(a=0;a<9600;a++) { FIFO_RD_L(); c_data=GPIOB->IDR&0xff00;//读高位 FIFO_RD_H(); FIFO_RD_L(); c_data|=(GPIOB->IDR>>8)&0x00ff;//读低位 FIFO_RD_H(); // LCD_WriteRAM(c_data);//写RGB数据到TFT GRAM LCD_WR_Data(c_data); FIFO_RD_L(); c_data=GPIOB->IDR&0xff00;//读高位 FIFO_RD_H(); FIFO_RD_L(); c_data|=(GPIOB->IDR>>8)&0x00ff;//读低位 FIFO_RD_H(); // LCD_WriteRAM(c_data);//写RGB数据到TFT GRAM LCD_WR_Data(c_data); FIFO_RD_L(); c_data=GPIOB->IDR&0xff00;//读高位 FIFO_RD_H(); FIFO_RD_L(); c_data|=(GPIOB->IDR>>8)&0x00ff;//读低位 FIFO_RD_H(); // LCD_WriteRAM(c_data);//写RGB数据到TFT GRAM LCD_WR_Data(c_data); FIFO_RD_L(); c_data=GPIOB->IDR&0xff00;//读高位 FIFO_RD_H(); FIFO_RD_L(); c_data|=(GPIOB->IDR>>8)&0x00ff;//读低位 FIFO_RD_H(); // LCD_WriteRAM(c_data);//写RGB数据到TFT GRAM LCD_WR_Data(c_data); FIFO_RD_L(); c_data=GPIOB->IDR&0xff00;//读高位 FIFO_RD_H(); FIFO_RD_L(); c_data|=(GPIOB->IDR>>8)&0x00ff;//读低位 FIFO_RD_H(); // LCD_WriteRAM(c_data);//写RGB数据到TFT GRAM LCD_WR_Data(c_data); FIFO_RD_L(); c_data=GPIOB->IDR&0xff00;//读高位 FIFO_RD_H(); FIFO_RD_L(); c_data|=(GPIOB->IDR>>8)&0x00ff;//读低位 FIFO_RD_H(); // LCD_WriteRAM(c_data);//写RGB数据到TFT GRAM LCD_WR_Data(c_data); FIFO_RD_L(); c_data=GPIOB->IDR&0xff00;//读高位 FIFO_RD_H(); FIFO_RD_L(); c_data|=(GPIOB->IDR>>8)&0x00ff;//读低位 FIFO_RD_H(); // LCD_WriteRAM(c_data);//写RGB数据到TFT GRAM LCD_WR_Data(c_data); FIFO_RD_L(); ; c_data=GPIOB->IDR&0xff00;//读高位 FIFO_RD_H(); FIFO_RD_L(); c_data|=(GPIOB->IDR>>8)&0x00ff;//读低位 FIFO_RD_H(); // LCD_WriteRAM(c_data);//写RGB数据到TFT GRAM LCD_WR_Data(c_data); } bn=0; } } } ////////////////////////////////////////////////////////////////////////sensor。c///////////////////////////////////////////////////// #include "sensor.h" #include "sensor_confi.h" ///////////////////////////// //VSYNC GPIO INIT //guanfu_wang void Sensor_GPIO_Init(void)// { GPIO_InitTypeDef GPIO_InitStructure; // Enable GPIOC clock RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); GPIO_InitStructure.GPIO_Pin = Sensor_VSYNC_BIT; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;////浮空 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); } ////////////////////////////////////////////////// ////函数功能:中断配制 //guanfu_wang void Sensor_Interrupts_Config(void)//VSYNC 中断 { NVIC_InitTypeDef NVIC_InitStructure; /* Configure one bit for preemption priority */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); /* Configure one bit for preemption priority */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); /* Enable the EXTI9_5 Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } //////////////////////////////////////////////////////////////////////// void Sensor_EXTI_Config(void)//VSYNC 中断 { EXTI_InitTypeDef EXTI_InitStructure; GPIO_EXTILineConfig(GPIO_PORT_SOURCE_VSYNC_CMOS, GPIO_PIN_SOURCE_VSYNC_CMOS); EXTI_InitStructure.EXTI_Line = EXTI_LINE_VSYNC_CMOS; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); EXTI_GenerateSWInterrupt(EXTI_LINE_VSYNC_CMOS); } /////////////////////////////////////////////////////////////////////////// //功能:写OV7660寄存器 //返回:1-成功 0-失败 //guanfu_wang unsigned char wr_Sensor_Reg(unsigned char regID, unsigned char regDat) { startSCCB();//发送SCCB 总线开始传输命令 if(0==SCCBwriteByte(0x42))//写地址 { stopSCCB();//发送SCCB 总线停止传输命令 return(0);//错误返回 } Delay_us(20); if(0==SCCBwriteByte(regID))//积存器ID { stopSCCB();//发送SCCB 总线停止传输命令 return(0);//错误返回 } Delay_us(20); if(0==SCCBwriteByte(regDat))//写数据到积存器 { stopSCCB();//发送SCCB 总线停止传输命令 return(0);//错误返回 } stopSCCB();//发送SCCB 总线停止传输命令 return(1);//成功返回 } //////////////////////////// //功能:读OV7660寄存器 //返回:1-成功 0-失败 //guanfu_wang unsigned char rd_Sensor_Reg(unsigned char regID, unsigned char *regDat) { //通过写操作设置寄存器地址 startSCCB(); if(0==SCCBwriteByte(0x42))//写地址 { stopSCCB();//发送SCCB 总线停止传输命令 return(0);//错误返回 } Delay_us(20); if(0==SCCBwriteByte(regID))//积存器ID { stopSCCB();//发送SCCB 总线停止传输命令 return(0);//错误返回 } stopSCCB();//发送SCCB 总线停止传输命令 Delay_us(20); //设置寄存器地址后,才是读 startSCCB(); if(0==SCCBwriteByte(0x43))//读地址 { stopSCCB();//发送SCCB 总线停止传输命令 return(0);//错误返回 } Delay_us(20); *regDat=SCCBreadByte();//返回读到的值 noAck();//发送NACK命令 stopSCCB();//发送SCCB 总线停止传输命令 return(1);//成功返回 } /* Sensor_init() */ //返回1成功,返回0失败 //guanfu_wang unsigned char Sensor_init(void) { unsigned char temp; unsigned int i=0; // XCLK_init_ON();//开启MCO功能 提供时钟给CMOS传感器 //uchar ovidm***=0,ovidl***=0; Sensor_GPIO_Init(); SCCB_GPIO_Config();//io init.. temp=0x80; if(0==wr_Sensor_Reg(0x12, temp)) //Reset SCCB { return 0 ;//错误返回 } Delay_us(10000); if(0==rd_Sensor_Reg(0x0b, &temp))//读ID { return 0 ;//错误返回 } if(temp==0x73)//OV7670 { for(i=0;i if( 0==wr_Sensor_Reg(OV7670_reg[0],OV7670_reg[1])) { return 0;//错误返回 } } Sensor_EXTI_Config(); Sensor_Interrupts_Config(); } return 0x01; //ok } ////////////////////////////////SCCB文件////////////////////////////////////////////////////////////// #include "sccb.h" /* ----------------------------------------------- 功能: 初始化模拟SCCB接口 参数: 无 返回值: 无 ----------------------------------------------- */ void SCCB_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; /* Enable GPIOC clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); GPIO_InitStructure.GPIO_Pin = SCCB_SIC_BIT|SCCB_SID_BIT; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz; GPIO_Init(GPIOD, &GPIO_InitStructure); } void SCCB_SID_GPIO_OUTPUT(void) { GPIO_InitTypeDef GPIO_InitStructure; /* Enable GPIOC clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); GPIO_InitStructure.GPIO_Pin = SCCB_SID_BIT; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD, &GPIO_InitStructure); } void SCCB_SID_GPIO_INPUT(void) { GPIO_InitTypeDef GPIO_InitStructure; /* Enable GPIOC clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); GPIO_InitStructure.GPIO_Pin = SCCB_SID_BIT; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉 若无外部上拉电阻 必须内部有上拉 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD, &GPIO_InitStructure); } /* ----------------------------------------------- 功能: start命令,SCCB的起始信号 参数: 无 返回值: 无 ----------------------------------------------- */ void startSCCB(void) { SCCB_SID_H(); //数据线高电平 Delay_us(50); SCCB_SIC_H(); //在时钟线高的时候数据线由高至低 Delay_us(50); SCCB_SID_L(); Delay_us(50); SCCB_SIC_L(); //数据线恢复低电平,单操作函数必要 Delay_us(50); } /* ----------------------------------------------- 功能: stop命令,SCCB的停止信号 参数: 无 返回值: 无 ----------------------------------------------- */ void stopSCCB(void) { SCCB_SID_L(); Delay_us(50); SCCB_SIC_H(); Delay_us(50); SCCB_SID_H(); Delay_us(50); } /* ----------------------------------------------- 功能: noAck,用于连续读取中的最后一个结束周期 参数: 无 返回值: 无 ----------------------------------------------- */ void noAck(void) { SCCB_SID_H(); Delay_us(50); SCCB_SIC_H(); Delay_us(50); SCCB_SIC_L(); Delay_us(50); SCCB_SID_L(); Delay_us(50); } /* ----------------------------------------------- 功能: 写入一个字节的数据到SCCB 参数: 写入数据 返回值: 发送成功返回1,发送失败返回0 ----------------------------------------------- */ unsigned char SCCBwriteByte(unsigned char m_data) { unsigned char j,tem; for(j=0;j<8;j++) //循环8次发送数据 { if((m_data< SCCB_SID_H(); } else { SCCB_SID_L(); } Delay_us(50); SCCB_SIC_H(); Delay_us(50); SCCB_SIC_L(); Delay_us(2); } //Delay_us(50); SCCB_SID_IN;/*设置SDA为输入*/ Delay_us(10); SCCB_SIC_H(); Delay_us(80); if(SCCB_SID_STATE){tem=0;} //SDA=1发送失败,返回0} else {tem=1;} //SDA=0发送成功,返回1 SCCB_SIC_L(); Delay_us(50); SCCB_SID_OUT;/*设置SDA为输出*/ return (tem); } /* ----------------------------------------------- 功能: 一个字节数据读取并且返回 参数: 无 返回值: 读取到的数据 ----------------------------------------------- */ unsigned char SCCBreadByte(void) { unsigned char read,j; read=0x00; SCCB_SID_IN;/*设置SDA为输入*/ Delay_us(50); for(j=8;j>0;j--) //循环8次接收数据 { //Delay_us(100); SCCB_SIC_H(); Delay_us(50); read=read<<1; if(SCCB_SID_STATE) { read=read+1; } SCCB_SIC_L(); Delay_us(50); } SCCB_SID_OUT;/*设置SDA为输出*/ return(read); } //////////////////////////中断函数、、、、、、、、、、、、、、、、、、、、、 #include "stm32f10x_it.h" #include "SysTick.h" #include "sensor.h" #include "fifo.h" unsigned int bn=0,c=0,a=0,c_data=0; void EXTI3_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_LINE_VSYNC_CMOS) != RESET) { if(bn==0) { bn=1; FIFO_WE_H(); //拉高使FIFO写允许 // FIFO_WE_H(); FIFO_WE_H(); } else if(bn==1) { FIFO_WE_L(); bn=2; } EXTI_ClearITPendingBit(EXTI_LINE_VSYNC_CMOS); } } void SysTick_Handler(void) { TimingDelay_Decrement(); }
|
|
相关推荐
6个回答
|
|
不干,帮你看问题还要减一分
|
|
|
|
可不可以发你的原理图给我呀,我也是做这个项目。。万分感谢
|
|
|
|
lz,我和你用的板子一样,摄像头也一样,但是我的摄像头初始化不能成功,如果屏蔽掉初始化就能检测到VSYNC。lz,你是测试初始化成功的呢,能不能分享下,期待、、、
|
|
|
|
|
|
|
|
我的连线原理图和代码发给你
|
|
|
|
谢谢分享谢谢分享谢谢分享
谢谢分享谢谢分享 谢谢分享9 H' Y0 _# i2 P3 J 谢谢分享谢谢分享 谢谢分享 5 I8 V9 p- w& p8 z! B5 t 谢谢分享 谢谢分享谢谢分享谢谢分享 谢谢分享 谢谢分享 谢 谢 谢谢分享 谢谢分享 谢 谢, r9 p6 u% V( i, a+ @ 谢谢分享 谢谢分享 分 分8 R" i) w6 f" Y2 x; f- d0 w 谢谢分享 谢谢分享 享 享+ e) ?3 L7 ^% V 谢谢分享 谢谢分享 谢 谢1 W, Y4 T [9 Y& _ 谢谢分享 谢谢分享 谢 谢: l3 q ) H( g7 X 谢 谢谢分享 谢谢分享 分 分. Q5 v3 t# E" t& y6 q5 K 谢谢 谢谢分享 谢谢分享 享 享 _' G6 Z8 v% E/ j! L7 T: m* m 谢谢分 谢谢分享 谢谢分享 谢 谢: o5 u1 e& _+ h: R" 谢谢分 谢谢分享 谢 谢) w9 {+ m* f/ O4 # s* v( Y 谢谢分谢谢分享 谢 谢 谢谢 谢谢 分 分 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
为什么用FatFS在SD卡创建文件,在单片机上读写正常,用读卡器插到电脑上就什么都没有
297 浏览 0 评论
708 浏览 2 评论
《DNK210使用指南 -CanMV版 V1.0》第九章 打印输出实验
375 浏览 0 评论
stm32f407+ksz8863rlli概率性ping不通
1090 浏览 1 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-常见网络服务搭建之NFS服务搭建
515 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11335 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-1 12:37 , Processed in 0.942309 second(s), Total 83, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号