第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技术站