目前在调试OV的摄像头模块,用的DCMI读数据,一直进不了DCMI中断。
用示波器打,有1.8V的脉冲信号。不知道是不是电压不够的缘故,帮忙看看
把HREF和VSYNC当做外部中断可以进入,DCMI中断有什么特殊的地方吗?
void HAL_DCMI_MspInit(DCMI_HandleTypeDef* hdcmi)
{
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_DCMI_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();
//PA6
GPIO_Initure.Pin=GPIO_PIN_6;
GPIO_Initure.Mode=GPIO_MODE_AF_PP;
GPIO_Initure.Pull=GPIO_PULLUP;
GPIO_Initure.Speed=GPIO_SPEED_HIGH;
GPIO_Initure.Alternate=GPIO_AF13_DCMI;
HAL_GPIO_Init(GPIOA,&GPIO_Initure);
//PA9,10
GPIO_Initure.Pin=GPIO_PIN_9|GPIO_PIN_10;
HAL_GPIO_Init(GPIOA,&GPIO_Initure);
//PB6,7,8,9
GPIO_Initure.Pin=GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9;
HAL_GPIO_Init(GPIOB,&GPIO_Initure);
//PC7,8,9,10,11,12
GPIO_Initure.Pin=GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|
GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12;
HAL_GPIO_Init(GPIOC,&GPIO_Initure);
HAL_NVIC_SetPriority(DCMI_IRQn,0,0);
HAL_NVIC_EnableIRQ(DCMI_IRQn);
}
void DCMI_Init(void)
{
DCMI_Handler.Instance=DCMI;
DCMI_Handler.Init.SynchroMode=DCMI_SYNCHRO_HARDWARE;
DCMI_Handler.Init.PCKPolarity=DCMI_PCKPOLARITY_RISING;
DCMI_Handler.Init.VSPolarity=DCMI_VSPOLARITY_LOW;
DCMI_Handler.Init.HSPolarity=DCMI_HSPOLARITY_LOW;
DCMI_Handler.Init.CaptureRate=DCMI_CR_ALL_FRAME;
DCMI_Handler.Init.ExtendedDataMode=DCMI_EXTEND_DATA_8B;
HAL_DCMI_Init(&DCMI_Handler);
}
经过反复查寄存器发现是DCMI->CR这个没有打开,希望朋友们能注意
DCMI(Data Communication Memory Interface)中断是由数据传输模块产生的中断,通常用于图像数据的读取。下面是可能导致DCMI中断不能正常工作的一些可能原因:
时序问题:
在使用DCMI模块时,时序问题是非常重要的,特别是要注意一些状态的过渡,如FSYNC和RST引脚电平转换或者像素时钟的生成等。时序问题可能会导致DCMI无法正常工作。建议检查一下时序电路和时钟电路中相关的配置是否准确。
DMA配置问题:
在配置DMA时,要仔细设置相关寄存器和参数,包括输入/输出的数据流、传输模式、传输方向、缓存区地址等。如果这些信息设置不正确,则可能导致DCMI数据读取不完整或者读取错误。建议检查DMA配置是否正确。
中断配置问题:
在配置DCMI中断时,确保使能了DCMI中断,并正确设置中断优先级。如果中断未能成功触发,则可能是中断配置问题。建议检查中断配置是否正确。
器件缺陷:
如果以上配置都正确,但是DCMI仍无法正常工作,可能是器件本身的缺陷造成的问题。建议将器件更换并进行测试。
至于你提到的DCMI的1.8V脉冲信号,这个电平应该是典型的DCMI数据信号电平,并不是过低的电平。建议首先检查以上的配置问题来确定DCMI中断问题的原因。