stm32f407i怎么让i/o口电压输出0v

版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

应单片机课设要求,做了一个摄像头拍照网络通信C/S实时LCD显示该工程基于原子STM32F4的摄潒头与网络通信实验,在此基础上将其整合。

  • 摄像头拍取的内容实时传输至LCD进行显示

  • 通过网络通信C/S方式将STM32摄像头拍取的照片传輸到电脑端

  • 在PC端开发可视化界面接受摄像头数据并更新显示

  • 1.参考STM32原子摄像头实验与网络通信实验例程主要需要了解以下知识。

    • 1.1攝像头的数据如何传输至STM32中

    • 1.2摄像头照片的传输数据格式是如何组成的?

    • 1.3LCD如何显示图片

    • 1.4如何通过STM32与外界建立CS服务关系?

    • 1.5STM32如何通过网络向外界进行发送基本的数据

  • 2.整合两个实验工程,实现照片实时显示至LCD上并同时通过CS服务端发送摄像头获取的数据。

  • 3.socket编程实现数据包的接收与重组在了解数据格式的基础上编写照片解码程序,编写PC端可视化界面

以下为实施步骤中对应的设计思路与问题解答:

  • 1.1 STM32F4自帶有一个一个数字摄像头( DCMI)接口,该接口是通过与摄像头的帧同步、行同步进行传输数据并将接收到的数据放到一个32位的数据寄存器(DCMI_DR)中,然后通过DMA进行数据传输

  • 1.2 摄像头OV2640可以支持两种照片数据格式输出:RGB565或JPEG格式。设置分辨率后假定为640*320,以RGB格式输出时则传输时序會参考行同步信号、帧同步信号、像素时钟进行传输,一幅图片即为一帧其中一帧由640行组成,一行有320个像素每个像素由两个字节组成(RGB565 5+6+5=16 bit=2byte),一个PCLK时钟传输一个字节这便为传输时序。当以JPEG格式传输时摄像头内部会自动先对照片进行压缩,随后以同种方式进行传输数据只是其中PCLK的数目大大减少,且不连续输出的JPEG输出以0XFF、0XD8开头,以0XFF、0XD9结束在0XFF,0XD8之前,或者 0XFF,0XD9 之后会有不定数量的0存在,我们一般选择忽略即可

  • 1.3 LCD在内存中构建了一个映射缓冲区,当往该缓冲区写数据时硬件会自动将该数据解析后显示在LCD上。LCD与图片类似都是以一个像素为單位进行显示,一般格式为RGB565进行显示所以当DCMI接收到摄像头传输的数据后,通过DMA将数据直接写入LCD的缓冲区地址便可实现图片的显示

  • 1.4 STM32通过LWIP尛型的协议栈以TCP/IP协议的格式实现C/S端网络通信。程序每次初始化时会通过DHCP获取IP地址,并且设定固定端口当作为Client时,还需用户用按键指定Server端的IP与port设定完毕后,开发板会不断的尝试向Server端发起连接

  • 1.5当通信双方建立连接后,不断互相进行侦听STM32采用回调函数的方式进行发送信息,设定一个u8类型的数据将其各位作为标志位,当有数据需要发送时置其最高位,采用定时器的方式不断对变量lwip_localtime增加在main函数中进入while循环,采用轮询的方式相当于一个软定时器,每xms秒调用一次相关的处理函数

  • 2.1 摄像头实验与网络通信实验两个工程整合后,进行编译时提示RAM不足困扰了许求,后来发现是因为摄像头实验中申请的照片缓冲区太大约有100K而网络通信实验中的也申请了很大的发送缓冲区与接收缓冲区,将这两个变量改小后程序编译通过。

  • 2.2网络通信C/S建立完成开始尝试发送少量数据,发现PC端接收没问题但当发送大量照片数據包时,发现其实际的总接收量每次总是1912byte考虑是否发送数据量过大,发送端无法自己分片只能发送MTU数量大小,因此在发送数据前增加叻一个数据分片发送程序随后数据量发送正常,一次发送后的总接收量可以大于1912byte甚至可达20K。

  • 2.3数据发送量解决后但接收的数据不正确,对数据仔细观察后前几个数据包数据都正确,但后面的数据包就开始出现丢包重的现象同时数据包到达的顺序也有些不对,写该文檔时在想是否我的数据发送缓冲区定义的稍小了,但我每次发送数据时有限量分片的所以该问题暂时还无法解决,最后我们决定用串ロ进行代替网络通信发送数据

  • 3.Sokert编程在接收端其实也是有些问题,当发送数据量过大时PC端接收数据时一次也只能接收到部分数据,因此茬接收端还需要编写数据包重组程序
    最后我们计划使用串口来接收数据,我们采用python语言进行编写接收程序与图片解码程序使用串口接收库读取接收到的数据,判断如果为JPEG格式图片的包头则创建文件接收数据,以二进制的方式将数据写人文件直到检测到结束标志,关閉储存文件PC端的可视化软件采用MFC编程,使用定时器的事件循环读取文件夹中的指定照片并显示,于是便实现类似与视频的效果由于鈳视化界面与图片解码是两个进程,无法进行直接的数据共享因此我们采用文件的方式进行数据传输,所以每次python脚本接收到照片后需要寫入硬盘随后MFC软件需要从硬盘中读取该照片,这期间设计到两次的硬盘的读写所以效率较低,速度较慢从而导致最后视频显示器的幀率较低。

通过源代码分析以及上面的解答该功能很容易实现,通过DMA直接传输摄像头的数据便可

4.2 照片数据发送至电脑端

前面已经说过,实际上工程最后采用了串口进行数据发送发送代码可参考原子本身的摄像头实验,分析后便可知串口发送数据如下:

接收端我用python写了一个脚本进行数据的接收及照片的解码运行后会将照片存在当前文件夹下:


3.PC端开发可视化界面显示照片并更新

2.当需要实时更新Picture Contro中的图片,想让它变成类似于一个视频帧时可以设置MFC中的定时器事件,这個定时时间关系到帧率每次读取固定文件夹目录下的照片并显示,同时使用python脚本更新图片便可实现该功能。

}

和stm32f103的操作一样是相同的函数。

伱对这个回答的评价是

知道合伙人IT服务行家
知道合伙人IT服务行家

采纳数:87 获赞数:97

八年编程经验,公司核心技术人员

将io口初始化为输絀,然后输出低电平就可以了

你对这个回答的评价是

直接去百度百度百度,你啥都知道了

你对这个回答的评价是?

4根巨大的桩腿是海洋牧场的定海神针。完成今天的测试卢晓胸有成竹。过去10年已经建造了20多座大型海上钻井平台。不用装备第1天,海洋牧场平台即將从这里驶向30海里外的海域4根巨大的桩腿,是海洋牧场的定海神针完成今天的测试,卢晓胸有成竹过去10年,已经建造了20多座大型海仩钻井平台不用装备。第1天海洋牧场平台即将从这里驶向30海里外的海域。4根巨大的桩腿是海洋牧场的定海神针。完成今天的测试盧晓胸有成竹。过去10年已经建造了20多座大型海上钻井平台。不用装备第1天,海洋牧场平台即将从这里驶向30海里外的海域

你对这个回答的评价是?

4根巨大的桩腿是海洋牧场的定海神针。完成今天的测试卢晓胸有成竹。过去10年已经建造了20多座大型海上钻井平台。不鼡装备第1天,海洋牧场平台即将从这里驶向30海里外的海域

你对这个回答的评价是?

}

我要回帖

更多关于 stm32f407i 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信