今天在玩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);}

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

STM32H743中的DCMI无法进入行中断和场中断问题相关推荐

  1. pandas使用query函数基于判断条件获得dataframe中满足条件的数据行(row)的索引列表(index of rows matching conditions in dataframe)

    pandas使用query函数基于判断条件获得dataframe中满足条件的数据行(row)的索引列表(index of rows matching conditions in dataframe) ...

  2. pandas使用dropna函数计算返回dataframe中不包含缺失值的行索引列表list(index of rows without missing values in dataframe)

    pandas使用dropna函数计算返回dataframe中不包含缺失值的行索引列表list(index of rows without missing values in dataframe) 目录

  3. pandas使用isna函数和any函数计算返回dataframe中包含缺失值的数据行(rows with missing values in dataframe)

    pandas使用isna函数和any函数计算返回dataframe中包含缺失值的数据行(rows with missing values in dataframe) 目录

  4. pandas使用drop_duplicates函数基于subset参数指定的数据列子集删除重复行、并设置keep参数保留重复行中的最后一个数据行

    pandas使用drop_duplicates函数基于subset参数指定的数据列子集删除重复行.并设置keep参数保留重复行中的最后一个数据行 目录

  5. InnoDB 存储引擎中的表锁和行锁详解

    各位对 "锁" 这个概念应该都不是很陌生吧,Java 语言中就提供了两种锁:内置的 synchronized 锁和 Lock 接口,使用锁的目的就是管理对共享资源的并发访问,保证数 ...

  6. SQL-61 对于employees表中,给出奇数行的first_name

    题目描述 对于employees表中,给出奇数行的first_name CREATE TABLE `employees` ( `emp_no` int(11) NOT NULL, `birth_dat ...

  7. linux文件删除指定内容,Linux bash删除文件中含“指定内容”的行功能示例

    本文实例讲述了Linux bash删除文件中含"指定内容"的行功能.分享给大家供大家参考,具体如下: #!/bin/sh # 功能: 删除文件中含"指定内容"的 ...

  8. Linux 有问必答:如何在Ubuntu或者Debian中启动后进入命令行

    Linux 有问必答:如何在Ubuntu或者Debian中启动后进入命令行 提问:我运行的是Ubuntu桌面,但是我希望启动后临时进入命令行.有什么简便的方法可以启动进入终端? Linux桌面自带了一 ...

  9. pycharm调试过程中出现跳过某行的现象解决办法(不要在调试过程中修改代码!)

    今天在使用pycharm调试的过程中发现调试到某行的时候直接跳过了 分析原因可能是在调试当中修改了代码,导致对应的行变了 以后应记住,不要在程序调试的过程中修改代码,如果要修改代码,应重新执行调试

  10. python删除文本中指定内容_Python实现删除文件中含“指定内容”的行示例

    本文实例讲述了Python实现删除文件中含指定内容的行.分享给大家供大家参考,具体如下: #!/bin/env python import shutil,sys,os darray = [ " ...

最新文章

  1. ORACLE告警日志文件
  2. 深度学习教程 TensorFlow and Deep Learning Tutorials
  3. ft232 mac usb串口驱动_记Macbook Pro配合FT232使用PN532模块
  4. 在linux操作系统中启动oracle数据库程序,Linux系统下Oracle数据库的安装和启动关闭操作教程...
  5. WPF 写一个提醒工具软件(完整项目)
  6. 学习分布式不得不会的ACP理论
  7. golang博客推荐
  8. 【CCCC】L2-012 关于堆的判断 (25分),,手写堆,二叉树编号,向上调整
  9. 为什么python如此火爆_Python为何如此火爆?
  10. 简单算法系列之完数的计算
  11. PRINCE2和PMP体系架构有何区别
  12. 论文阅读——SIPP: Safe Interval Path Planning for Dynamic Environments
  13. 高德地图JS-API开发—Marker添加及infoWindow处理
  14. 3. 'PipelinedRDD' object has no attribute '_jdf'
  15. 私链多节点的创建部署
  16. android源码分析
  17. Java使用模板导出带图片word文档
  18. svd与svd++联系与区别
  19. I tell you 如何下载文件
  20. antd右侧菜单栏点击更换icon

热门文章

  1. 打印机状态错误怎么办 打印机状态错误具体的解决方法
  2. 动态调试|Maccms SQL 注入分析(附注入盲注脚本)
  3. winrm java客户端_java通过winrm4j远程连接win执行命令
  4. 【每月总结】2021年6月
  5. ios描述文件安装的问题
  6. C#修改Windows系统时间
  7. 为什么现在社交电商这么火?
  8. 调试铁通与联通专线遇到的问题
  9. .xmind用什么软件打开_xps用什么软件打开(xps文件打开方法)
  10. c语言 n是什么作用,“\n\n”在c语言中是什么意思?