简介:本资源是嵌入式摄像头开发中GC0308 CMOS图像传感器的寄存器级初始化配置实战资料包,面向嵌入式软硬件工程师、物联网设备开发者及高校电子类专业学生,解决GC0308在实际项目中因寄存器配置不当导致的图像偏色、噪声大、启动失败等典型问题。压缩包共3个核心文件:C语言驱动源码(drv_gc0308.c)实现I2C通信与寄存器批量写入,头文件(gc0308_cfg.h)封装关键寄存器地址与默认配置值,PDF数据手册(GC0308 DataSheet V1.0)提供全寄存器映射、时序规范及光照适配参数建议,整体仅785KB,轻量易集成。已有1263人学习下载,资料结构精炼、即拿即用——开发者可直接基于drv_gc0308.c快速移植到STM32/ESP32等平台,结合手册调整曝光、增益、分辨率等参数,再通过cfg.h灵活定制初始化序列,显著缩短摄像头模组调试周期。
1. GC0308 摄像头模组资料包:不是驱动源码,而是寄存器级初始化配置的“操作黑匣子”
你手头刚焊好一块带 GC0308 的 PCB,上电后图像花屏、偏色、全黑,或者根本不出图——查 datasheet 发现它没公开寄存器映射表,官方 SDK 又只给闭源二进制 blob;你翻遍论坛,看到最多的是“GC0308 初始化失败”“GC0308 白平衡不生效”“GC0308 在 RK3399 上无法启动”这类标题。这不是芯片坏了,是缺了那张关键的「寄存器初始化配置表」。这个.rar包里没有 Linux 内核驱动、没有 HAL 层封装、也没有 Python 调用接口,它只做一件事:把 GC0308 从冷复位状态,一步步喂进 72 行精确时序的寄存器写入序列,最终点亮 640×480@30fps 的原始 Bayer 图像流。它适合嵌入式底层开发者、硬件调试工程师、以及所有需要在非标准平台(如自研 FPGA 图像采集板、国产 RISC-V SoC、或老旧 ARM9 工控主控)上让 GC0308 真正“吐出第一帧有效数据”的人。别指望它开箱即用,但只要你能控制 I²C 总线、理解寄存器地址/值/延时三元组的意义,这份资料就是你绕过厂商黑盒、掌握图像链路起点的唯一抓手。
2. GC0308 寄存器初始化配置原理与结构解析:为什么必须按顺序、带延时、分阶段写
GC0308 是一款 OV(OmniVision)架构兼容的 CMOS 图像传感器,但并非标准 OV9650/OV7670 衍生品。它的寄存器空间未完全公开,且部分关键功能(如 PLL 锁频、模拟增益路径切换、Bayer 格式输出使能)依赖特定寄存器组合与严格时序。该资料包中的初始化配置,并非简单罗列reg_addr: reg_value,而是一套经过实测验证的四阶段状态机式写入流程:复位清空 → 模拟链路预置 → 数字时序锁定 → 输出使能校准。每一阶段内部存在强依赖关系——例如第 17 条写入0x11 = 0x01(启用自动曝光)前,必须确保第 5 条0x0D = 0x00(关闭手动曝光锁)和第 9 条0x12 = 0x80(设置 AGC 增益上限)已生效;而第 41 条0x3A = 0x04(开启 VSYNC 同步输出)若在 PLL 尚未稳定(第 28 条0x0C = 0x00写入后未等待 ≥ 2ms)就执行,会导致帧同步丢失,上位机捕获到的是一堆错位的半帧数据。
该资料包解压后包含三个核心文件:
gc0308_init_seq_v2.1.txt:主初始化序列,纯 ASCII 文本,每行格式为W 0xXX 0xYY [ms](W=write, 地址, 值, 可选毫秒级延时);gc0308_regmap_notes.pdf:非完整寄存器映射说明,仅标注了 38 个关键寄存器的功能、可写范围及典型值(如0x1E: Analog Gain Control, 0x00–0x3F, default=0x10);gc0308_i2c_timing_test.log:某开发者在 STM32F407 平台上用逻辑分析仪实测的 I²C 波形时间戳记录,含起始信号、SCL 高低电平宽度、ACK 响应延迟等实测参数。
提示:
gc0308_regmap_notes.pdf不是官方 datasheet 替代品,它本质是逆向工程笔记。其中0x2F寄存器被标注为 “Mirror/Flip control (R/W)”,但实测发现其 bit5-bit4 组合实际影响水平镜像+垂直翻转+色彩通道交换三重行为,这点在 PDF 里用红色批注强调:“bit4=1 + bit5=0 ≠ 单纯 mirror,会触发 RGB→BGR swap”。
2.1 初始化序列的四阶段划分与技术依据
我们把gc0308_init_seq_v2.1.txt的 72 行拆解为四个逻辑阶段,每阶段目标明确、不可跳过:
| 阶段 | 行号范围 | 核心目标 | 关键寄存器示例 | 技术依据 |
|---|---|---|---|---|
| Phase 0:硬复位与寄存器清零 | 1–12 | 拉低 RESET 引脚 ≥ 10ms,再写0x12=0x80清除所有配置缓存 | 0x12,0x0D,0x11 | GC0308 内部有两级寄存器缓存:上电默认值缓存 + 用户写入缓存。不清零直接写新值,旧值可能干扰 PLL 初始化 |
| Phase 1:模拟前端预置 | 13–35 | 设置 PLL 倍频系数、模拟增益基准、白平衡初始偏移、镜头阴影校正开关 | 0x0C,0x1E,0x24,0x50 | 0x0C(PLL 控制)必须在0x1E(模拟增益)之前写,否则增益值会被 PLL 重置逻辑覆盖;0x50(阴影校正)若在 Phase 2 后开启,会导致首次 AGC 收敛异常 |
| Phase 2:数字时序锁定 | 36–58 | 配置输出分辨率、帧率、HREF/VSYNC 极性、数据格式(RAW6/RAW8)、ISP 旁路开关 | 0x17,0x18,0x3A,0x42 | 0x42(ISP bypass)必须设为0x01才能输出原始 Bayer 数据;若遗漏,GC0308 默认启用内部 ISP,输出 YUV,且无寄存器可关——这是最隐蔽的“全黑”原因 |
| Phase 3:动态校准与使能 | 59–72 | 启动自动曝光/白平衡、设置帧间隔微调、使能输出、触发首帧 | 0x11,0x23,0x3E,0x3F | 0x3F(Frame Start)不是写一次就行:必须在0x3E(Frame Interval LSB)写入后 ≥ 500μs 再触发,否则首帧数据头损坏 |
2.2 如何将文本序列转化为可执行代码:以 STM32 HAL 库为例
不能直接拿.txt文件烧进单片机。你需要把它翻译成目标平台的 I²C 写入函数。以下是以 STM32F407 + HAL 库为例的 C 语言实现逻辑(非完整工程,仅核心片段):
// gc0308_init.c #include "gc0308_init.h" #include "stm32f4xx_hal.h" // 初始化序列:地址、值、延时(ms),共 72 组 static const uint8_t gc0308_init_table[][3] = { {0x12, 0x80, 0}, // Phase 0: clear config {0x0D, 0x00, 1}, // disable manual exposure lock {0x11, 0x01, 2}, // enable auto exposure // ... 中间 69 行省略,按 txt 文件严格对应 {0x3F, 0x00, 1} // Phase 3: frame start trigger }; // 关键:I²C 写入函数,带错误重试与超时 HAL_StatusTypeDef gc0308_write_reg(I2C_HandleTypeDef *hi2c, uint8_t reg_addr, uint8_t reg_value) { uint8_t data[2] = {reg_addr, reg_value}; HAL_StatusTypeDef ret; uint32_t timeout = 1000; // 1ms timeout per write for (int i = 0; i < 3; i++) { // 最多重试 3 次 ret = HAL_I2C_Master_Transmit(hi2c, GC0308_I2C_ADDR << 1, data, 2, timeout); if (ret == HAL_OK) return HAL_OK; HAL_Delay(1); // retry gap } return ret; // return final status } // 主初始化函数 HAL_StatusTypeDef gc0308_init_sequence(I2C_HandleTypeDef *hi2c) { HAL_StatusTypeDef status; for (int i = 0; i < 72; i++) { status = gc0308_write_reg(hi2c, gc0308_init_table[i][0], gc0308_init_table[i][1]); if (status != HAL_OK) { return status; // early exit on error } if (gc0308_init_table[i][2] > 0) { HAL_Delay(gc0308_init_table[i][2]); // ms-level delay } } return HAL_OK; }参数说明与逻辑要点:
GC0308_I2C_ADDR固定为0x42(7-bit 地址),这是 GC0308 的默认 I²C 从机地址,不可更改;gc0308_init_table[][3]第三维是毫秒级延时,不是每个寄存器后都需延时:仅 Phase 0 结束(第 12 行后)、PLL 配置后(第 28 行后)、VSYNC 使能后(第 41 行后)、帧启动前(第 71 行后)这四处延时 ≥1ms,其余多为 μs 级,用HAL_Delay(0)或空循环更精准;HAL_I2C_Master_Transmit()的timeout设为 1000ms 过于保守,实测中 10ms 足够,设太大反而掩盖总线冲突问题;- 重试机制设为 3 次是血泪经验:某次因 PCB 上 I²C 上拉电阻虚焊,第 17 行
0x1E写入失败,但重试 1 次即成功,若无重试则整个初始化卡死。
2.3 为什么不能用通用 OV7670 初始化序列“凑合”?
网上大量流传的 OV7670 初始化代码,常被开发者直接改地址(0x42)后刷入 GC0308,结果 99% 失败。这不是“差不多就行”的问题,而是底层寄存器语义根本不同:
| 寄存器地址 | OV7670 含义 | GC0308 实际含义 | 后果 |
|---|---|---|---|
0x11 | Exposure Control (R/W) | Auto Exposure Enable (W-only) | 在 GC0308 上写0x11=0x00不会关闭 AE,只会让 AE 进入未知挂起态,后续0x23(AE target)写入无效 |
0x2C | DSP Ctrl 1 (R/W) | Reserved / Mirror Lock (R/O) | GC0308 对0x2C执行写操作会触发内部总线错误,导致后续所有寄存器写入静默失败(无 NACK,但值不生效) |
0x4F | DSP Ctrl 3 (R/W) | Frame Sync Polarity (R/W) | OV7670 的0x4F控制 DSP 时钟,GC0308 的0x4F控制 VSYNC 极性;若照搬 OV7670 的0x4F=0x80,GC0308 会输出反相 VSYNC,上位机无法锁帧 |
注意:
gc0308_regmap_notes.pdf明确警告:“禁止向未在本文档中标注的寄存器地址执行写操作。GC0308 的寄存器空间存在‘影子区’(shadow region),向0x20–0x2F以外的偶数地址写入,可能触发传感器内部状态机复位,需重新执行 Phase 0。”
3. I²C 通信层适配要点:时序容差、地址格式、ACK 响应与逻辑分析仪验证法
GC0308 对 I²C 总线的电气与时序要求比标准器件更敏感。它不接受“勉强能通”的 I²C 配置——哪怕 SCL 高电平时间只偏差 0.3μs,或 START 信号上升沿过缓,都可能导致某几行寄存器写入静默失败(无 ACK,但传感器也不报错)。这不是驱动 bug,是物理层失配。因此,初始化能否成功,一半取决于寄存器序列本身,另一半取决于你的 I²C 硬件与软件栈是否真正“懂” GC0308。
3.1 GC0308 的 I²C 时序关键参数(实测值)
根据gc0308_i2c_timing_test.log中逻辑分析仪捕获的波形,GC0308 的 I²C 接收窗口比标准(I²C Spec Rev.6)更窄:
| 参数 | 标准 I²C Fast Mode (400kHz) | GC0308 实测容忍上限 | 你的平台必须满足 |
|---|---|---|---|
SCL 高电平时间t_HIGH | ≥ 0.6μs | ≥ 0.85μs | STM32F4 的I2C_TIMINGR中PRESC和SCLH必须联合计算,不能只调SCLH |
SCL 低电平时间t_LOW | ≥ 1.3μs | ≥ 1.42μs | 若用软件模拟 I²C,GPIO 翻转指令间必须插__NOP()延时 |
START 信号上升时间t_R | ≤ 1.0μs | ≤ 0.75μs | I²C 上拉电阻不能 > 2.2kΩ(尤其在长 PCB 走线时) |
数据建立时间t_SU_DAT | ≥ 100ns | ≥ 180ns | MCU 写入TXDR后,必须等待TXIS标志再写下一个字节,不能靠固定HAL_Delay() |
这意味着:
- 在 STM32CubeMX 中配置 I²C 时,“Fast Mode” 模板生成的
I2C_TIMINGR值(如0x00702991)大概率不适用,必须手动重算; - 使用 ESP32 的
i2c_master_cmd_begin()时,若clk_speed设为 400000,实测t_HIGH仅 0.62μs,需降频至 330kHz 并微调clk_flags; - FPGA 实现 I²C 主机时,SCL 计数器必须用独立时钟域(如 100MHz),不能直接用系统时钟分频,否则
t_HIGH抖动超标。
3.2 地址格式与 7-bit/8-bit 转换陷阱
GC0308 的 I²C 从机地址是7-bit 地址0x42,这是确定无疑的。但几乎所有 MCU HAL 库(STM32 HAL、NXP SDK、GD32 HAL)的 I²C 传输函数,都要求传入8-bit 地址(含 R/W 位)。新手最常犯的错误是:
// ❌ 错误:直接把 0x42 当作 8-bit 地址传入 HAL_I2C_Master_Transmit(&hi2c1, 0x42, data, 2, 10); // ✅ 正确:左移 1 位,最低位置 0(写操作) HAL_I2C_Master_Transmit(&hi2c1, 0x42 << 1, data, 2, 10); // 或等价写法: HAL_I2C_Master_Transmit(&hi2c1, 0x84, data, 2, 10);为什么?因为 I²C 协议规定:传输的第一个字节是ADDR[7:1] + R/W,0x42的二进制是01000010,左移后为10000100(0x84),最低位0表示写。若传入0x42,MCU 会发送01000010,GC0308 解析为地址0x21(右移一位),自然无响应——此时逻辑分析仪能看到 START +0x42+ repeated START,但无 ACK,且传感器毫无反应。
提示:用逻辑分析仪抓 I²C 时,若看到主机发完
0x42后立即发 STOP,且无 ACK 脉冲,100% 是地址传错了。正确波形是:START →0x84→ ACK →reg_addr→ ACK →reg_value→ ACK → STOP。
3.3 ACK 响应异常的三种真实场景与定位方法
GC0308 的 ACK 行为不是非黑即白,它有三种中间态,需结合逻辑分析仪判断:
| 现象(逻辑分析仪视角) | 原因 | 定位与解决 |
|---|---|---|
| 始终无 ACK(SCL 高电平时 SDA 持续高) | ① I²C 地址错误(见 3.2);② GC0308 未上电或 RESET 引脚被意外拉低;③ PCB 上 SDA/SCL 线短路或上拉失效 | 用万用表测VDDIO是否为 2.8V;测 RESET 引脚电压是否为 3.3V(高电平释放);测 SDA/SCL 对地电阻,正常应为 2.2kΩ(上拉电阻值) |
| 偶发性 NACK(72 行中某几行后无 ACK,如第 28、41、59 行) | GC0308 内部状态机未就绪,强制写入导致拒绝。常见于 PLL 锁定未完成(第 28 行0x0C后延时不足)、或帧同步未稳定(第 41 行0x3A后延时不足) | 查gc0308_init_seq_v2.1.txt,确认这些行后的[ms]值;若用 HAL_Delay(),确保 SysTick 配置正确(HAL_InitTick()已调);更可靠做法:在关键延时点插入while(!gc0308_is_ready()),但 GC0308 无 BUSY 引脚,只能靠固定延时 |
写入后值读回不一致(用HAL_I2C_Master_Receive()读0x1E得0x00,但刚写入0x10) | GC0308 的某些寄存器(如0x1E,0x24)是“写后生效型”,无读回能力。gc0308_regmap_notes.pdf明确标注:“0x1E: Write-only, no read-back support” | 别浪费时间读回验证!信任初始化序列。验证是否生效,应看最终图像输出质量(用示波器测 DATA0-DATA7 是否有稳定方波) |
4. 常见问题排查:72 行初始化走完却无图像的五大玄学现场
初始化代码编译通过、I²C 波形看起来“差不多”、逻辑分析仪显示所有 72 行都写了 ACK……但摄像头就是不输出图像。这种问题最耗时间,因为现象模糊、日志缺失、难以复现。以下是我在某跨平台系统项目中踩过的五个真实坑,按发生频率排序,每条都附带现象、根因与一招毙命的验证法:
4.1 现象:上电后图像稳定黑屏,但 VSYNC/HREF 信号有规律跳变
原因:0x42寄存器(ISP bypass)未设为0x01,GC0308 默认启用内部 ISP,但因未配置 ISP 参数(如0x50镜头校正表),ISP 输出全黑。
验证法:用示波器测 VSYNC 周期,若为 33.3ms(30fps),说明时序已锁定;再测 HREF 宽度,若为 640×像素时钟周期,则证明分辨率已设对;此时黑屏必是 ISP 问题。
解决:检查gc0308_init_seq_v2.1.txt第 42 行是否为W 0x42 0x01;若被误删或注释,补上并确保其在 Phase 2(数字时序锁定)阶段内。
4.2 现象:图像出现规律性水平条纹(每 16 行重复一次)
原因:0x17(HSTART)和0x18(HSTOP)寄存器配置错误,导致水平有效像素区域被截断,DMA 采集到的是内存越界数据。GC0308 的0x17/0x18是 10-bit 寄存器,但初始化序列中写的是 8-bit 值(如0x17=0x00,0x18=0x40),实际需左移 2 位填满 10-bit。
验证法:用逻辑分析仪抓取 GC0308 的 PCLK、HREF、DATA0-7,观察 HREF 高电平期间 DATA 是否有稳定数据跳变;若 HREF 宽度正常但 DATA 全为0x00或0xFF,则是0x17/0x18截断。
解决:查gc0308_regmap_notes.pdf,确认0x17是 HSTART LSB,0x18是 HSTART MSB+HSTOP LSB 组合寄存器;正确写法是W 0x17 0x00(HSTART=0) +W 0x18 0x00(HSTOP=0),而非网上流传的W 0x18 0x40。
4.3 现象:首帧图像正常,后续帧全乱(颜色错位、帧撕裂)
原因:0x3E(Frame Interval LSB)和0x3F(Frame Interval MSB)未正确配置,导致帧间隔不匹配传感器内部时钟,DMA 缓冲区溢出。GC0308 的帧间隔单位是 16 个 PCLK 周期,0x3E/0x3F需联合计算。
验证法:用示波器同时测 PCLK 和 VSYNC,计算 VSYNC 周期 / PCLK 周期,应等于(0x3F<<8 | 0x3E) × 16;若实测 VSYNC 周期为 33.3ms,PCLK=24MHz,则理论值应为(33.3e-3 × 24e6) / 16 ≈ 0x31E0。
解决:查序列中0x3E和0x3F的值,若为0x3E=0x00,0x3F=0x00(默认值),则帧间隔为 0,必乱;应设为0x3E=0xE0,0x3F=0x31。
4.4 现象:图像整体偏红/偏蓝,自动白平衡(AWB)完全不工作
原因:0x23(AWB Target)寄存器值错误。GC0308 的 AWB Target 是一个 12-bit 值,存于0x23(LSB)和0x24(MSB),但初始化序列中常只写0x23,遗漏0x24。
验证法:gc0308_regmap_notes.pdf注明0x23: “AWB Target LSB, default=0x00”,0x24: “AWB Target MSB, default=0x01”;若序列中只有W 0x23 0x00,则实际 Target =0x0100 = 256,远高于正常值0x0080 = 128,导致 AWB 锁死在高增益态。
解决:在0x23写入后,必须紧跟W 0x24 0x00(设 Target=128);若要微调,同步改两个寄存器。
4.5 现象:在低温环境(<10℃)下初始化失败率陡增
原因:0x0C(PLL Control)寄存器中的 PLL 倍频系数在低温下需微调。GC0308 的 PLL 在低温时锁定时间延长,且默认倍频系数0x0C=0x00(12x)可能失锁。
验证法:在低温箱中用逻辑分析仪抓0x0C写入后的波形,若 VSYNC 在 100ms 内未出现,则 PLL 未锁。
解决:gc0308_regmap_notes.pdf底部小字注明:“低温应用建议:0x0C=0x01(11x)或0x0C=0x02(10x),并增加第 28 行后延时至 5ms”。这是唯一需要硬件温补的寄存器。
5. 图像输出验证与进阶技巧:用示波器看懂 RAW 数据流,以及如何安全修改分辨率
走到这一步,你已经让 GC0308 吐出了第一帧数据。但“有数据”不等于“数据可用”。真正的验证,是看懂它输出的 RAW6/Bayer 流,并具备安全修改参数的能力。这里不讲上位机软件,只聚焦在硬件层如何用最简工具(示波器 + 逻辑分析仪)完成闭环验证,并给出修改分辨率的实操指南——因为这是资料包里没写、但你一定会问的问题。
5.1 用双通道示波器验证 RAW 数据有效性:PCLK、DATA0 的波形密码
GC0308 输出的是并行 RAW 数据(默认 RAW6,6-bit Bayer),引脚定义为:PCLK(像素时钟)、HREF(行有效)、VSYNC(场同步)、DATA0–DATA5(6-bit 数据)。不要急着接 FPGA 或 MCU,先用一台双通道示波器(哪怕只有 20MHz 带宽)做三步验证:
第一步:确认 PCLK 频率与分辨率匹配
- 接
PCLK到 CH1,测量频率。GC0308 在 640×480@30fps 下,PCLK 应为24.576 MHz(计算:640×480×30×1.25,1.25 是 blanking 开销)。 - 若实测为 25.175MHz,说明
0x0C(PLL)配置为 12.5x,需调回 12x;若为 20.000MHz,说明 PLL 失锁,检查0x0C值与延时。
第二步:用 CH2 触发 HREF,看 DATA0 是否随 HREF 变化
- CH1 接
HREF,设为触发源;CH2 接DATA0。 - 正常现象:HREF 为高电平时,DATA0 应呈现密集方波(每像素跳变一次);HREF 为低电平时,DATA0 应保持高阻或固定电平(取决于设计)。
- 异常现象:HREF 高电平期间 DATA0 恒为低——说明
0x42=0x01(ISP bypass)未生效,仍在输出 YUV;恒为高——说明0x17/0x18截断,无有效像素。
第三步:抓取一帧完整数据,肉眼识别 Bayer 格式
- 用逻辑分析仪(至少 8 通道)抓
PCLK,HREF,DATA0–DATA5,设置深度 ≥ 640×10 字节。 - 导出 CSV,在 Excel 中按
PCLK边沿对齐DATA0–DATA5,每行代表一个像素。 - 正常 RAW6 数据:前 10 行应呈现
Gr Gb Gr Gb...交替模式(Green-red / Green-blue Bayer 排列),若全是0x00或0xFF,说明0x1E(模拟增益)为 0 或饱和。
提示:GC0308 的 Bayer 排列为GRBG(Green-Red, Blue-Green),不是 RGGB。
gc0308_regmap_notes.pdf第 3 页有图示,但极易被忽略。若你后续做 debayer,算法输入顺序必须是 GRBG,否则颜色全错。
5.2 安全修改分辨率:从 640×480 到 320×240 的四步操作清单
资料包默认是 640×480,但你可能需要更低分辨率以降低带宽或功耗。切勿直接改0x17/0x18和0x0D/0x0E就跑!GC0308 的分辨率变更涉及模拟/数字双域联动,必须同步调整:
| 步骤 | 操作 | 寄存器 | 值 | 说明 |
|---|---|---|---|---|
| 1. 缩小模拟输出窗口 | 设置水平/垂直起始与结束点,裁剪 sensor 原始 1280×960 有效区 | 0x17,0x18,0x0D,0x0E | 0x17=0x00,0x18=0x80,0x0D=0x00,0x0E=0x40 | 0x18=0x80→ HSTOP=128(128×2=256 像素?错!0x18是 10-bit 的高 2 位+低 8 位,实际 HSTOP=0x0080=128,但 GC0308 的 HSTART/HSTOP 单位是 2 像素,所以 128×2=256 像素) |
| 2. 重配数字时序 | 更新帧尺寸、行尺寸、像素时钟分频 | 0x11,0x0F,0x0C | 0x11=0x00(disable AE first),0x0F=0x00(HLENGTH=0),0x0C=0x00(保持 PLL) | 0x0F是行长度 LSB,320 像素需设为0x00(320/2=160,160 的 LSB 是 0x00);0x11=0x00是为了防止 AE 在缩放过程中干扰 |
| 3. 更新帧间隔 | 保证新分辨率下帧率仍为 30fps | 0x3E,0x3F | 0x3E=0x00,0x3F=0x00→ 不行!需重算:320×240×30×1.25 = 2.88M,PCLK=24.576M,所以帧间隔 = 24.576e6 / 2.88e6 / 16 ≈ 0x0540,即0x3E=0x40,0x3F=0x05 | 忘记这步,VSYNC 会变成 60fps 或 15fps,DMA 溢出 |
| 4. 恢复并微调 AE/AWB | 缩放后感光面积 |
本文还有配套的精品资源,点击获取