×

STM32和OV2640的嵌入式图像采集系统设计资料下载

消耗积分:5 | 格式:pdf | 大小:245.34KB | 2021-04-09

分享资料个

引言随着电子产品向低功耗、低价格、智能化的方向发展,利用视频传感器采集图像成为研究热点,如可视门铃、安全监控[1]、赛车自动循迹[23]、烟叶图像采集[4]、草本叶子图像采集[5]等。本文根据在线采集、分析、存储图像的需求,设计了嵌入式图像采集系统,运用嵌入式芯片STM32对图像信息进行采集、显示和存储。1 系统结构与功能图像采集系统以基于ARM公司的CortexM3内核的STM32F103RBT6(以下简称STM32)处理器为核心,配合OV2640摄像头和TFT液晶显示器,是一款采集像素多、实时性好且成本低廉的图像采集系统。系统的硬件结构框图如图1所示,系统通过JLink口实现程序在STM32上的仿真、在线调试,利用JLINK仿真编程器将编译之后的二进制文件烧写到Flash中,系统每次上电时便可从Flash启动文件系统,图像采集系统采用OV2640摄像头模块,输出显示采用2.4英寸TFT液晶显示屏,可将采集到的数据保存在SD卡中。当存储按键按下时,系统接收中断,同时将从OV2640摄像头采集到的数据显示在液晶显示屏上。图1 系统硬件结构框图2 硬件设计2.1 CPU处理器本系统用的是32位的CortexM3内核的STM32芯片STM32F103RBT6,支持Thumb2指令集,STM32F103RBT6内部的Flash有128K,SRAM大小为20 K,有64个增强I/O口、2个USART、2个12位的A/D转换器[6]。它的供电电压为2.0~3.6 V,拥有省电模式,可以保证低功耗需求。CPU主频最高可以达到72 MHz。2.2 OV2640摄像头OV2640具有体积小、工作电压低、兼容I2C总线接口等特点。通过SCCB总线控制,支持RawRGB、RGB(GRB4:2:2、RGB565/555/444)、YUV(4:2:2)和YCbCr(4:2:2)输出格式,可以输出整帧、二次转换分辨率、取特定区域等方式的各种分辨率的8位或10位的图像帧数据,UXGA(1 632×1 232)图像最高达到15 fps。图2OV2640摄像头连接示意图因此,编程者可选择不同图像质量、数据格式,而且,OV2640的高灵敏度适合低照度环境,它的低电压特性适合嵌入式开发应用,摄像头数据口连接CPU的示意图如图2所示。采用摄像头的8位数据模式,摄像头高8位接CPU的I/O口的低8位,低2位悬空。2.3 SCCB总线SCCB(OmniVision Serial Camera Control Bus)与I2C总线协议类似,使用SIO0和SIO1两根数据线进行传输和控制。SIO1是控制线,提供传输过程中的时钟脉冲控制信号,SIO0是串行双向数据传输线,根据控制信号通过串行的方式发送数据。在很多设计中,经常采用I/O口模拟I2C总线的传输,对于SCCB,也可以采用这样的方式。采用I/O口模拟SCCB总线的要点如下:对于SCL所连接的引脚,在寄存器中设置为输出,而SDA所接的引脚,在数据传送过程中,基于IODIR值的改变,动态改变引脚为输入或输出方式。2.4 LCD显示模块本设计所用的为2.4英寸的TFT液晶显示屏,图3系统与ILI9320连接图内部集成有ILI9320 LCD控制芯片,可以直接控制数据的显示。ILI9320可以用来读写寄存器、GRAM,还可显示动态图形的RGB输入接口。显示控制芯片有RGB接口模式与i80系统接口模式,设计选用i80system接口模式。i80system接口是通过设置IM[3:0]来决定的,同时这几个位也决定了数据传输位数的模式,通过硬件设置IM0位高电平,IM1位高电平,把模式设置为了8位i80system接口传输模式。连接示意图如图3所示。要写数据到屏上显示,只需要对寄存器0x0022进行写操作即可,当这个寄存器的数据更新时,地址指针(AC)会自动增加或减小,读数据也是同样的道理。2.5 SD卡接口电路设计通常而言,SD卡电路设计有两种模式:SPI模式和SD卡模式,由于引脚资源限制,对于连接STM32的方式,采用第一种设计电路,通过STM32上面的SPI接口来和SD卡进行数据通信[8],引脚如图4所示。在SPI模式中,数据通过STM32的MOSI与MISO进行传送,SCK信号线用来提供工作时钟,当SD 卡收到复位命令(CMD0)时,SD卡立即进入SPI模式。要注意的是,在发送CMD0 之前须发送大于74个的时钟周期;另外,在SD卡初始化时,CLK时钟频率最大不能超过400 kHz。3软件设计3.1 系统初始化系统初始化主要是对CPU时钟进行初始化,以及设置外围电路的时钟分频比,设置中断。其流程可描述如下:SystemInit();if (HSEStartUpStatus == SUCCESS){//如果HSE晶振稳定且就绪RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); //PLL设置RCC_CLKConfig();//设置外部总线时钟GPIO_PinRemapConfig();//改变指定引脚的映射NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//设置中断}3.2 摄像头初始化首先,通过SCCB总线设置OV2640的寄存器数据,主要是配置摄像头输出数据格式类型和输出图像数据大小,达到初始化OV2640的目的。OV2640初始化流程较为简单,伪代码如下:unsigned char OV2640_init(void){unsigned char temp;unsigned inti=0;OV2640_GPIO_Init();SCCB_GPIO_Config();//摄像头I/O口初始化CLK_init_ON();//开摄像头时钟temp=0x80;//初始化并判断是否成功if(0==wrOV2640Reg(0x12, temp))return 0;for(i=0;i

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.lene-v.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'STM32和OV2640的嵌入式图像采集系统设计资料下载',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.lene-v.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);