OV7740 之STM32 源代码

2017-07-13 22:43:11来源: eefocus 关键字:OV7740  STM32  源代码
  1. /* Includes ------------------------------------------------------------------*/  

  2. #include "stm32f10x.h"  

  3. #include "stm32f10x_exti.h"  

  4. #include "OV7740.h"  

  5. #include "OV7740Reg.h"  

  6. #include "sccb.h"  

  7. #include "misc.h"  

  8. #include "delay.h"  

  9. /* Private define ------------------------------------------------------------*/  

  10. #define OV7740_HREF_BIT     GPIO_Pin_2  

  11. #define OV7740_VSYNC_BIT    GPIO_Pin_4  

  12. #define GPIO_PIN_PCLK       GPIO_Pin_1  

  13. #define GPIO_PIN_REST       GPIO_Pin_5  

  14. #define GPIO_PIN_XCLK       GPIO_Pin_8  

  15. #define GPIO_PCLK_PORT      GPIOB  

  16.   

  17. #define GPIO_VSYNC_CMOS                    GPIOB  

  18. #define RCC_APB2Periph_GPIO_VSYNC_CMOS     RCC_APB2Periph_GPIOB  

  19. #define GPIO_PIN_VSYNC_CMOS                GPIO_Pin_4//GPIO_Pin_4  

  20. #define EXTI_LINE_VSYNC_CMOS               EXTI_Line4//EXTI_Line4  

  21. #define GPIO_PORT_SOURCE_VSYNC_CMOS        GPIO_PortSourceGPIOB  

  22. #define GPIO_PIN_SOURCE_VSYNC_CMOS         GPIO_PinSource4//GPIO_PinSource14  

  23.   

  24. #define HREF_H GPIOB->BSRR = GPIO_Pin_2  //  

  25. #define HREF_L GPIOB->BRR = GPIO_Pin_2  //  

  26.   

  27. #define XCLK_H GPIOA->BSRR = GPIO_Pin_8  

  28. #define XCLK_L GPIOA->BRR =  GPIO_Pin_8  

  29.   

  30. #define CAMRST_H  GPIOB->BSRR  = GPIO_Pin_5  

  31. #define CAMRST_L  GPIOB->BRR  = GPIO_Pin_5  

  32.   

  33. /* Private variables ---------------------------------------------------------*/  

  34. /* Private functions ---------------------------------------------------------*/  

  35.   

  36. void OV7740_XCLK_ON(void)  

  37. {  

  38.     GPIO_InitTypeDef GPIO_InitStructure;  

  39.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;   

  40.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   

  41.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP ;   

  42.     GPIO_Init(GPIOA, &GPIO_InitStructure);  

  43.   

  44.     RCC_MCOConfig(RCC_MCO_HSE);//hsi   //指定引脚上输出时钟源 PA8  

  45. }  

  46.   

  47. void OV7740_GPIO_Init(void)  

  48. {    

  49. GPIO_InitTypeDef GPIO_InitStructure;  

  50.   

  51. GPIO_InitStructure.GPIO_Pin =  OV7740_VSYNC_BIT;  

  52. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  

  53. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  

  54. GPIO_Init(GPIOB, &GPIO_InitStructure);   

  55.   

  56. GPIO_InitStructure.GPIO_Pin =  OV7740_HREF_BIT|GPIO_PIN_REST;  

  57. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  

  58. GPIO_Init(GPIOB, &GPIO_InitStructure);  

  59. }  

  60.   

  61.   

  62. void OV7740_Interrupts_Config(void)  

  63. {  

  64. NVIC_InitTypeDef NVIC_InitStructure;  

  65. NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;  

  66. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;//从优先级  

  67. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  

  68. NVIC_Init(&NVIC_InitStructure);  

  69. }  

  70.   

  71.   

  72. void OV7740_EXTI_Config(void)     //  

  73. {  

  74. EXTI_InitTypeDef EXTI_InitStructure;  

  75. GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource4);  

  76. EXTI_InitStructure.EXTI_Line = EXTI_Line4;  

  77. EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;  

  78. EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;  

  79. EXTI_InitStructure.EXTI_LineCmd = ENABLE;  

  80. EXTI_Init(&EXTI_InitStructure);  

  81. EXTI_GenerateSWInterrupt(EXTI_Line4);  

  82. }  

  83. u8 OV7740_writeReg(u8 regID, u8 regDat)  

  84. {  

  85. while(SCCB_Start() ==0);  

  86. if(0==SCCB_writeByte(SCCB_7740_WRADDR))  

  87. {  

  88. SCCB_Stop();  

  89. return(0);  

  90. }  

  91.   if(0==SCCB_writeByte(regID))  

  92. {  

  93. SCCB_Stop();  

  94. return(0);  

  95. }  

  96.   if(0 == SCCB_writeByte(regDat))  

  97. {  

  98. SCCB_Stop();  

  99. return(0);  

  100. }  

  101.   SCCB_Stop();  

  102.   

  103.   return(1);   

  104. }  

  105.   

  106. u8 OV7740_readReg(u8 regID, u8 *regDat)  

  107. {  

  108. //通过写操作设置寄存器地址  

  109. while(SCCB_Start() ==0);  

  110. if(0==SCCB_writeByte(SCCB_7740_WRADDR))  

  111. {  

  112. SCCB_Stop();  

  113. return(0);  

  114. }  

  115.   if(0 == SCCB_writeByte(regID))  

  116. {  

  117. SCCB_Stop();  

  118. return(0);  

  119. }  

  120. SCCB_Stop();  

  121. //设置寄存器地址后,才是读  

  122. while(SCCB_Start() == 0);  

  123. if(0==SCCB_writeByte(SCCB_7740_RDADDR))  

  124. {  

  125. SCCB_Stop();  

  126. return(0);  

  127. }  

  128.   *regDat = SCCB_readByte();  

  129.   SCCB_Stop();  

  130.   return(1);  

  131. }  

  132.   

  133.   

  134. u8 OV7740_init(void)  

  135. {  

  136. int i,n;  

  137. u8 val;  

  138. SCCB_GPIO_Init();  

  139. OV7740_GPIO_Init();  

  140. OV7740_XCLK_ON();  

  141.   CAMRST_L;  

  142.   delay_us(100);  

  143. CAMRST_H;  

  144. delay_us(100);  

  145. if(0 == OV7740_writeReg(SCCB_REG12,0x80)) return 0;  

  146. Delay_ms(10);    

  147. if(0 == OV7740_writeReg(SCCB_REG12,0x51)) return 0;  

  148.     delay_us(10);  

  149. OV7740_readReg(0x0A,&val);  

  150.   

  151. n = sizeof(RegConf0)/sizeof(UINT8);   

  152. for(i=0;i

  153. {   

  154. if(0 == OV7740_writeReg(RegConf0[i][0],RegConf0[i][1]))  

  155. {   

  156. return 0;  

  157. }  

  158. delay_us(10);  

  159. }  

  160. OV7740_setExposure(15);  

  161. OV7740_setGainVal(0);  

  162. OV7740_setVWindow(230);  

  163. OV7740_Interrupts_Config();  

  164. OV7740_EXTI_Config();  

  165. return 1;  

  166. }  

  167. void OV7740_setGainVal(int x)  

  168. {  

  169. //OV7740_readReg(0x15,&val);  

  170. OV7740_writeReg(0x00,Testgain[x][0]);  

  171. OV7740_writeReg(0x15,Testgain[x][1]);  

  172. }  

  173. void OV7740_setExposure(int exposure)  

  174. {  

  175. OV7740_writeReg(0x10,exposure&0xff);  

  176. OV7740_writeReg(0x0f,(exposure>>8)&0xff);  

  177. }  

  178. u8 setGain(int macro,int micro)  

  179. {  

  180.     u8 getGain[8]={7,0,1,3,7,15,31,63};  

  181.     u8 r00,r15;  

  182. /*if(macro ==0) {OV7740_writeReg(0x13,0x87);return 0;}*/  

  183.     if (macro>7) return 0;  

  184.     if (micro>15) return 0;   

  185.     r15 = getGain[macro]>>4;  

  186.     r00 = (getGain[macro]<<4)+micro;  

  187. /*OV7740_writeReg(0x13,0x00);手动修改*/  

  188.     OV7740_writeReg(0x00,r00);  

  189.     if (r15) OV7740_writeReg(0x15,r15);  

  190.     return 1;  

  191. }  

  192.   

  193.   

  194. //even for startline  

  195. void OV7740_setVWindow(int startline)  

  196. {  

  197.     OV7740_writeReg(0x19,startline>>1);  

  198.     OV7740_writeReg(0x1a,(20>>1)); //20lines, >>1  

  199. }  

  200. void OV7740_setLines(int lines)  

  201. {  

  202. OV7740_writeReg(0x1a,(lines>>1)); //20lines, >>1  

  203. }  

  204. u8 OV7740_test(void)  

  205. {  

  206. SCCB_GPIO_Init();  

  207. OV7740_GPIO_Init();  

  208. OV7740_XCLK_ON();  

  209. CAMRST_L;  

  210. delay_us(100);  

  211. CAMRST_H;  

  212. delay_us(100);  

  213. if(0 == OV7740_writeReg(0x12,0x80)) return 0;  

  214. delay_us(10);  

  215. if(0 == OV7740_writeReg(0x12,0x40)) return 0;  

  216. delay_us(10);  

  217.   OV7740_setVWindow(230);  

  218. if(0 == OV7740_writeReg(SCCB_REG38,0x07) )return 0;  

  219. d

[1] [2]

关键字:OV7740  STM32  源代码

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/article_2017071334137.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32F205双USB开发做device
下一篇:STM32程序跳转需要注意的问题

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利
推荐阅读
全部
OV7740
STM32
源代码

小广播

独家专题更多

东芝在线展会——芯科技智社会创未来
东芝在线展会——芯科技智社会创未来
2017东芝PCIM在线展会
2017东芝PCIM在线展会
TI车载信息娱乐系统的音视频解决方案
TI车载信息娱乐系统的音视频解决方案
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源

何立民专栏

单片机及嵌入式宝典

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

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