/** * @name FIFO_GPIO_Config * @brief 配置OV7670的FIFO芯片引脚 * @param None * @return None * @notice */ static void FIFO_GPIO_Config(void) { CKCU_PeripClockConfig_TypeDef CKCUClock = {{0}}; /* Enable PB */ CKCUClock.Bit.PB = 1; CKCU_PeripClockConfig(CKCUClock, ENABLE); /* 配置为输出引脚 */ GPIO_DirectionConfig(HT_GPIOB, GPIO_PIN_0 | /* PB0,STROBE,闪光灯控制 */ GPIO_PIN_2 | /* PB2,FIFO_WRST,FIFO写复位 */ GPIO_PIN_3 | /* PB3, FIFO_RRST,FIFO读复位 */ GPIO_PIN_4 | /* PB4,FIFO_OE,FIFO输出使能 */ GPIO_PIN_5 | /* PB5,FIFO_RCK,FIFO读时钟 */ GPIO_PIN_6 /* PB6,FIFO_WE,FIFO写使能 */ , GPIO_DIR_OUT); /* 配置PB8~PB15为输入引脚,用于FIFO数据采集输入 */ GPIO_DirectionConfig(HT_GPIOB, GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13| GPIO_PIN_14 | GPIO_PIN_15 , GPIO_DIR_IN); GPIO_InputConfig(HT_GPIOB, GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13| GPIO_PIN_14 | GPIO_PIN_15 , ENABLE); FIFO_CS_L(); /*拉低使FIFO输出使能*/ FIFO_WE_H(); /*拉高使FIFO写允许*/ }
void EXTI0_IRQHandler(void) { if ( EXTI_GetITStatus(EXTI_Line0) != RESET ) //检查EXTI_Line0线路上的中断请求是否发送到了NVIC { if( Ov7725_vsync == 0 ) { FIFO_WRST_L(); //拉低使FIFO写(数据from摄像头)指针复位 FIFO_WE_H(); //拉高使FIFO写允许 Ov7725_vsync = 1; FIFO_WE_H(); //使FIFO写允许 FIFO_WRST_H(); //允许使FIFO写(数据from摄像头)指针运动 } else if( Ov7725_vsync == 1 ) { FIFO_WE_L(); //拉低使FIFO写暂停 Ov7725_vsync = 2; } EXTI_ClearITPendingBit(EXTI_Line0); //清除EXTI_Line0线路挂起标志位 } }
/************************************************ * 函数名:FIFO_GPIO_Config * 描述 :FIFO GPIO配置 * 输入 :无 * 输出 :无 * 注意 :无 ************************************************/ static void FIFO_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO , ENABLE); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; GPIO_Init (GPIOC,&GPIO_InitStructure); GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /* 1W LED 灯控制 */ // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; // GPIO_Init(GPIOA, &GPIO_InitStructure); // GPIO_ResetBits(GPIOA, GPIO_Pin_8); // GPIO_SetBits(GPIOA, GPIO_Pin_8); /*PD3(FIFO_WEN--FIFO写使能)*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; GPIO_Init(GPIOD, &GPIO_InitStructure); /*PB5(FIFO_WRST--FIFO写复位)*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_Init(GPIOB, &GPIO_InitStructure); /*PA2(FIFO_RRST--FIFO读复位) PA3(FIFO_OE--FIFO输出使能)*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3; GPIO_Init(GPIOA, &GPIO_InitStructure); /*PC5(FIFO_RCLK-FIFO读时钟)*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_Init(GPIOC, &GPIO_InitStructure); /*PB8-PB15(FIFO_DATA--FIFO输出数据)*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); FIFO_CS_L(); /*拉低使FIFO输出使能*/ FIFO_WE_H(); /*拉高使FIFO写允许*/ }