用STM32F407和DCMI做OV7670摄像头实验,各方面初始化都能成功,VSYNC, HSYNC, PCLK的信号都正常,也开启了DCMI。DCMI能检测到VSYNC, HSYNC信号,但好像检测不到PCLK信号。观察DCMI->SR的FNE位一直为0,DCMI的FIFO应该也是一直为空,像是检测不到PCLK一样,不知道是哪里的问题,是不是还有哪个寄存器没有正确开启?请各路大神指教些招数来.下面贴出来DCMI的初始化:
void DCMI_Init(void)
{
RCC->AHB1ENR |= 1<<0; //使能外设PORTA时钟
RCC->AHB1ENR |= 1<<1; //使能外设PORTB时钟
RCC->AHB1ENR |= 1<<2; //使能外设PORTC时钟
RCC->AHB1ENR |= 1<<4; //使能外设PORTE时钟
RCC->AHB2ENR |= 1<<0; //能DCMI时钟
GPIO_Set(GPIOA, PIN4|PIN6, GPIO_MODE_AF, GPIO_OTYPE_PP, GPIO_SPEED_100M, GPIO_PUPD_PU); //PA4/6 复用功能输出
GPIO_Set(GPIOB, PIN6|PIN7, GPIO_MODE_AF, GPIO_OTYPE_PP, GPIO_SPEED_100M, GPIO_PUPD_PU); //PB6/7 复用功能输出
GPIO_Set(GPIOC, PIN6|PIN7|PIN8|PIN9|PIN11, GPIO_MODE_AF, GPIO_OTYPE_PP, GPIO_SPEED_100M, GPIO_PUPD_PU); //PC6/7/8/9/11 复用功能输出
GPIO_Set(GPIOE, PIN5|PIN6, GPIO_MODE_AF, GPIO_OTYPE_PP, GPIO_SPEED_100M, GPIO_PUPD_PU); //PE5/6 复用功能输出
GPIO_AF_Set(GPIOA, 4, 13); //PA4,AF13 DCMI_HSYNC
GPIO_AF_Set(GPIOA, 6, 13); //PA6,AF13 DCMI_PCLK
GPIO_AF_Set(GPIOB, 7, 13); //PB7,AF13 DCMI_VSYNC
GPIO_AF_Set(GPIOC, 6, 13); //PC6,AF13 DCMI_D0
GPIO_AF_Set(GPIOC, 7, 13); //PC7,AF13 DCMI_D1
GPIO_AF_Set(GPIOC, 8, 13); //PC8,AF13 DCMI_D2
GPIO_AF_Set(GPIOC, 9, 13); //PC9,AF13 DCMI_D3
GPIO_AF_Set(GPIOC, 11, 13); //PC11,AF13 DCMI_D4
GPIO_AF_Set(GPIOB, 6, 13); //PB6,AF13 DCMI_D5
GPIO_AF_Set(GPIOE, 5, 13); //PE5,AF13 DCMI_D6
GPIO_AF_Set(GPIOE, 6, 13); //PE6,AF13 DCMI_D7
DCMI->CR = 0x0; //清除原来的设置
DCMI->IER = 0x0;
DCMI->ICR = 0x1F;
DCMI->ESCR = 0x0;
DCMI->ESUR = 0x0;
DCMI->CWSTRTR = 0x0;
DCMI->CWSIZER = 0x0;
DCMI->CR |= 0<<1; //连续模式
DCMI->CR |= 0<<2; //全帧捕获
DCMI->CR |= 0<<4; //硬件同步HSYNC,VSYNC
DCMI->CR |= 1<<5; //PCLK 上升沿有效
DCMI->CR |= 0<<6; //HSYNC 低电平有效
DCMI->CR |= 0<<7; //VSYNC 低电平有效
DCMI->CR |= 0<<8; //捕获所有的帧
DCMI->CR |= 0<<10; //8位数据格式
//DCMI->IER |= 1<<0; //开启帧中断
DCMI->CR |= 1<<14; //DCMI使能
//MY_NVIC_Init(0, 0, DCMI_IRQn, 2); //抢占1,子优先级2,组2
}
一周热门 更多>