1. CUBEMX配置DCMI如下:


    生成代码。
  2. DCMI初始化代码如下:
void HAL_DCMI_MspInit(DCMI_HandleTypeDef* hdcmi)
{GPIO_InitTypeDef GPIO_InitStruct = {0};if(hdcmi->Instance==DCMI){/* USER CODE BEGIN DCMI_MspInit 0 *//* USER CODE END DCMI_MspInit 0 *//* Peripheral clock enable */__HAL_RCC_DCMI_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE();__HAL_RCC_GPIOH_CLK_ENABLE();__HAL_RCC_GPIOI_CLK_ENABLE();/**DCMI GPIO ConfigurationPA6     ------> DCMI_PIXCLKPH8     ------> DCMI_HSYNCPH9     ------> DCMI_D0PH10     ------> DCMI_D1PH11     ------> DCMI_D2PH12     ------> DCMI_D3PH14     ------> DCMI_D4PI4     ------> DCMI_D5PI5     ------> DCMI_VSYNCPI6     ------> DCMI_D6PI7     ------> DCMI_D7*/GPIO_InitStruct.Pin = GPIO_PIN_6;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;GPIO_InitStruct.Alternate = GPIO_AF13_DCMI;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_14;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;GPIO_InitStruct.Alternate = GPIO_AF13_DCMI;HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;GPIO_InitStruct.Alternate = GPIO_AF13_DCMI;HAL_GPIO_Init(GPIOI, &GPIO_InitStruct);void HAL_DCMI_MspInit(DCMI_HandleTypeDef* hdcmi)
{GPIO_InitTypeDef GPIO_InitStruct = {0};if(hdcmi->Instance==DCMI){/* USER CODE BEGIN DCMI_MspInit 0 *//* USER CODE END DCMI_MspInit 0 *//* Peripheral clock enable */__HAL_RCC_DCMI_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE();__HAL_RCC_GPIOH_CLK_ENABLE();__HAL_RCC_GPIOI_CLK_ENABLE();/**DCMI GPIO ConfigurationPA6     ------> DCMI_PIXCLKPH8     ------> DCMI_HSYNCPH9     ------> DCMI_D0PH10     ------> DCMI_D1PH11     ------> DCMI_D2PH12     ------> DCMI_D3PH14     ------> DCMI_D4PI4     ------> DCMI_D5PI5     ------> DCMI_VSYNCPI6     ------> DCMI_D6PI7     ------> DCMI_D7*/GPIO_InitStruct.Pin = GPIO_PIN_6;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;GPIO_InitStruct.Alternate = GPIO_AF13_DCMI;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_14;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;GPIO_InitStruct.Alternate = GPIO_AF13_DCMI;HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;GPIO_InitStruct.Alternate = GPIO_AF13_DCMI;HAL_GPIO_Init(GPIOI, &GPIO_InitStruct);/* DCMI DMA Init *//* DCMI Init */hdma_dcmi.Instance = DMA2_Stream1;                   //DMA2数据流1    hdma_dcmi.Init.Channel = DMA_CHANNEL_1;              //通道1hdma_dcmi.Init.Direction = DMA_PERIPH_TO_MEMORY;      //外设到存储器hdma_dcmi.Init.PeriphInc = DMA_PINC_DISABLE;           //外设非增量模式hdma_dcmi.Init.MemInc = DMA_MINC_DISABLE;           //存储器增量模式hdma_dcmi.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;       //外设数据长度:32位hdma_dcmi.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;     //存储器数据长度:8/16/32位hdma_dcmi.Init.Mode = DMA_CIRCULAR;                  //使用循环模式 hdma_dcmi.Init.Priority = DMA_PRIORITY_HIGH;          //高优先级hdma_dcmi.Init.FIFOMode = DMA_FIFOMODE_ENABLE;       //使能FIFOhdma_dcmi.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_HALFFULL;//使用1/2的FIFO hdma_dcmi.Init.MemBurst = DMA_MBURST_SINGLE;          //存储器突发传输hdma_dcmi.Init.PeriphBurst = DMA_PBURST_SINGLE;   //外设突发单次传输 if (HAL_DMA_Init(&hdma_dcmi) != HAL_OK){Error_Handler();}__HAL_LINKDMA(hdcmi,DMA_Handle,hdma_dcmi); //将DMA与DCMI联系起来/* USER CODE BEGIN DCMI_MspInit 1 */#define FSMC_LCD_ADDRESS      0x6C000002#define DCMI_DR_ADDRESS       0x50050028
//  DCMI_DMA_Init((u32)&LCD->LCD_RAM,0,1,DMA_MDATAALIGN_HALFWORD,DMA_MINC_DISABLE);//HAL_DMA_Start(&hdma_dcmi,DCMI_DR_ADDRESS,FSMC_LCD_ADDRESS,1);HAL_DMA_Start(&hdma_dcmi,(uint32_t)&DCMI->DR,FSMC_LCD_ADDRESS,1);/* USER CODE END DCMI_MspInit 1 */}}/* USER CODE BEGIN DCMI_MspInit 1 */#define FSMC_LCD_ADDRESS      0x6C000002#define DCMI_DR_ADDRESS       0x50050028
//  DCMI_DMA_Init((u32)&LCD->LCD_RAM,0,1,DMA_MDATAALIGN_HALFWORD,DMA_MINC_DISABLE);//HAL_DMA_Start(&hdma_dcmi,DCMI_DR_ADDRESS,FSMC_LCD_ADDRESS,1);HAL_DMA_Start(&hdma_dcmi,(uint32_t)&DCMI->DR,FSMC_LCD_ADDRESS,1);/* USER CODE END DCMI_MspInit 1 */}}

需要注意:数据地址为LCD->RAM,即0x6C000002地址。外设增量和寄存器增量禁用,LCD的数据长度为16为,所以设置为DMA_MDATAALIGN_HALFWORD,DMA_FIFO_THRESHOLD_HALFFULL。
HAL_DMA_Start(&hdma_dcmi,(uint32_t)&DCMI->DR,FSMC_LCD_ADDRESS,1); 设置源地址和目标地址,长度为1。

  1. OV9655配置如下:

/* QVGA 360x240 */
uint8_t OV9655_QVGA[][2]=
{0x00, 0x00,0x01, 0x80,0x02, 0x80,0x03, 0x02,0x04, 0x03,0x09, 0x01,0x0b, 0x57,0x0e, 0x61,0x0f, 0x40,0x11, 0x01,0x12, 0x62,0x13, 0xc7,0x14, 0x3a,0x16, 0x24,0x17, 0x18,0x18, 0x04,0x19, 0x01,0x1a, 0x81,0x1e, 0x00,0x24, 0x3c,0x25, 0x36,0x26, 0x72,0x27, 0x08,0x28, 0x08,0x29, 0x15,0x2a, 0x00,0x2b, 0x00,0x2c, 0x08,0x32, 0x12,0x33, 0x00,0x34, 0x3f,0x35, 0x00,0x36, 0x3a,0x38, 0x72,0x39, 0x57,0x3a, 0xcc,0x3b, 0x04,0x3d, 0x99,0x3e, 0x02,0x3f, 0xc1,0x40, 0xc0,0x41, 0x41,0x42, 0xc0,0x43, 0x0a,0x44, 0xf0,0x45, 0x46,0x46, 0x62,0x47, 0x2a,0x48, 0x3c,0x4a, 0xfc,0x4b, 0xfc,0x4c, 0x7f,0x4d, 0x7f,0x4e, 0x7f,0x4f, 0x98,0x50, 0x98,0x51, 0x00,0x52, 0x28,0x53, 0x70,0x54, 0x98,0x58, 0x1a,0x59, 0x85,0x5a, 0xa9,0x5b, 0x64,0x5c, 0x84,0x5d, 0x53,0x5e, 0x0e,0x5f, 0xf0,0x60, 0xf0,0x61, 0xf0,0x62, 0x00,0x63, 0x00,0x64, 0x02,0x65, 0x20,0x66, 0x00,0x69, 0x0a,0x6b, 0x5a,0x6c, 0x04,0x6d, 0x55,0x6e, 0x00,0x6f, 0x9d,0x70, 0x21,0x71, 0x78,0x72, 0x11,0x73, 0x01,0x74, 0x10,0x75, 0x10,0x76, 0x01,0x77, 0x02,0x7A, 0x12,0x7B, 0x08,0x7C, 0x16,0x7D, 0x30,0x7E, 0x5e,0x7F, 0x72,0x80, 0x82,0x81, 0x8e,0x82, 0x9a,0x83, 0xa4,0x84, 0xac,0x85, 0xb8,0x86, 0xc3,0x87, 0xd6,0x88, 0xe6,0x89, 0xf2,0x8a, 0x24,0x8c, 0x80,0x90, 0x7d,0x91, 0x7b,0x9d, 0x02,0x9e, 0x02,0x9f, 0x7a,0xa0, 0x79,0xa1, 0x40,0xa4, 0x50,0xa5, 0x68,0xa6, 0x4a,0xa8, 0xc1,0xa9, 0xef,0xaa, 0x92,0xab, 0x04,0xac, 0x80,0xad, 0x80,0xae, 0x80,0xaf, 0x80,0xb2, 0xf2,0xb3, 0x20,0xb4, 0x20,0xb5, 0x00,0xb6, 0xaf,0xb6, 0xaf,0xbb, 0xae,0xbc, 0x7f,0xbd, 0x7f,0xbe, 0x7f,0xbf, 0x7f,0xbf, 0x7f,0xc0, 0xaa,0xc1, 0xc0,0xc2, 0x01,0xc3, 0x4e,0xc6, 0x05,0xc7, 0x81,0xc9, 0xe0,0xca, 0xe8,0xcb, 0xf0,0xcc, 0xd8,0xcd, 0x93,0x12, 0x63,0x40, 0x10,0x15, 0x08,
};
uint8_t i2c_buffer[100]={0};
void OV9655_QVGAConfig(void)
{uint32_t i;// OV9655_WriteReg(OV9655_COM7, 0x80);// OV9655_Reset();
//  Delay(200);uint8_t temp_d=0x80;uint16_t temp_addr;HAL_I2C_Mem_Write(&hi2c2, 0x60, 0x12, I2C_MEMADD_SIZE_8BIT, &temp_d,1, 1000);HAL_Delay(20);/* Initialize OV9655 */for(i=0; i<(sizeof(OV9655_QVGA)/2); i++){temp_addr=OV9655_QVGA[i][0];HAL_I2C_Mem_Write(&hi2c2, 0x60, temp_addr, I2C_MEMADD_SIZE_8BIT, &OV9655_QVGA[i][1],1, 1000);// OV9655_WriteReg(OV9655_QQVGA[i][0], OV9655_QQVGA[i][1]);HAL_Delay(2);}temp_addr=0x55;temp_d=130;HAL_I2C_Mem_Write(&hi2c2, 0x60, temp_addr, I2C_MEMADD_SIZE_8BIT, &temp_d,1, 1000);
}
void DCMI_Start(void)  //开启DCMI使能,
{__HAL_DCMI_ENABLE(&hdcmi);DCMI->CR|=DCMI_CR_CAPTURE;          //DCMI捕获使能
}
  1. 主程序如下
int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_DMA_Init();MX_FMC_Init();MX_CRC_Init();MX_SDIO_SD_Init();MX_FATFS_Init();MX_DCMI_Init();MX_I2C2_Init();/* USER CODE BEGIN 2 */STM324xG_LCD_Init();  HAL_I2C_Mem_Read(&hi2c2, 0X61, 0x1C, I2C_MEMADD_SIZE_8BIT,i2c_buffer,2, 1000);HAL_I2C_Mem_Read(&hi2c2, 0X61, 0x0a, I2C_MEMADD_SIZE_8BIT,&i2c_buffer[3],1, 1000);OV9655_QVGAConfig();      LCD_SetCursor(0,0);
//    __HAL_DMA_ENABLE(&hdma_dcmi); //ê1?üDMA
//    __HAL_DCMI_ENABLE(&hdma_dcmi);
//  DCMI->CR |= 0x000040c0;
//      LCD_SetDisplayWindow(239, 319, 240, 320);
//    LCD_WriteReg(LCD_REG_3, 0x1038);LCD_WriteRAM_Prepare();       DCMI_Start();/// HAL_Delay(20);//DCMI_Start();//    STM_I2C_Init(I2C_2);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}

STM32 DCMI OV9655 直接在LCD显示相关推荐

  1. 基于stm32的DHT11温湿度采集LCD显示Proteus仿真

    *本设计:* 基于stm32温湿度采集Proteus仿真(仿真+程序) 仿真图protues 8.9 程序编译器:keil 5 编程语言:C语言 *设计编号:C0041* *功能描述:* 通过STM3 ...

  2. stm32专题二十一:LCD显示原理

    显示器的基本参数: 1 像素 像素是组成图像的最基本单元要素,显示器的像素指它成像最小的点,即液晶原理中提到的一个显示单元. 2 分辨率 一些嵌入式设备的显示器常常以"行像素值 x 列像素值 ...

  3. STM32: LCD显示

    一.TFTLCD概述 1.1 TFTLCD TFT-LCD 即薄膜晶体管液晶显示器.其英文全称为:Thin Film Transistor-Liquid Crystal  Display,该模块有如下 ...

  4. 【电赛备考】基于STM32控制的可调PWM输出+LCD显示

    情况分析 大三老油条一枚,大一时赶上19年国赛申请留校一月自学(划水)开赛以后就和队友参观了一下其他队伍准备的情况就愉快的回家了.(材料都没买),因为疫情的原因大二的省赛推迟到了大三.趁着考研压力还不 ...

  5. 如何使用STM32指南者LCD显示图片

    一.上面是不完整的程序,包括LCD GPIO的初始化,FSMC模拟时序结构体的设计还有写命令函数与写数据函数,这些函数都可以在B站上找到源程序,完成这些之后,接下来要说的是如何获得图片的十六进制,就是 ...

  6. STM32电子钟万年历Proteus仿真_LCD1602显示

    STM32电子钟万年历Proteus仿真_LCD1602液晶屏 (仿真+原理图+PCB+源码+报告) 仿真:protues 8.9 程序编译器:keil 5 编程语言:C语言 编号C0003 资料文件 ...

  7. 基于战舰V3的LCD显示实验详解和剖析

    基于STM32的4.3寸TFTLCD的使用 在这里,我们只剖析NT35510部分的代码. LCD显示方向设置函数 代码示例 //设置LCD显示方向 //dir:0,竖屏:1,横屏 void LCD_D ...

  8. 【嵌入式】STM32基于SPI通信协议OLED屏显示

    STM32基于SPI通信协议OLED屏显示 一.SPI协议和OLED介绍 1.SPI协议介绍 物理层 协议层 2.OLED显示屏介绍 二.显示个人学号姓名实验 1.题目要求 2.代码部分 1.完整代码 ...

  9. 基于stm32物联网开发板(2)--LCD屏幕

    基于stm32物联网开发板(2)–LCD屏幕 LCD应用展示: LCD屏幕应用 1.概述 屏幕尺寸为1.3寸,分辨率240*240,颜色格式RGB565,驱动IC:ST7789VW: 超大可视角度:大 ...

  10. stm32【 1.3寸LCD屏幕(2)】

    1.3寸LCD屏幕 显示图片 测试平台:STM32F103RFT6 库版本:官方标准库3.5.0版本 屏幕:中景园1.3寸24Pin接插式LCD屏幕 分辨率:240*240像素 驱动芯片:ST7789 ...

最新文章

  1. 广东省卫生2021副高考试成绩查询,中国卫生人才网:广东2021卫生资格考试成绩查询入口 -中国卫生人...
  2. BCompare注册文件+密钥被撤销解决方案
  3. Effective C++ 11 在operator=中处理“自我赋值” 笔记
  4. LazyListBoxHelper 动态分页
  5. 【团队管理】改造团队成员?
  6. GPS Essentials
  7. JS读取id和name的操作
  8. 数据库 三范式最简单最易记的解释
  9. stylus导入时 报错These relative modules were not found
  10. 同一个PC只能运行一个应用实例(考虑多个用户会话情况)
  11. [vue] 什么是虚拟DOM?
  12. pyotherside 试用
  13. 【转】linux命令:ifconfig命令
  14. Java Http编程
  15. oracle 时间函数
  16. Qt总结之十三:QUDPSocket详解
  17. Python之路-Day2
  18. 如何做好产品路标规划?这篇文章告诉你答案
  19. win10运行程序提示“为了对电脑进行保护,已经阻止此应用” 解决方法
  20. 趋势线与123法则应用图解,很多大佬偷偷在用

热门文章

  1. python - 乌龟吃鱼游戏
  2. HDU 5144 NPY and shot(三分法)
  3. int content=Integer.parseInt(jtf.getText().trim());
  4. 微信域名防封、域名检测接口api、域名跳转技术、360防拦截揭秘(一)------域名防封的核心技术
  5. WARNING:tensorflow:sample_weight modes were coerced from ... to [‘...‘]
  6. Redis源码分析之双索引机制
  7. python名片系统_初识python-名片管理系统v1.0
  8. Python 代理验证程序(For 无忧代理) 多线程版
  9. 密码生成器(字母+数字+特殊字符)
  10. mysql odbc 免安装_MySQL免安装版配置