硬汉嵌入式论坛

 找回密码
 立即注册
查看: 451|回复: 3
收起左侧

[有问必答] STM32F407驱动OV2640

[复制链接]

3

主题

5

回帖

14

积分

新手上路

积分
14
发表于 2023-7-10 23:43:21 | 显示全部楼层 |阅读模式
遇到一个问题,就是STM32F407驱动OV2640的时候,没有图像显示,使用模拟IIC通讯,通信正常,可以读到OV2640的ID,有没有知道是怎么回事的?
DCMI配置


[C] 纯文本查看 复制代码
void OV2640_Init(void)
{
	DCMI_InitTypeDef   DCMI_InitStructure;
	NVIC_InitTypeDef   NVIC_InitStructure;
	
	RCC_AHB1PeriphClockCmd(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(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);
	
}

DMA配置

[C] 纯文本查看 复制代码
void OV2640_DMA_Config(uint32_t DMA_Memory0BaseAddr,uint16_t DMA_BufferSize)
{
	DMA_InitTypeDef    DMA_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);
}

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106760
QQ
发表于 2023-7-11 09:30:02 | 显示全部楼层
把DMA突发关闭试试DMA_FIFOMode_Disable
回复

使用道具 举报

3

主题

5

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2023-7-11 13:50:51 | 显示全部楼层
eric2013 发表于 2023-7-11 09:30
把DMA突发关闭试试DMA_FIFOMode_Disable

还是不行,DCMI时钟搞错了,改了之后,有帧中断,但是还是没有图像显示。
回复

使用道具 举报

6

主题

21

回帖

39

积分

新手上路

积分
39
发表于 2023-7-13 08:59:43 | 显示全部楼层
二师兄 发表于 2023-7-11 13:50
还是不行,DCMI时钟搞错了,改了之后,有帧中断,但是还是没有图像显示。

可以上传整个工程看看,单DMA配置看不出什么,你是显示在屏幕上还是哪里?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-5 06:45 , Processed in 0.196045 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表