关于STM32+Ov7670+电脑显示的问题,涉及串口、USB等

2019-07-21 08:10发布

我参考的是原子哥实验36 摄像头实验的代码,主要需要实现的功能是STM32从OV7670采集一帧的数据,在接到电脑发来的信号后,再将数据传送到电脑并显示。电脑端用PySerial或PyUSB(Python的两种不同传输方法)进行读写,先给板子写一个值(作为STM32发送数据的触发装置),再读取(循环接收)每个像素的RGB值,最后把每个像素显示出来得到完整的一帧图像
问题:
1.我尝试过用printf 串口发送一帧数据,但是需要320*240*2 bytes,数据量大,传输速度不够,经常一发送就导致串口接收的python程序死机。
2.例程里用的是直接将一帧数据输出到液晶屏,我想用个全局buffer[76800][3]存储每个像素的rgb分量以取保电脑给信号后接收到的是同步好的完整的一帧图像,但是老报内存不足的问题,用的板子是STM32F103ZE,Program memory 512K,RAM 64K。
3.最近在看DMA的例程,网上有说这个能提高串口传输速度,如果我用DMA的send_buffer做一帧的存储,可行吗?
4.之前企图用USB协议(电脑端用PyUSB做接收程序)传输一帧图像,但是没太明白STM32上是如何发送数据的……是说只需要指定好buffer的具体位置,电脑上给出端点、命令等信息就行吗?电脑端如何知道从板子的哪个地址(指定的buffer位置)读取所需数据呢?跪求USB相关例程,标准例程里有可参考的不?还是说我应该直接弃了USB这种方法?

唉,最近这些问题真是太头疼了,拜谢大家了先!m(_ _)m

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
29条回答
正点原子
1楼-- · 2019-07-21 11:54
回复【楼主位】草野晶:
---------------------------------
1,说明你的串口程序有待改进了。换SSCOM试试。
2,当然内存不做了,76800是多少K?你得外扩SRAM,才可以。
3,这个其实与你的串口死机关系不大,不过用DMA的好处,是可以让你的CPU有更多的时间去处理重要的事情。你可以设置小块(大块内存不够啊,呵呵),分块发送。
草野晶
2楼-- · 2019-07-21 14:12
回复【2楼】正点原子:
---------------------------------
原子哥~有没有可能自己控制摄像头的读写呢?比如说STM32接到串口发来的命令,然后手动控制OV_VSYNC让摄像头FIFO存储一帧,最后再通过camera_refresh()获得这一帧的图像?感觉上有点像照相机,呵呵……
如果行的话,得怎么改例程呢?
多谢啦先~
正点原子
3楼-- · 2019-07-21 17:57
回复【3楼】草野晶:
---------------------------------
我们的摄像头模块直接带了FIFO,一直在存储的.你只要 在需要的时候,读取数据就可以了,所以你说的功能,完全可以实现.
草野晶
4楼-- · 2019-07-21 18:19
 精彩回答 2  元偷偷看……
正点原子
5楼-- · 2019-07-21 22:57
串口输出速度慢,加上你这打印方法,1帧有2*(320*240*3)=460K数据.
9600的波特率,1秒钟最多传输1K字节左右,所以你要打印一帧,需要460秒钟.
也就是大概8分钟,你电脑上才能收完1帧数据.
所以,慢慢等吧...
正点原子
6楼-- · 2019-07-22 01:14
刚刚算错了,漏了点,接收一帧大概要12分钟...我勒个去...

一周热门 更多>