OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8910|回复: 2

ov7670卡在DCMI——IRQHandler了

[复制链接]

4

主题

8

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2015-8-4
在线时间
1 小时
发表于 2015-8-4 13:25:34 | 显示全部楼层 |阅读模式
5金钱
我是用的最新版的库,所以一部分代码照着原子哥的改,一部分看的官方样例,一部分自己写的。运行时卡在了DCMI_IRQHandler,单帧获取模式无法得到任何数据。不过I2C倒是调通了,可以读写寄存器,部分代码:

uint32_t data;

int main()
{
   
    TIM3_PWM_Init();
    TIM_Init();
    usart_init();
    I2C_Init();
    dcmi_dma_init();
    __HAL_DCMI_ENABLE(&dcmi);
   ov7670_init();
    
    HAL_DCMI_Start_DMA(&dcmi,DCMI_MODE_SNAPSHOT,data,0x9600);

    while(1)
    {
    }
}

void dcmi_dma_init()
// Data: PC6,7,8,9,11  PB6,8,9
// PCLK: PA6  
// HSYNCA4
// VSYNCB7
{
    
    //DCMI对应GPIO配置
    GPIO_InitTypeDef dcmi_gpio;
    
    __DCMI_CLK_ENABLE();
    __GPIOA_CLK_ENABLE();
    __GPIOB_CLK_ENABLE();
    __GPIOC_CLK_ENABLE();
    
    dcmi_gpio.Alternate=GPIO_AF13_DCMI;
    dcmi_gpio.Mode=GPIO_MODE_AF_PP;
    dcmi_gpio.Pin=GPIO_PIN_4 | GPIO_PIN_6;
    dcmi_gpio.Pull=GPIO_PULLUP;
    dcmi_gpio.Speed=GPIO_SPEED_HIGH;
    HAL_GPIO_Init(GPIOA,&dcmi_gpio);
    
    dcmi_gpio.Pin=GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9;
    HAL_GPIO_Init(GPIOB,&dcmi_gpio);
    
    dcmi_gpio.Pin=GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_11;
    HAL_GPIO_Init(GPIOC,&dcmi_gpio);
    
    //DCMI配置
    dcmi.Instance=DCMI;
    dcmi.Init.CaptureRate=DCMI_CR_ALL_FRAME;
    dcmi.Init.HSPolarity=DCMI_HSPOLARITY_HIGH;
    dcmi.Init.PCKPolarity=DCMI_PCKPOLARITY_RISING;
    dcmi.Init.SynchroMode=DCMI_SYNCHRO_HARDWARE;
    dcmi.Init.ExtendedDataMode=DCMI_EXTEND_DATA_8B;
    dcmi.Init.VSPolarity=DCMI_VSPOLARITY_LOW;
    
    //DMA配置
    DMA_Hand.Init.Channel             = DMA_CHANNEL_1;
  DMA_Hand.Init.Direction           = DMA_MEMORY_TO_PERIPH;
  DMA_Hand.Init.PeriphInc           = DMA_PINC_DISABLE;
  DMA_Hand.Init.MemInc              = DMA_MINC_ENABLE;
  DMA_Hand.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
  DMA_Hand.Init.MemDataAlignment    = DMA_MDATAALIGN_WORD;
  DMA_Hand.Init.Mode                = DMA_CIRCULAR;
  DMA_Hand.Init.Priority            = DMA_PRIORITY_HIGH;
  DMA_Hand.Init.FIFOMode            = DMA_FIFOMODE_DISABLE;         
  DMA_Hand.Init.FIFOThreshold       = DMA_FIFO_THRESHOLD_FULL;
  DMA_Hand.Init.MemBurst            = DMA_MBURST_SINGLE;
  DMA_Hand.Init.PeriphBurst         = DMA_PBURST_SINGLE;
  DMA_Hand.Instance = DMA2_Stream1;
    
    //其他配置
    __HAL_LINKDMA(&dcmi, DMA_Handle, DMA_Hand);
    HAL_NVIC_SetPriority(DCMI_IRQn, 5, 0);
  HAL_NVIC_EnableIRQ(DCMI_IRQn);  
    HAL_NVIC_SetPriority(DMA2_Stream1_IRQn, 5, 0);
  HAL_NVIC_EnableIRQ(DMA2_Stream1_IRQn);

    
    //启动
    HAL_DMA_Init(dcmi.DMA_Handle);  
    HAL_DCMI_Init(&dcmi);
}


void ov7670_init()
{
    uint8_t Write=0x0a;
    uint8_t Read=0;
    uint8_t reset[2]={0x12,0x80};
    uint16_t i;
    
    //软件复位摄像头,延时600ms
    HAL_I2C_Master_Transmit(&I2cHandle,0x42,reset,2,0xf);
    delay(600);
    
    //读摄像头ID
    HAL_I2C_Master_Transmit(&I2cHandle,0x42,&Write,1,0xf);
    HAL_I2C_Master_Receive(&I2cHandle,0x43,&Read,1,0xf);
    
    //初始化寄存器
    if(Read==0x76)
    {
        for(i=0;i<176;i++)
            HAL_I2C_Master_Transmit(&I2cHandle,0x42,OV7670_RGB_reg,2,0xf);
    }
    
    //延时1s,等待摄像头稳定
    delay(1000);
}

void DCMI_IRQHandler ()
{
    HAL_DCMI_IRQHandler(&dcmi);
}

void DMA2_Stream1_IRQHandler()
{
    HAL_DMA_IRQHandler(dcmi.DMA_Handle);
    printf("DMA2\n");
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

8

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2015-8-4
在线时间
1 小时
 楼主| 发表于 2015-8-4 15:02:33 | 显示全部楼层



中断检测的结果是这样的,按理来说不应该先640个行中断才来一个列中断吗,现在的情况是列中断和行中断是同时触发的。。。改成else if就只有列中断显示了,求助啊
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-8-4 22:58:06 | 显示全部楼层
帮顶。。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 00:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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