/** * @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写允许*/ }
/** * @name VSYNC_GPIO_Configuration * @brief 配置PB7作为OV7670 VSYNC场引脚 * @param None * @return None * @notice */ static void VSYNC_GPIO_Configuration(void) { CKCU_PeripClockConfig_TypeDef CKCUClock = {{0}}; /* Enable PB */ CKCUClock.Bit.PB = 1; CKCU_PeripClockConfig(CKCUClock, ENABLE); /* 配置PB7作为VSYNC引脚 */ GPIO_DirectionConfig(HT_GPIOB, GPIO_PIN_7, GPIO_DIR_IN); /* Enable GPIO Input Function */ GPIO_InputConfig(HT_GPIOB, GPIO_PIN_7, ENABLE); /* 由于要配置为下降沿触发的中断模式,因此上拉该引脚 */ GPIO_PullResistorConfig(HT_GPIOB, GPIO_PIN_7, GPIO_PR_UP); }
/** * @name VSYNC_EXTI_Configuration * @brief 配置PB7为外部中断引脚 * @param None * @return None * @notice ___ ___ VSYNC: __| |__________________________| |__ */ static void VSYNC_EXTI_Configuration(void) { CKCU_PeripClockConfig_TypeDef CKCUClock = {{0}}; EXTI_InitTypeDef EXTI_InitStruct; /* Enable PB & AFIO & EXTI */ CKCUClock.Bit.PB = 1; CKCUClock.Bit.AFIO = 1; CKCUClock.Bit.EXTI = 1; CKCU_PeripClockConfig(CKCUClock, ENABLE); /* Config EXTI channel 7 */ EXTI_InitStruct.EXTI_Channel = EXTI_CHANNEL_7; EXTI_InitStruct.EXTI_Debounce = EXTI_DEBOUNCE_DISABLE; EXTI_InitStruct.EXTI_DebounceCnt = 0; EXTI_InitStruct.EXTI_IntType = EXTI_NEGATIVE_EDGE; EXTI_Init(&EXTI_InitStruct); /* Select Port as EXTI Trigger Source */ AFIO_EXTISourceConfig(AFIO_EXTI_CH_7, AFIO_ESS_PB); /* Enable EXTI line 7 Interrupt */ EXTI_IntConfig(EXTI_CHANNEL_7, ENABLE); }
/** * @brief 初始化SPI0 * @param * @retval None */ void SPI0_Init(void) { CKCU_PeripClockConfig_TypeDef CKCUClock = {{0}}; /* Enable PA & SPI0 & AFIO */ CKCUClock.Bit.PA = 1; CKCUClock.Bit.SPI0 = 1; CKCUClock.Bit.AFIO = 1; CKCU_PeripClockConfig(CKCUClock, ENABLE); /* SPI0_SEL idle state is HIGH */ GPIO_PullResistorConfig(HT_GPIOA, GPIO_PIN_8, GPIO_PR_UP); /* Configure related IO to SPI0 */ AFIO_GPAConfig(AFIO_PIN_4 | AFIO_PIN_5 | AFIO_PIN_6 | AFIO_PIN_7, AFIO_MODE_5); /* SPI0 configuration */ SPI_InitStructure.SPI_Mode = SPI_MASTER; SPI_InitStructure.SPI_FIFO = SPI_FIFO_DISABLE; SPI_InitStructure.SPI_DataLength = SPI_DATALENGTH_8; SPI_InitStructure.SPI_SELMode = SPI_SEL_SOFTWARE; SPI_InitStructure.SPI_SELPolarity = SPI_SELPOLARITY_LOW; SPI_InitStructure.SPI_CPOL = SPI_CPOL_LOW; SPI_InitStructure.SPI_CPHA = SPI_CPHA_FIRST; SPI_InitStructure.SPI_FirstBit = SPI_FIRSTBIT_MSB; SPI_InitStructure.SPI_RxFIFOTriggerLevel = 0; SPI_InitStructure.SPI_TxFIFOTriggerLevel = 0; SPI_InitStructure.SPI_ClockPrescaler = 4; SPI_Init(HT_SPI0, &SPI_InitStructure); /* Set SEL as output mode for slave select */ SPI_SELOutputCmd(HT_SPI0, ENABLE); /* Enable SPI0 */ SPI_Cmd(HT_SPI0, ENABLE); }