level 1
OV7670配置代码:
voidset_Cmos7670reg(void){
//1.软件复位
OV7670_WriteReg(0x12,0x80);HAL_Delay(50);
//2.时钟配置//
OV7670_WriteReg(0x11,0x01);//CLKRC:时钟分频=1(不分频)
OV7670_WriteReg(0x6B,0x40);//DBLV:PLL旁路(不使用倍频)
//3.输出格式:RGB565/
OV7670_WriteReg(0x12,0x04);//COM7:RGB输出,不启用预设缩放模式
OV7670_WriteReg(0x40,0xD0);//COM15:RGB565全范围输出[00]~[FF]
OV7670_WriteReg(0x8C,0x00);//RGB444:禁用(保持RGB565)
//4.★★★开启缩放(Scaling)-核心配置★★★
OV7670_WriteReg(0x0C,0x04);//COM3:开启缩放(bit3=1)
OV7670_WriteReg(0x3E,0x1A);//COM14://bit4=1:使能DCW和缩放PCLK控制//bit3=1:手动缩放使能//bit2-0=010:PCLK4分频
OV7670_WriteReg(0x70,0x3A);//SCALING_XSC:水平缩放系数
OV7670_WriteReg(0x71,0xb5);//SCALING_YSC:垂直缩放系数0xb5彩条测试
OV7670_WriteReg(0x72,0x22);//DCWCTR://bit5-4=01:垂直2:1子采样//bit1-0=01:水平2:1子采样
OV7670_WriteReg(0x73,0xF2);//SCALING_PCLK_DIV://bit3=1:旁路DSP时钟分频器//bit2-0=010:PCLK分频系数=2
//5.窗口寄存器(保持完整视野,不裁剪)//
OV7670_WriteReg(0x17,0x11);//HSTARThigh8bits
OV7670_WriteReg(0x18,0x61);//HSTOPhigh8bits
OV7670_WriteReg(0x32,0x00);//HREFlowbits
OV7670_WriteReg(0x19,0x03);//VSTRThigh8bits
OV7670_WriteReg(0x1A,0x7B);//VSTOPhigh8bits
OV7670_WriteReg(0x03,0x0A);//VREFlowbits
2026年06月26日 16点06分
2
level 1
接楼上OV7670代码:
//6.自动控制功能(AGC/AEC/AWB)
OV7670_WriteReg(0x13,0xE4);//COM8:0xE7//bit2=1:AGC使能//bit1=1:AWB使能//bit0=1:AEC使能
OV7670_WriteReg(0x3D,0x00);//COM13:0x88//bit7=1:伽马使能//bit6=1:UV饱和度自动调整
OV7670_WriteReg(0x14,0x4A);//COM9:AGC增益上限=8x
//7.信号极性(根据你的DCMI配置调整)/
OV7670_WriteReg(0x15,0x03);//COM10://bit1=0:VSYNC正极性//bit0=0:HREF正极性//bit5=0:PCLK自由运行
OV7670_WriteReg(0x3D,0x00);
//8.图像质量增强//
OV7670_WriteReg(0x3F,0x00);//EDGE:边缘增强(关闭)
OV7670_WriteReg(0x4C,0x00);//DNSTH:降噪强度(关闭)
OV7670_WriteReg(0x56,0x40);//CONTRAST:对比度(默认)
OV7670_WriteReg(0x55,0x00);//BRIGHT:亮度(默认)
//9.防闪烁(50Hz/60Hz)
OV7670_WriteReg(0x9D,0x99);//BD50ST:50Hz防闪烁值
OV7670_WriteReg(0x9E,0x7F);//BD60ST:60Hz防闪烁值
OV7670_WriteReg(0x3B,0x0A);//COM11:启用自动50/60Hz检测
//10.PCLK延时(根据走线长度调整)
OV7670_WriteReg(0xA2,0x02);//SCALING_PCLK_DELAY:PCLK延时2个周期
//11.额外色彩修正(可选)
OV7670_WriteReg(0x4F,0x80);//MTX1:色彩矩阵系数1
OV7670_WriteReg(0x50,0x80);//MTX2:色彩矩阵系数2
OV7670_WriteReg(0x51,0x00);//MTX3:色彩矩阵系数3
OV7670_WriteReg(0x52,0x22);//MTX4:色彩矩阵系数4
OV7670_WriteReg(0x53,0x5E);//MTX5:色彩矩阵系数5
OV7670_WriteReg(0x54,0x80);//MTX6:色彩矩阵系数6
OV7670_WriteReg(0x58,0x1E);//MTXS:矩阵系数符号
HAL_Delay(100);
volatileuint8_tid12=OV7670_ReadReg(0x12);volatileuint8_tid122=OV7670_ReadReg(0x12);}
2026年06月26日 16点06分
3
level 1
LCD配置代码:
void LCD_Init(void) {
// 硬件复位
HAL_GPIO_WritePin(LCD_RST_GPIO_Port, LCD_RST_Pin, GPIO_PIN_RESET);
HAL_Delay(100);
HAL_GPIO_WritePin(LCD_RST_GPIO_Port, LCD_RST_Pin, GPIO_PIN_SET); HAL_Delay(120); // 初始化序列
LCD_WriteCmd(0x01);
HAL_Delay(120); LCD_WriteCmd(0x11); HAL_Delay(120);
LCD_WriteCmd(0x36); LCD_WriteDataByte(0xA8); // 方向可根据需要调整 0x68
LCD_WriteCmd(0x3A); LCD_WriteDataByte(0x55);// RGB565 0x55
LCD_WriteCmd(0x2A); // 列地址(X)
LCD_WriteDataByte(0x00); LCD_WriteDataByte(0x00); // 起始列 0
LCD_WriteDataByte(0x00); LCD_WriteDataByte(0x9F); //
LCD_WriteCmd(0x2B); // 行地址(Y)
LCD_WriteDataByte(0x00); LCD_WriteDataByte(0x00); // 起始行 0
LCD_WriteDataByte(0x00); LCD_WriteDataByte(0x7F); //
LCD_WriteCmd(0x29);
HAL_Delay(20);
// 点亮背光 HAL_GPIO_WritePin(BLK_GPIO_Port, BLK_Pin, GPIO_PIN_SET);}
2026年06月26日 16点06分
4
level 1
上面说错了数据高低位互换是放在while主循环中
while (1) {
if (frame_ready) {
frame_ready = 0;
uint32_t total_pixels = OV7670_W * OV7670_H;
for (uint32_t i = 0; i < total_pixels; i++) {
camera_buffer[i] =__REV16(camera_buffer[i]);
}
// 刷屏到 LCD
LCD_SetWindow(0, 0, 154, 120);
LCD_WriteData_Stream(camera_buffer, total_pixels); // 确保 SPI 硬件发送完全结束
while(hspi2.State == HAL_SPI_STATE_BUSY_TX); // 妥善拉高 LCD 片选,结束本次数据流对话
HAL_GPIO_WritePin(LCD_CS_GPIO_Port, LCD_CS_Pin, GPIO_PIN_SET); // 重新开启下一帧捕获
Start_Camera_Capture();
camera_buffer[i] 就是7670传回来的数据,16bit分两次8bit传输,大端先传所以需要互换
2026年06月26日 16点06分
5
吧务
level 13
彩条正常说明DCMI和LCD底子没问题,实拍串色大概率是OV7670的RGB565位域跟LCD对不上,或者R/G通道错位了。建议抓一帧原始数据看看各通道的bit分布,重点检查OV7670格式寄存器配置。调摄像头颜色就是细活,慢慢排查~
2026年06月28日 02点06分
7