请教一个问题
STM32F407驱动OV2640的时候,DCMI->DR中有数据,DMA传输也正常,但是LCD却不显示图像。
摄像头模块是微雪的OV2640模块,有没有人知道是怎么回事?一个人学习,效率真的低,遇到问题,解决太麻烦了。
* @brief 配置OV2640 DMA传输
* @param none
* @retval none
**/
void OV2640_DMA_Config(uint32_t DMA_Memory0BaseAddr,uint16_t DMA_BufferSize)
{
DMA_InitTypeDef DMA_InitStructure;
// NVIC_InitTypeDef NVIC_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2,ENABLE);
DMA_Cmd(DMA2_Stream1,DISABLE);//禁止DMA2数据流1
while(DMA_GetCmdStatus(DMA2_Stream1) != DISABLE);
DMA_InitStructure.DMA_Channel = DMA_Channel_1;
DMA_InitStructure.DMA_PeripheralBaseAddr = DCMI_DR_ADDRESS;//DCMI数据寄存器地址
DMA_InitStructure.DMA_Memory0BaseAddr = DMA_Memory0BaseAddr;////DMA传输的目的地址
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;//外设到内存
DMA_InitStructure.DMA_BufferSize = DMA_BufferSize;//传入的数据大小
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//外设不递增
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;//液晶数据地址不自增
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;//外设数据宽度
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;//内存数据宽度
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;//循环模式
DMA_InitStructure.DMA_Priority = DMA_Priority_High;//优先级高
DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Enable;//使能FIFO模式
DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;//FIFO阈值
DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_INC8;//存储器突发模式,8节拍的增量突发模式
DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;//外设突发模式,单次突发
DMA_Init(DMA2_Stream1,&DMA_InitStructure);
DMA_Cmd(DMA2_Stream1,ENABLE);
while(DMA_GetCmdStatus(DMA2_Stream1) != ENABLE);
}
DCMI配置
void OV2640_Init(void)
{
DCMI_InitTypeDef DCMI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_DCMI,ENABLE);
/*DCMI配置*/
DCMI_InitStructure.DCMI_CaptureMode = DCMI_CaptureMode_Continuous;//选择连续模式或拍照模式
DCMI_InitStructure.DCMI_SynchroMode = DCMI_SynchroMode_Hardware;//选择硬件同步模式还是内嵌码同步模式
DCMI_InitStructure.DCMI_PCKPolarity = DCMI_PCKPolarity_Rising;//设置像素时钟的有效边沿
DCMI_InitStructure.DCMI_VSPolarity = DCMI_VSPolarity_Low; //设置VSYNC的有效电平
DCMI_InitStructure.DCMI_HSPolarity = DCMI_HSPolarity_Low; //设置HSYNC的有效电平
DCMI_InitStructure.DCMI_CaptureRate = DCMI_CaptureRate_All_Frame;//设置图像的采集间隔
DCMI_InitStructure.DCMI_ExtendedDataMode = DCMI_ExtendedDataMode_8b;//设置数据线的宽度
DCMI_Init(&DCMI_InitStructure);
//配置DMA传输
OV2640_DMA_Config((uint32_t)FSMC_Addr_LCD_DATA,1);
/* 配置中断 */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
/* 配置帧中断,接收到帧同步信号,就进入中断 */
NVIC_InitStructure.NVIC_IRQChannel = DCMI_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
DCMI_ITConfig(DCMI_IT_FRAME,ENABLE);
}