STM32H743中的DCMI无法进入行中断和场中断问题

article/2025/9/20 14:44:41

今天在玩MT9V034摄像头时,用到了DCMI接口处理摄像头的数据,出现了一个BUG,怎么都进入不了行中断或者场中断。究其原因,原来是忘记设置其中断优先级了。


void Msp_DCMI_Init(void)
{GPIO_InitTypeDef GPIO_InitStruct;__HAL_RCC_DCMI_CLK_ENABLE();__HAL_RCC_GPIOH_CLK_ENABLE();__HAL_RCC_GPIOI_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE();GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; // 工作模式,推挽复用GPIO_InitStruct.Pull = GPIO_PULLUP;         // 不使用上拉输出GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;// I/O操作速度 非常高	GPIO_InitStruct.Alternate = GPIO_AF13_DCMI;GPIO_InitStruct.Pin = DCMI_D0;HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);GPIO_InitStruct.Pin = DCMI_D1;HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);GPIO_InitStruct.Pin = DCMI_D2;HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);GPIO_InitStruct.Pin = DCMI_D3;HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);GPIO_InitStruct.Pin = DCMI_D4;HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);GPIO_InitStruct.Pin = DCMI_D5;HAL_GPIO_Init(GPIOI, &GPIO_InitStruct);GPIO_InitStruct.Pin = DCMI_D6;HAL_GPIO_Init(GPIOI, &GPIO_InitStruct);GPIO_InitStruct.Pin = DCMI_D7;HAL_GPIO_Init(GPIOI, &GPIO_InitStruct);GPIO_InitStruct.Pin = DCMI_D8;HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);GPIO_InitStruct.Pin = DCMI_D9;HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);GPIO_InitStruct.Pin = DCMI_HSYNC_PIN;HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);GPIO_InitStruct.Pin = DCMI_VSYNC_PIN;HAL_GPIO_Init(GPIOI, &GPIO_InitStruct);GPIO_InitStruct.Pin = DCMI_PXCLK_PIN;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);}// DCMI configuration
uint8_t DCMI_Init(void)
{ // DCMI configurationDCMIHandle.Instance         = DCMI;// VSYNC clock polarityDCMIHandle.Init.VSPolarity  = DCMI_VSPOLARITY_LOW;             // HSYNC clock polarityDCMIHandle.Init.HSPolarity  = DCMI_HSPOLARITY_LOW;// PXCLK clock polarityDCMIHandle.Init.PCKPolarity = DCMI_PCKPOLARITY_RISING;DCMIHandle.Init.SynchroMode = DCMI_SYNCHRO_HARDWARE;    // Enable Hardware synchronizationDCMIHandle.Init.CaptureRate = DCMI_CR_ALL_FRAME;        // Capture rate all framesDCMIHandle.Init.ExtendedDataMode = DCMI_EXTEND_DATA_10B; // Capture 8 bits on every pixel clock//DCMIHandle.Init.JPEGMode = DCMI_JPEG_ENABLE;                   // Set JPEG Mode#if defined(STM32F765xx)||defined(STM32F769xx)||defined(STM32H743xx)DCMIHandle.Init.ByteSelectMode  = DCMI_BSM_ALL;         // Capture all received bytesDCMIHandle.Init.ByteSelectStart = DCMI_OEBS_ODD;        // IgnoredDCMIHandle.Init.LineSelectMode  = DCMI_LSM_ALL;         // Capture all received linesDCMIHandle.Init.LineSelectStart = DCMI_OELS_ODD;        // Ignored#endif// Associate the DMA handle to the DCMI handleDCMI->IER=0x0;__HAL_DCMI_ENABLE_IT(&DCMIHandle,DCMI_IT_FRAME);      //使能帧中断HAL_NVIC_SetPriority(DCMI_IRQn, 1, 2);HAL_NVIC_EnableIRQ(DCMI_IRQn);__HAL_DCMI_ENABLE(&DCMIHandle);                       //使能DCMI// Initialize the DCMIHAL_DCMI_DeInit(&DCMIHandle);if (HAL_DCMI_Init(&DCMIHandle) != HAL_OK) {// Initialization Errorreturn -1;}return 0;}// DMA Stream configuration
//mem0addr:存储器地址0  将要存储摄像头数据的内存地址(也可以是外设地址)
//mem1addr:存储器地址1  当只使用mem0addr的时候,该值必须为0
//memblen:存储器位宽,可以为:DMA_MDATAALIGN_BYTE/DMA_MDATAALIGN_HALFWORD/DMA_MDATAALIGN_WORD
//meminc:存储器增长方式,可以为:DMA_MINC_ENABLE/DMA_MINC_DISABLE
uint8_t DMA1_DCMI_Init(uint32_t mem0addr,uint32_t mem1addr,uint16_t memsize,uint32_t memblen,uint32_t meminc)
{__HAL_RCC_DMA1_CLK_ENABLE();__HAL_LINKDMA(&DCMIHandle, DMA_Handle, DMA1_DMCIHandle);__HAL_DMA_DISABLE_IT(&DMA1_DMCIHandle,DMA_IT_TC);   //关闭DMA传输完成中断DMA1_DMCIHandle.Instance              = DMA1_Stream1;             /* Select the DMA instance          */DMA1_DMCIHandle.Init.Request          = DMA_REQUEST_DCMI;            /* DMA Channel                   */DMA1_DMCIHandle.Init.Direction        = DMA_PERIPH_TO_MEMORY;     /* Peripheral to memory transfer    */DMA1_DMCIHandle.Init.MemInc           = meminc;                   /* Memory increment mode Enable     */DMA1_DMCIHandle.Init.PeriphInc        = DMA_PINC_DISABLE;         /* Peripheral increment mode Enable */DMA1_DMCIHandle.Init.PeriphDataAlignment  = DMA_PDATAALIGN_WORD;  /* Peripheral data alignment : Word */DMA1_DMCIHandle.Init.MemDataAlignment = memblen;                  /* Memory data alignment : Word     */DMA1_DMCIHandle.Init.Mode             = DMA_NORMAL;               /* Normal DMA mode                  */DMA1_DMCIHandle.Init.Priority         = DMA_PRIORITY_HIGH;        /* Priority level : high            */DMA1_DMCIHandle.Init.FIFOMode         = DMA_FIFOMODE_ENABLE;      /* FIFO mode enabled                */DMA1_DMCIHandle.Init.FIFOThreshold    = DMA_FIFO_THRESHOLD_HALFFULL;  /* FIFO threshold full          */DMA1_DMCIHandle.Init.MemBurst         = DMA_MBURST_SINGLE;          /* Memory burst                   */DMA1_DMCIHandle.Init.PeriphBurst      = DMA_PBURST_SINGLE;        /* Peripheral burst                 */// Initialize the DMA streamHAL_DMA_DeInit(&DMA1_DMCIHandle);if (HAL_DMA_Init(&DMA1_DMCIHandle) != HAL_OK) {// Initialization Errorreturn -1;}__HAL_UNLOCK(&DMA1_DMCIHandle);/*__HAL_DMA_ENABLE_IT(&DMA1_DMCIHandle,DMA_IT_TC);    //开启传输完成中断HAL_NVIC_SetPriority(DMA1_Stream1_IRQn,1,1);        //DMA中断优先级HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn);*/if(mem1addr==0)    //开启DMA,不使用双缓冲{HAL_DMA_Start(&DMA1_DMCIHandle,(uint32_t)&(DCMI->DR),mem0addr,memsize);/*__HAL_DMA_ENABLE_IT(&DMA1_DMCIHandle,DMA_IT_TC);    //开启传输完成中断HAL_NVIC_SetPriority(DMA1_Stream1_IRQn,1,1);        //DMA中断优先级HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn);*/}else                //使用双缓冲{HAL_DMAEx_MultiBufferStart(&DMA1_DMCIHandle,(uint32_t)&DCMI->DR,mem0addr,mem1addr,memsize);//开启双缓冲__HAL_DMA_ENABLE_IT(&DMA1_DMCIHandle,DMA_IT_TC);    //开启传输完成中断HAL_NVIC_SetPriority(DMA1_Stream1_IRQn,1,1);        //DMA中断优先级HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn);}    return 0;
}//DCMI,启动传输
void DCMI_Start(void)
{  //LCD_SetCursor(0,0);  //LCD_WriteRAM_Prepare();		        //开始写入GRAM__HAL_DMA_ENABLE(&DMA1_DMCIHandle); //使能DMADCMI->CR|=DCMI_CR_CAPTURE;          //DCMI捕获使能__HAL_DCMI_CLEAR_FLAG(&DCMIHandle, DCMI_FLAG_VSYNCRI);}//DCMI,关闭传输
void DCMI_Stop(void)
{ DCMI->CR&=~(DCMI_CR_CAPTURE);       //关闭捕获while(DCMI->CR&0X01);               //等待传输完成__HAL_DMA_DISABLE(&DMA1_DMCIHandle);//关闭DMA
} //DCMI中断服务函数
void DCMI_IRQHandler(void)
{HAL_DCMI_IRQHandler(&DCMIHandle);
}void HAL_DCMI_VsyncEventCallback(DCMI_HandleTypeDef *hdcmi)
{//__HAL_DCMI_CLEAR_FLAG();__HAL_DCMI_ENABLE_IT(&DCMIHandle,DCMI_IT_VSYNC);}

加上中断优先级之后,就可以进入中断了```

在这里插入图片描述


http://chatgpt.dhexx.cn/article/608Uihv8.shtml

相关文章

STM32 DCMI OV9655 直接在LCD显示

CUBEMX配置DCMI如下: 生成代码。DCMI初始化代码如下: void HAL_DCMI_MspInit(DCMI_HandleTypeDef* hdcmi) {GPIO_InitTypeDef GPIO_InitStruct {0};if(hdcmi->InstanceDCMI){/* USER CODE BEGIN DCMI_MspInit 0 *//* USER CODE END DCMI_MspInit …

基于STM32F429的DCMI实现OV7725-NF无缓存摄像头的图像采集HAL库

基于STM32F429的OV7725-NF无缓存摄像头的DCMI图像采集 和LTDC显示 0. 首先说明一下时钟配置1. DCMI配置1.1 首先点击DCMI进入配置页面后,要选择Mode1.2 然后要进行GPIO settings1.3 然后是Parameter settings参数设置1.4 DMA settings1.5 需要使用的HAL库函数 3. OV…

stm32-DCMI—OV2640摄像头

第45章 DCMI—OV2640摄像头 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/firege 本章参考资料:《STM32F4xx参考手册》、《STM32F4xx规格书》、库帮助文档《stm32f…

stm32f407的高速并口12位ad——dcmi方式

stm32f407的高速并口12位ad——dcmi方式 关于dcmi 我们可以利用这个摄像头接口,进行一个54M以下的并口ad的数据处理。 这个是dcmi的时序图,时钟使用mco1输出系统时钟四分频也就是42m,我的是ad9926,上升沿触发,那么ad…

STM32H7B0 HAL库中关于DMA的注意事项以及DCMI调试遇到的问题及解决方法

先总结总结问题 问题1:MX_DCMI_Init();放到 MX_DMA_Init();后 问题2:DMA缓存缓存要放到SRAM中__align(32) uint32_t buffer[65535] __attribute((at(0X24040000))); 问题3:IO复用问题,DCMI数据口可以复用到其他IO口&#xff0…

STM32——DCMI接口与OV2640原理与配置

一、OV2640简介 1、什么是OV2640? OV2640是OmniVision公司生产的一颗1/4寸的CMOS UXGA(1632*1232)图像传感器。该传感器体积小、工作电压低,提供单片UXGA摄像头和影像处理器的所有功能。通过SCCB总线控制,可以输出整…

DCMI接口之OV2640摄像头

一、OV2640简介 OV2640是OmniVision公司生产的一颗1/4寸的CMOS UXGA(1632 * 1232)图像传感器。该传感器体积小、工作电压低,提供单片UXGA摄像头和影像处理器的所有功能。通过SCCB 总线控制,可以输出整帧、子采样、缩放和取窗口等…

OV2640 DCMI

OV2640 简介: 1/4寸CMOSUXGA (1632 * 1232)图像传感器。体积小、工作电压低,提供单片UXGA摄像头和影像处理器的所有功能。通过SCCB总线控制,可以输出整帧、子采样、缩放和取窗口等方式的各种分辨率8/10位影像数据。(此处一般选8位&#xff0…

STM32F429之DCMI 数字相机接口

嵌入式系列文章 参考:《STM32F429_DM00031020_ENV19.pdf》 本文目的:翻译STM32F429的PRM,深入理解DCMI接口的工作原理,最后将DCMI工作原理转换成驱动代码。 DCMI:Digital camera interface,数字摄像头接口 …

DCMI接口

目录 DCMI数字摄像头接口 DCMI引脚 摄像头引脚 操作过程与通信方式 硬件连接图 写操作 读操作 图像输出 数据格式 rawRGB YUV RGB JPEG 代码实现过程简述 学习过程的问题 YUV是亮度和色度的格式,为什么UV中取Cb蓝和Cr红作为色度? 提问MIPI、DVP、DCMI是什…

stm32f4的数字摄像头接口(DCMI)使用

DCMI简介 STM32F4的DCMI接口包括如下信号 1,数据据输入(D[0:13]),接摄像头的数据输出。 2,水平同步(行同步)输入(HSYNC),接摄像头的HSYNC/HREF信号&#xff…

Java开发技术

1、基础技术 数据结构与算法 逻辑结构:数据对象中的数据元素之间的逻辑关系 1.集合结构:集合结构中的数据元素除了同属一个集合外,没有其他关系。 2.线性结构:线性结构中的数据元素之间是一对一的关系。 3.树形结构:树…

JAVA 中的代码生成包 CGLIB (Code Generation Library)

JAVA 中的代码生成包 CGLIB (Code Generation Library) CGLIB 是一个功能强大,高性能的代码生成包。它为没有实现接口的类提供代理,为 JDK 的动态代理提供了很好的补充。通常可以使用Java的动态代理创建代理,但当要代…

Java开发实战讲解!java开发CPU最低要求

前言 本人是底层 211 本科,刚毕业,⽆科研经历,但是有些项⽬经历。 在国内监控行业某头部企业做过一段时间的实习。 想着投下字节,可以积累⼀下⾯试经验和为金九银十面招做准备。投了简历之后,过了一段时 间,HR 就打电话跟我约时间, 说明一下,我投的是北京 office。…

Java面试题技术类一

前端技术导航大全 1、面向对象编程的三大特性是什么? 2、String 和StringBuffer的区别 3、说出ArrayList,Vector, LinkedList的存储性能和特性 4、Collection 和 Collections的区别 5、HashMap和Hashtable的区别 6、final, finally, finalize的区别 7、Overload和Overri…

Java专项练习(三)

JAVA选择题 401、下列类定义代码,当用来声明对象car,并用Car carnew Car();实例化后,可以通过car对象直接赋值的字段是()402、以下哪个不是Collection的子接口?403、下列说法正确的是( )404、下面的程序将来…

Java学习汇总

6/28日已更新,错误已修改~~~有错误的地方,欢迎大家留言! 目录 一、Java基础篇 1.接口和抽象类的区别 2.重载和重写的区别 3.和equals的区别 4.异常处理机制 5.HashMap原理 6.想要线程安全的HashMap怎么办? 7.ConcurrentHa…

java面经整理

面试问题 一、Java基础1.jdk1.7到jdk1.8HashMap发生了什么变化(底层)?2.jdk1.7到jdk1.8虚拟机发生了什么变化3.String、StringBuilder、StringBuffer4.ArrayList和LinkedList有什么区别?5.ConcurrentHashMap的扩容机制6.接口和抽象…

获得阿里Java开发P7岗“农村穷苦”小伙就得安于现状?

前言 相信大家看到这个标题其实就已经可以联想到我大概是个什么样的情况了,很多人都在生活中或者是网络上甚至是家庭中都大致听过这样的话,“你这样的出生,达到现在这样的生活已经很不错了,还是别为了不切实际的梦想去冒险了&…

Java基础 常见数据结构与算法 项目总结

Java基础 1 Java基础必知必会 1.1 Java语言有哪些特点? 面向对象(封装,继承,多态);平台无关性,平台无关性的具体表现在于,Java 是“一次编写,到处运行(Wri…