第45章dcmi—ov2640摄像头—零死角玩转stm32-f429系列

第45章dcmi—ov2640摄像头—零死角玩转stm32-f429系列

在这篇文章中,我将介绍如何在STM32-F429系列微控制器上使用DCMI-OV2640摄像头。我们将展示如何捕捉视频流和录制图像,并将它们显示在TFT显示屏上,以及使用DMA传输数据。最终,我们能够实现零死角观看实时视频。

硬件配置

要实现这个项目,我们需要以下硬件组件:

  • STM32F429I-DISC1开发板
  • OV2640摄像头模块
  • ILI9341 TFT显示器

连接摄像头模块到开发板的DCMI接口。接下来,将TFT显示器连接到开发板的TFT接口。

软件配置

为了编写代码,我们需要安装STM32CubeIDE。将库文件添加到我们的项目中,以及创建所需的数据类型和变量。

/* Size of the frame */
#define IMG_WIDTH  320
#define IMG_HEIGHT 240

/* DMA buffer memory */
#define DMA_BUFFER_SIZE          ((uint32_t)(IMG_HEIGHT*IMG_WIDTH*2))

/* DCMI buffer memory */
ALIGN_32BYTES(uint8_t output_frame_buffer[IMG_HEIGHT][IMG_WIDTH*2]);

启动DCMI

启动DCMI的第一步是读取摄像头的ID。如果成功返回ID,我们就可以开始配置和启动DCMI。

/* Initialize the OV2640 camera module */
uint8_t CAMERA_Init(void) {
    uint8_t value = 0xFF;

    /*Read ID of Camera module via I2C*/
    ......
    if(CAMERA_ReadID() == OV2640_ID) {
        /*Configure the DCMI to interface with the OV2640 camera module*/
        ......
    }
    else {
        /* Camera module is not detected, abort */
        return 0;
    }
    return 1;
}

开始捕捉

使用以下代码开始捕捉视频流并将其存储在缓冲区中:

/**
  * @brief  Start the DMA transfer
  * @param  None
  * @retval None
  */
static void Start_DMA_Transfer(void)
{ 
  /* Configure the DMA2_Stream1 channel1 to transfer data from DCMI to the LCD */
  ......

  /* Clear Transfer complete flag */
  __HAL_DMA_CLEAR_FLAG(&hdma_dcmi, DMA_FLAG_TCIF1);

  /* Enable the DMA2_Stream1 channel */
  HAL_DMA_Start_IT(&hdma_dcmi, (uint32_t)&DCMI->DR, (uint32_t)output_frame_buffer, DMA_BUFFER_SIZE); 

  /* Start the DCMI Snapchot mode */
  DCMI_SnapshotMode_Enable(); 
  DCMI_Cmd(ENABLE);
}

显示视频流

通过将缓冲区中的数据传输到TFT屏幕,我们可以实现将视频流实时显示在屏幕上。

/**
  * @brief  Manages the DMA Transfer
  * @param  None
  * @retval None
  */
void BSP_LCD_DMA2D_IRQHandler(void)
{
  /*Transfer of DMA Finished*/
  if(LL_DMA_IsActiveFlag_TC2(DMA2_Stream0))
  {
    LL_DMA_ClearFlag_TC2(DMA2_Stream0);
    /*Convert Picture to ARGB8888 to Display On LCD*/
    DMA2D_CopyBuffer((uint32_t *)output_frame_buffer, (uint32_t *)BSP_LCD_GetFrameBuffer(), IMG_WIDTH, IMG_HEIGHT);      
  }
}

总结

在这篇文章中,我们学习了如何在STM32F429I-DISC1上使用DCMI和OV2640摄像头。我们成功地捕获了视频流,将其显示在了TFT显示器上,并实现了零死角观看实时视频的功能。参考我们的代码并开始实现你自己的项目吧!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:第45章dcmi—ov2640摄像头—零死角玩转stm32-f429系列 - Python技术站

(0)
上一篇 2023年3月28日
下一篇 2023年3月28日

相关文章

  • win10安装office鼠标右键没有新增office项该怎么办?

    问题描述 在Win10中安装Office后发现鼠标右键菜单中没有新增Office项。 解决方案 1. 手动启用Office插件 首先打开Office软件,在菜单栏中找到“文件”选项,点击进入。 然后在“文件”界面中点击“选项”按钮。 在“选项”界面中,选择“自定义功能区”,并在右侧找到“主选项卡”下的“右键菜单”。 勾选“右键菜单”下的“禁用此命令”旁边的框…

    other 2023年6月27日
    00
  • 一文学会如何将Python打包后的exe还原成.py

    如何将Python打包后的exe还原成.py 在某些情况下,你可能需要将Python打包后的可执行文件(exe)还原成原始的.py文件。这可能是因为你丢失了源代码文件,或者想要了解程序的实现细节。虽然将exe还原成.py并不总是完全可行的,但在某些情况下,你可以通过以下步骤尝试还原。 步骤一:使用反编译工具 首先,你需要使用一个反编译工具来尝试将exe文件还…

    other 2023年8月6日
    00
  • Microsoft Office 2007 SP1 简体中文正式版 升级包官方下载地址

    Microsoft Office 2007 SP1 简体中文正式版 升级包官方下载地址攻略 Microsoft Office 2007 SP1 简体中文正式版 升级包是用于更新 Microsoft Office 2007 到 Service Pack 1 版本的官方升级包。下面是详细的攻略,包括下载地址和示例说明。 下载地址 你可以通过以下步骤获取 Micr…

    other 2023年8月4日
    00
  • java判断class子类或父类的实例方法

    要判断Java中的一个实例方法属于其父类还是子类,可以通过利用Java反射API中的getDeclaredMethod()方法实现。 首先,在Java中,一个对象的所属类可以通过instanceof关键字来判断。但是,如果需要定位该实例方法是被哪个类所声明的,就需要使用Java反射API了。要使用Java反射API获取方法,需要使用Class类的 getDe…

    other 2023年6月26日
    00
  • mysql 5.7.11 winx64安装配置教程

    MySQL 5.7.11 winx64安装配置教程 MySQL是一种常用的关系型数据库管理系统,本文将针对Windows系统下MySQL 5.7.11 winx64版本的安装和配置进行详细讲解。 1. 下载MySQL 到MySQL官网下载MySQL Community Server 5.7.11 winx64版本。 2. 安装MySQL 运行下载好的MySQ…

    other 2023年6月20日
    00
  • python判定为空

    Python判定为空 在Python编程中,经常会遇到需要判断一个变量是否为空的情况。常见的空值包括None、空字符串、空列表、空字典、空元组等。本文将介绍在Python中判断各种空值的方法。 判断None 在Python中,用关键字None表示空值。当一个变量的值为None时,可以使用is或is not来判断。例如: a = None if a is No…

    其他 2023年3月28日
    00
  • es批量更新数据刷新

    es批量更新数据刷新 Elasticsearch(简称ES)被广泛应用在各种大数据应用场景中,基于其出色的搜索能力、灵活的数据结构和高性能的存储和检索能力而倍受青睐。在使用 ES 过程中,数据的批量更新和刷新是非常常见的操作,可以提高数据变更的效率和速度,本文将介绍 ES 批量更新数据刷新的具体实现方法。 什么是ES批量更新数据刷新 ES的一个特点就是,当文…

    其他 2023年3月29日
    00
  • 深入理解java中的拷贝机制

    深入理解Java中的拷贝机制 Java中的拷贝机制是一项非常重要的特性,它能够帮助我们更加高效地开发程序并减少错误。本文将深入讲解Java中的拷贝机制,包括深拷贝和浅拷贝的概念、拷贝的分类、常用的拷贝方式以及如何正确地使用它们。 拷贝的概念 在深入了解Java中拷贝机制之前,我们先来了解一些基本概念。 1.浅拷贝 浅拷贝是指将一个对象复制到另一个新对象中,但…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部