祝大家节日快乐^_^!! 如题 DCMI中断进不去 拔插摄像头却偶尔可以进一次 开启的场中断和捕获完成中断 直接操作寄存器居然不能进去 如:写if((DCMI->RISR&0x01)==1) 可以i进捕获完成中断 但写if((DCMI->RISR&0x08)==1) 却进不去场中断 最关键的是不拔插摄像头居然根本不进中断 一下是中断代码 void DCMI_IRQHandler(void) { while((USART1->SR&0X40)==0); //等待发送结束 USART_SendData(USART1,DCMI->RISR); if((DCMI->RISR&0x08)==1) //场中断 { while((USART1->SR&0X40)==0); USART_SendData(USART1,0xaa); DCMI->ICR|=1<<3; //清中断 } //if(DCMI_GetITStatus(DCMI_IT_FRAME)==SET)//捕获到一帧图像 if((DCMI->RISR&0x01)==1) { while((USART1->SR&0X40)==0); USART_SendData(USART1,0x12); DCMI->ICR|=1<<0; //DCMI_ClearITPendingBit(DCMI_IT_FRAME);//清除帧中断 DMA2_Stream1->NDTR=60*188; //传输长度为jpeg_buf_size*4字节 DMA2_Stream1->CR|=1<<0; //重新传输 } //if( DCMI->ICR|=1<<3; DCMI->ICR|=1<<4; //硬件同步模式行中断一直置一?? } 然后是DCMI初始化代码 void DCMI_Init() { GPIO_InitTypeDef GPIO_InitStructure; DCMI_InitTypeDef DCMI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB |RCC_AHB1Periph_GPIOC|RCC_AHB1Periph_GPIOE, ENABLE);//使能PABCE时钟 RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_DCMI,ENABLE);//使能DCMI时钟 //PA4/6初始化设置 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_6;//PA4/6 复用功能输出 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能输出 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉 GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_6;// PB6/7 复用功能输出 GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_11;//复用功能输出 GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6;//PE5/6 复用功能输出 GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化 GPIO_PinAFConfig(GPIOA,GPIO_PinSource4,GPIO_AF_DCMI);//PA4, DCMI_HSYNC GPIO_PinAFConfig(GPIOA,GPIO_PinSource6,GPIO_AF_DCMI);//PA6, DCMI_PCLK GPIO_PinAFConfig(GPIOB,GPIO_PinSource7,GPIO_AF_DCMI);//PB7,DCMI_VSYNC GPIO_PinAFConfig(GPIOC,GPIO_PinSource6,GPIO_AF_DCMI);//PC6, DCMI_D0 GPIO_PinAFConfig(GPIOC,GPIO_PinSource7,GPIO_AF_DCMI);//PC7, DCMI_D1 GPIO_PinAFConfig(GPIOC,GPIO_PinSource8,GPIO_AF_DCMI);//PC8,DCMI_D2 GPIO_PinAFConfig(GPIOC,GPIO_PinSource9,GPIO_AF_DCMI);//PC9, DCMI_D3 GPIO_PinAFConfig(GPIOC,GPIO_PinSource11,GPIO_AF_DCMI);//PC11,DCMI_D4 GPIO_PinAFConfig(GPIOB,GPIO_PinSource6,GPIO_AF_DCMI);//PB6,DCMI_D5 GPIO_PinAFConfig(GPIOE,GPIO_PinSource5,GPIO_AF_DCMI);//PE5, DCMI_D6 GPIO_PinAFConfig(GPIOE,GPIO_PinSource6,GPIO_AF_DCMI);//PE6, DCMI_D7 GPIOE->MODER|=1<<7; GPIOE->MODER|=0<<6; GPIOE->OTYPER|=1<<3; GPIOE->UPDR|=0<<7; GPIOE->UPDR|=1<<6; DCMI_DeInit();//清除原来的设置 DCMI->CR|=0<<13; //N每个像素时钟捕获8位像素数据 DCMI->CR|=0<<12; DCMI->CR|=0<<7; //场信号VSYNC低电平数据口无效 DCMI->CR|=0<<6; //行信号HSPOL低电平数据口无效 DCMI->CR|=0<<5; //像素时钟下降沿有效 DCMI->CR|=0<<4; //硬件同步 DCMI->CR|=0<<3; //未压缩的格式 DCMI->CR|=0<<2; //捕获完整图像 DCMI->CR|=0<<1; //连续模式 //DCMI->CR|=1<<0; //使能捕获 DCMI->IER|=0<<4; //禁止行中断 DCMI->IER|=1<<3; //开启场中断 DCMI->IER|=1<<2; DCMI->IER|=1<<1; DCMI->IER|=1<<0; //开启捕获完成中断 //DCMI->MISR=0x00; //DCMI->MISR|=1<<3; //不屏蔽场中断 //DCMI->MISR|=1<<0; //不屏蔽捕获完成中断 DCMI_ITConfig(DCMI_IT_FRAME|DCMI_IT_VSYNC|DCMI_IT_ERR,ENABLE);//开启帧中断 DCMI_Cmd(ENABLE); //DCMI使能 DCMI->CR|=1<<14; //启动DCMI NVIC_InitStructure.NVIC_IRQChannel = DCMI_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1; //抢占优先级1 NVIC_InitStructure.NVIC_IRQChannelSubPriority =2; //响应优先级3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能 NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器、 //DCMI,启动传输 } 最后是DMA2 使用的是MT9v032 8位数据一个像素,所以目标地址写的8位 DCMI_DMA_Init(image[0][0],60*188,0,1); void DCMI_DMA_Init(uint8_t memaddr,uint16_t memsize,uint8_t memblen,uint8_t meminc) { RCC->AHB1ENR|=1<<22; //DMA2时钟使能 while(DMA2_Stream1->CR&0X01); //等待DMA2_Stream1可配置 DMA2->LIFCR|=0X3D<<6*1; //清空通道1上所有中断标志 DMA2_Stream1->FCR=0X0000021; //设置为默认值 DMA2_Stream1->AR=(u32)&DCMI->DR;//外设地址为CMI->DR DMA2_Stream1->M0AR=(u32)memaddr; //memaddr作为目标地址 DMA2_Stream1->NDTR=(u16)memsize; //传输长度为memsize DMA2_Stream1->CR=0; //先全部复位CR寄存器值 DMA2_Stream1->CR|=0<<6; //外设到存储器模式 DMA2_Stream1->CR|=1<<8; //循环模式 DMA2_Stream1->CR|=0<<9; //外设非增量模式 DMA2_Stream1->CR|=meminc<<10; //存储器增量模式 DMA2_Stream1->CR|=2<<11; //外设数据长度:32位 DMA2_Stream1->CR|=memblen<<13; //存储器位宽,8/16/32bit DMA2_Stream1->CR|=2<<16; //高优先级 DMA2_Stream1->CR|=0<<21; //外设突发单次传输 DMA2_Stream1->CR|=0<<23; //存储器突发单次传输 DMA2_Stream1->CR|=1<<25; //通道1 DCMI通道 } 祝大家节日快乐^_^!! 求大神帮忙啊Q_Q |
但实际上读寄存器发现那两个中断从来没发生过所以没有去掉
还没加屏幕 等等试一下