STM32F103C8T6驱动ov2640拍照串口传输到上位机

使用环境(蓝色粗体字为特别注意内容)
1、软件环境:Keil MDK 5.15
2、硬件环境:STM32F103C8T6最小系统,OV2640摄像头模块

 

最近想玩玩摄像头,于是在网上找找性价比比较高的摄像头,之前用过OV7670这款摄像头,不过这款摄像头对单片机要求较高,一般的单片机驱动起来非常费劲,除非ARM级别的微处理器才能够胜任。要想使用低端单片机驱动的话需要加上FIFO模块,一加上这玩意价格就翻了3倍。。。。原来20块钱的东西涨到了70+,我的天。。。。于是找了大半天,终于找到OV2640这款摄像头,这摄像头是我目前遇到的性价比最高的摄像头了,竟然支持直接输出JPG格式的图片,最高支持1600*1200(200W)像素!!!价格只有带FIFO的OV7670摄像头的一半!而且STM32F103系列单片机就能够轻松驱动(前提是SRAM足够大)。

于是决定使用性价比比较高的STM32F103C8T6这款单片机来驱动,这款单片机单单芯片的话只需8元人民币,而且性能还可以,48脚,RAM20KB,FLASH64K,主频72M,算是性价比较高的了。系统连接图如下所示:

 

摄像头采集图像之后通过串口发送到上位机,上位机软件如下:

20k的RAM带起来还是比较吃力的

640*480图片效果如下: 

320*240效果如下

 

 效果基本可以。主函数如下:

int main(void)
{
	u8 res;
	u8 *pname;					//带路径的文件名

	Stm32_Clock_Init(9);		// 系统时钟设置
	uart_init(72, 115200);	// 串口初始化为115200
	delay_init(72);	   	 		// 延时初始化
	usmart_dev.init(72);		// 初始化USMART
	LED_Init();		  	      // 初始化与LED连接的硬件接口
	RCC->AHBENR |= RCC_AHBENR_CRCEN;//硬件crc初始化
	delay_ms(5500);
	delay_ms(5500);
	printf("Enter Main \r\n");
	while(OV2640_Init())			//初始化OV2640
	{
		printf("ov2640 error");
		delay_ms(200);
	}
	printf("ov2640 ok");
	delay_ms(1500);
	OV2640_JPEG_Mode();			//RGB565模式
	OV2640_OutSize_Set(pic_width, pic_height);
	ov2640_speed_ctrl();

	while(1)
	{
		while(!OV2640_VSYNC)	;
		while(OV2640_VSYNC)			//等待帧信号
		{
			res = ov2640_jpg_photo(pname);
			delay_ms(10000);
		}

	}
}

 

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试