上次的F103驱动OV7670究竟没有实用价值,我又买了一块STM32F407开发小板,
驱动了无FIFO无时钟ov7670,320*240每秒28帧(应该还可以快点)。
感觉到这个方案比用有FIFO的划算,STM32F407开发小板+ov7670=60元左右。
一、407带摄像头接口,取摄像头数据由片内硬件操作,超爽。
二、我用示波器看PA8输出时钟,幅度很小,这不是程序问题,是示波器频率不够,
调试时候不要怀疑这个信号。我在这里白白纠结了几天。
三、摄像头相关的口线比较多,一根口线多处设置,还有硬件连接的问题,容易出错。
调式时候可以一步一步来,先调SCCB,把摄像头初始化搞OK,再调直接读取图像数据,这样,端口和线路连接都没有问题了,就可以进入第三步,上DCMI和DMA。
//ov7670_GPIO2_Init(); //老的端口输入设置
//camera_refresh(); //老的取数操作
这两句就是直接取数据,不用DCMI和DMA。
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
delay_init(168); //初始化延时函数
uart_init(115200); //初始化串口波特率为115200
// usart2_init(42,115200); //初始化串口2波特率为115200
LED_Init(); //初始化LED
LCD_Init(); //LCD初始化
// KEY_Init(); //按键初始化
TIM3_Int_Init(10000-1,8400-1);//10Khz计数,1秒钟中断一次 //打印帧率
// TIM1_PWM_Init();
// usmart_dev.init(84); //初始化USMART
POINT_COLOR=RED;//设置字体为红色
LCD_ShowString(30,130,240,16,16,"OV7670 Init?");
while(OV7670_Init())//初始化OV7670
{
LCD_ShowString(30,130,240,16,16,"OV7670 ERR");
delay_ms(200);
LCD_Fill(30,130,239,170,WHITE);
delay_ms(200);
}
LCD_ShowString(30,130,200,16,16,"OV7670 OK ");
delay_ms(1500);
OV7670_Window_Set(12,176,240,320);//OV7670设置输出窗口
//OV7670_Color_Saturation(4);//颜色饱和度
//ov7670_GPIO2_Init(); //老的端口输入设置
//camera_refresh(); //老的取数操作
My_DCMI_Init(); //DCMI配置
DCMI_DMA_Init((u32)&LCD->LCD_RAM, 10, DMA_MemoryDataSize_HalfWord, DMA_MemoryInc_Disable);//DCMI DMA配置
DCMI_Start(); //启动传输
while(1)
{
}
}
例程来源于正点原子,特此感谢!
上一篇:[零基础学习STM32]第四讲:UART通讯实验—控制LED
下一篇:详细stm32f103c8t6引脚说明中文
推荐阅读最新更新时间:2024-11-13 21:30
设计资源 培训 开发板 精华推荐
- 使用 Analog Devices 的 LT1375IN8 的参考设计
- WIFI测温模块
- EVAL-CN0336-PMDZ、12 位、300 kSPS、单电源、完全隔离、用于 4-20 mA 输入的数据采集系统评估板
- 基于Si3212 8位HC08 MCU的8位微控制器电路
- 四路继电器模块
- 用于调整配置的 ADR363B、3V 低功耗、低噪声电压基准的典型应用
- L7885C的典型应用通过降压电阻降低功耗
- 用于 LED 驱动器的 90W、48V 交流转直流单路输出电源
- HC32F460JEUA核心板
- LTC1865 的典型应用 - MSOP 中的功率、16 位、250ksps 1 和 2 通道 ADC