📄 main.c
字号:
/**
******************************************************************************
* @file Project/Template/main.c
* @author MCD Application Team
* @version V3.0.0
* @date 04/06/2009
* @brief Main program body
******************************************************************************
* @copy
*
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
* TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*
* <h2><center>© COPYRIGHT 2009 STMicroelectronics</center></h2>
*/
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
#include "ili9481.h"
#include "OV7670.h"
#include "Usart1.h"
#include "delay.h"
#include "FIFO.h"
static __IO uint32_t TimingDelay;
extern u32 Txt_Color,Back_Ground;
extern unsigned char VsyncCnt;//场同步标志
/********************************************
**函数名:SysTickDelay
**功能:使用系统时钟的硬延迟
**注意事项:一般地,不要在中断中调用本函数,否则会存在重入问题.另外如果屏蔽了全局中断,则不要使用此函数
********************************************/
void Delay(__IO uint32_t nTime)
{
TimingDelay = nTime;
while(TimingDelay != 0);
}
/**
* @brief Decrements the TimingDelay variable.
* @param None
* @retval : None
*/
void TimingDelay_Decrement(void)
{
if (TimingDelay != 0x00)
{
TimingDelay--;
}
}
//延时ms
void delay_ms(u16 nms)
{
Delay(1000*nms);
}
//延时us
void delay_us(u32 nus)
{
Delay(nus);
}
void EXTI_Config(void)
{
EXTI_InitTypeDef EXTI_InitStructure;
//EXTI_StructInit(&EXTI_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13); //管脚选择
EXTI_ClearITPendingBit(EXTI_Line13);
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_Line = EXTI_Line13;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
}
/**
* @brief Configures the nested vectored interrupt controller.
* @param None
* @retval : None
*/
void NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
//EXTI4
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; //通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
int main(void)
{
u32 i = 0;
u16 j = 0;
u16 temp = 0;
u16 data = 0;
u16 buffer[240] = {0};
u16 t = 0;
SystemInit();
if (SysTick_Config(72))
{
/* Capture error */
while (1);
}
Usart_Configuration();
FIFO_PortInit();
FIFO_WRST_L; //写指针复位,开始往FIFO写入数据
Delay_nUS(100);
FIFO_WRST_H;
FIFO_RRST_L; //写指针复位,开始往FIFO写入数据
Delay_nUS(100);
FIFO_RRST_H;
FSMC_LCD_Init();
TFT_Init_Config();
TFT_Clear( 0x87e0 );
EXTI_Config();
NVIC_Config();
while(1)
{
if(OV7670_init())
{
break;
}
}
TFT_Clear( 0x5678 );
FIFO_OE_L;
while(1)
{
if(1)//
{
if(VsyncCnt == 2)
{
//0地址读数据,硬件已将OE和RE连在一起
TFT_WriteRAM_Prepare();
TFTSetXY(0,0);
t = 0;
for(i = 0; i < 240; i ++) //QVGA格式,240行;每行320个点
{
for(j = 0; j < 320; j ++)
{
FIFO_RCLK_L;
__nop();
__nop();
FIFO_RCLK_H;
__nop();
__nop();
data = FIFO_DATA_PIN;
data <<= 8; //先读高位
FIFO_RCLK_L;
__nop();
__nop();
FIFO_RCLK_H;
__nop();
__nop();
//Delay_nUS(1);
temp = FIFO_DATA_PIN;//再读低位
data |= temp ;
TFT_WriteData(data); //显示读到的数据(RGB565)
}
}
FIFO_RRST_L; //读指针复位
FIFO_RCLK_L; //至少需要一个时钟周期的跳变才能复位
FIFO_RCLK_H;
FIFO_RCLK_L; //至少需要一个时钟周期的跳变才能复位
FIFO_RCLK_H;
FIFO_RRST_H;
FIFO_WEN_L; //按照手册上说明,复位时WEN要置高,但
FIFO_WRST_L; //MCU的WEN和HREF是做与非逻辑后再输入
__nop(); //到AL422B的,所以MCU的WEN置低则输出到422的WEN一定为低
__nop(); //写指针复位需要一定的延时
FIFO_WRST_H;
VsyncCnt = 0; //开始下一帧数据采集
}
}
}
}
#ifdef USE_FULL_ASSERT
/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval : None
*/
void assert_failed(uint8_t* file, uint32_t line)
{
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
/* Infinite loop */
while (1)
{
}
}
#endif
/**
* @}
*/
/******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -