全流程视频:https://www.you删tu掉be.com/watch?v=oVzuphK4haQ(原视频采用的LCD屏幕为st7725,本文改成st7789,强烈推荐看完再来看这篇文章)
源代码和指引:https://www.micropeta.com/video131
github上点亮ov7670的源码:https://github.com/iwatake2222/DigitalCamera_STM32
LCD st7789点亮代码:https://github.com/Floyd-Fish/ST7789-STM32
ov7670有3V3、GND、SCL、SDA、VS、HS、PLK、XLK、D7、D6、D5、D4、D3、D2、D1、D0、RET、PWDN共十八个引脚
配置如下(各位选择不必和我一致)
3V3——3.3V
GND——GND
SCL——PB10(I2C2_SCL)
SDA——PC12(SDA_SDA)
VS——PB7(DCMI_VSYNC)
HS——PA4(DCMI_HSYNC)
PLK——PA6(DCMI_PLXCLK)
XLK——PA8(RCC_MCO_1)
D7——PB9(DCMI_D7)
D6——PB8(DCMI_D6)
D5——PD3(DCMI_D5)
D4——PC11(DCMI_D4)
D3——PE1(DCMI_D3)
D2——PC8(DCMI_D2)
D1——PC7(DCMI_D1)
D0——PC6(DCMI_D0)
RET——PD11(CAMERA_RESET)
PWDN——GND
LCD st7789配置(我的LCD没有CS引脚,所以要将A5、A7改成上拉输出模式,正常的应该不用)
GND——GND
VCC——3V3
SCL——PA5(SPI1_SCK)
SDA——PA7(SPI1_MOSI)
RES——PC5
DC——PC4
根据自己的使用习惯保存并生成代码
/* USER CODE BEGIN Includes */
#include "common.h"
#include "ov7670.h"
#include "st7789.h"
#include "fonts.h"
/* USER CODE END Includes */
/* USER CODE BEGIN PV */
#define MAX_PICTURE_BUFF 19200//160*120
uint16_t pBuffer[MAX_PICTURE_BUFF];
/* USER CODE END PV */
/* USER CODE BEGIN 2 */
HAL_Delay(1000);
ST7789_Init();
ST7789_Test();
HAL_Delay(1000); // Test the display
ov7670_init(&hdcmi, &hdma_dcmi, &hi2c2);
ov7670_config(OV7670_MODE_QVGA_RGB565);
ov7670_stopCap();
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_DCMI_Start_DMA(&hdcmi, DCMI_MODE_SNAPSHOT, pBuffer, MAX_PICTURE_BUFF/2);
HAL_Delay(250);
//Wait for DMA to complete // picture pBuffer size 120*160=19200 is now available, we can transmit // or display in lcd as shown below
int pixel = 0;
for( int x = 0; x < 120; x++ )
{
for( int y = 159; y > -1; y-- )
{
ST7789_DrawPixel(x, y, pBuffer[pixel]);
pixel++;
}
}
}
/* USER CODE END WHILE */
以下是效果展示图
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。