徐平 薛凌云 祝磊 陈秉强
摘要:为了进一步加深学生对嵌入式系统的理解,更好地将专业课所学的知识和基本实验操作完整地结合起来,提高学生的动手实践能力和团队协作能力,本学院开设了以嵌入式系统为研究对象的工程实训课程。本次工程实训以STM32单片机为主控单元,采用串行摄像机控制总线(SCCB)驱动OV7670图像传感器输出RGB565 QVGA的图像数据,并实时显示在TFT-LCD上的图像采集与显示系统。结果表明,通过工程实训课程,使理论和实践紧密结合,培养了学生灵活应用嵌入式系统知识解决工程问题的能力,取得了良好的教学效果。
关键词:工程实训;STM32;OV7670;图像采集与显示
中图分类号:G642.0 文献标志码:A 文章编号:1674-9324(2018)21-0260-02
一、引言
嵌入式系统工程实训是本学院仪器仪表类专业大学生本科期间必修的一门专业实训课程,其目标是为了让同学们更加熟练地掌握嵌入式系统的实践操作,从而更好地将专业课知识和基本实践操作结合。国内现在普遍将嵌入式系统定义为以实际应用为核心,计算机技术为基础,软件和硬件具备可移植性,符合系统对费用、尺寸、可靠性、性能高标准的计算机系统。通常来说,嵌入式系统是一个将控制程序存储在ROM中的嵌入式处理器控制板。近些年,微型电子技术和集成电路技术发展迅速,这使得基于嵌入式系统的图像获取与处理方案越来越多。STM32F103,一款基于ARM Cortex-M3内核的微控制器,它的时钟频率最为72MHz,具备耗能低、功能多、体积小、可靠性高等优点。OV7670,美国OV公司出的一款(CMOS)图像传感器,其像素为30万,通过串行摄像头控制总线(SCCB)进行控制,输出为并行的8位图像数据。本次嵌入式系统工程实训将STM32F103ZET6微控制器作为主控处理芯片,将OV7670作为图像采集模块,将TFT-LCD作为图像显示模块,设计图像采集显示系统,并增加按键功能,使采集到的图片可调节光照模式、饱和度、亮度以及对比度。
二、系统总体方案
本系统主要分为STM32F103ZET6微控制器模块、OV7670图像采集模块、TFT-LCD图像显示模块。主要工作原理为:STM32F103ZET6通过对OV7670寄存器的读写来控制每一帧图像的采集,通过对TFT-LCD寄存器的读写控制每一帧图像的显示。OV7670的时钟频率为24MHz,使用开发板自带的IO接口传输数据难度大且对CPU的占用率非常高。为解决这一问题,本系统中采用AL422B作为缓存器,采集到的数据先进行缓存,一帧图像缓存完时,通过STM32F103ZET6将这帧图像实时显示在TFT-LCD上。
三、硬件设计
1.OV7670。本圖像采集与显示系统用开发板上的IO接口来控制OV7670。将SIO_C口设置成推挽输出,SIO_D口读取数据时上拉输入、写入数据时设成推挽输出,再由SCCB的工作时序编写程序。OV7670的图像数据通过D[7∶0]输出,该功能就是在PCLK(像素时钟)、VSYNC(帧同步信号)以及HREF/HSYNC(行同步信号)的控制下进行的。HREF为高电平时,图像数据输出;HREF正阶跃时,每个PCLK输出一字节数据,且数据格式为RGB565时,每两个字节构成一个像素的颜色。
2.TFT-LCD。本图像采集和显示系统将TFT-LCD作为显示模块,其大小为2.8寸,分辨率为320×240。本图像采集和显示系统中一帧图像的数据量为150KB。为加快显示,以STM32F103ZET6的FSMC来驱动TFT-LCD,即灵活的静态存储控制器(flexible static memory controller),将TFT-LCD视为外部SRAM来处理。将TFT-LCD的RS信号引脚视为地址线,与STM32F103ZET6的FSMC_A10引脚相连。其目的是用于判断传输的是命令还是数据。TFT-LCD以及外部1MB SRAM均连接于FSMC总线,用各自的信号加以片选,TFT-LCD和FSMC_NE4引脚相连接,SRAM和FSMC_NE3引脚相连接。特别地,TFT-LCD传输数据为16位时,STM32F103ZET6的地址总线HADDR[0]是没被接入的,也就是说HADDR[25∶1]才真正处于工作状态,则对应关系变为:HADDR[25∶1]→FSMC[24∶0]。此时TFT-LCD写命令的地址为0x6C000000+0x07FE(0x0800)。TFT-LCD中ILI9320的写入比读取效率高,因此将FSMC设为异步方式A。
四、软件设计
1.主程序。主程序由初始化、按键扫描、按键处理及图像采集与显示等模块组成。初始化模块包括延时函数、中断、串口、按键、LCD、OV7670的初始化;按键扫描与处理程序用于进行不同模式下按键的检测及调用相应的处理程序;图像的采集与显示模块用于进行OV7670 CMOS摄像头图像数据的采集,并将采集的图像直接显示在LCD显示屏上。
2.按键扫描与处理。我们可以通过KEY0设置光照模式(5种模式),通过KEY1设置色饱和度,通过KEY2设置亮度,通过WK_UP设置对比度。
3.图像采集与显示。OV7670摄像头模块保存采集到的数据的工作原理:①等待OV7670同步信号;②FIFO的写指针复位;③FIFO的写使能;④再次等待OV7670同步信号;⑤FIFO的写禁止。通过上面5步,我们就可以完成1帧图像数据的存储了。在存储完了一帧图像之后,我们就可以开始读取图像数据了,读取图像数据的过程:①FIFO的读指针复位;②给FIFO读时钟读取像素高字节;③给FIFO读时钟读取像素低字节;④给FIFO读时钟读取下个像素高字节;⑤循环读取剩余像素(QVGA、RGB565格式,1帧图像数据共320*240=76800个像素)。一共需循环读取320*240*2次,这样才能读取1帧的图像数据,再把这些数据写入TFT-LCD,这样就可以看到摄像头捕捉到的画面了。
五、结论
本次嵌入式系统工程实训课程学生设计了基于STM32和OV7670的图像采集与显示系统,并增加了按键模块以调节图像显示相关参数的功能,工程实训小组成员以组内分工的形式通过对系统的不断调试和测试,按要求实现了图像采集和显示的功能,通过知识与实践相结合的实践教学方式,在使学生进一步了解嵌入式系统,提高综合素质和创新能力的同时,也圆满完成了教学任务。
参考文献:
[1]嵌入式系统[Z].[2017-01-17].
www.eeworld.com.
[2]李宁.基于MDK的STM32处理器开发应用[M].北京:北京航空航天大学出版社,2008:7-13.
[3]罗超,景林,易金聪.基于STM32的便携式海量温湿度记录仪设计[J].电子技术应用,2012,(12):83-86.
[4]Omni Vision Technology[Z].OV7670 Datasheet[2017-01-17].http://www.ovt.com.