本帖最后由 colin2135 于 2015-10-8 00:14 编辑
前阵子在21ic论坛刚好申请到了一块STM32F446NUCLEO板子,64PIN的芯片带有DCMI(数字摄像头功能),所以想刚好结合香蕉派M2做点东西。
实现功能如下: STM32通过DCMI获取OV2640的图像,通过串口发送给香蕉派M2。 M2接收并保存图像。
用到工具:stm32,ov2640摄像头,usb转ttl,香蕉派m2
stm32f446
ov2640
连接一起
stm32已经有了一年多的开发经验,所以通过DCMI得到图像轻而易举,所以这次的任务也比较简单,只需要把图像通过串口发送给M2的,然后保存成JPEG格式就可以了。
第一步查看当前的串口工具:ls /dev/tty* 注意下图箭头
第二步:因为用到了wiringPi的串口库,所以需要先安装,方法具体参考@恶魔花花:https://www.cirmall.com/bbs/thread-44249-1-1.html。 这里提出一个疑问,按照@恶魔花花 的方法,最后通过/dev/tty应该可以串口通信的,但是花了一晚上,一直没弄出来,不知道是不是哪里搞错了,最后还是用串口工具接到USB接口,使用/dev/ttyUSB0才通信成功, 各位如果知道原因,麻烦请告诉我。
第三步:写代码,注意箭头改成当前串口。
第四步:使用GCC编译。
第五步:sudo ./pictureSave执行 。这时使用按键控制STM32串口捕捉和发送图片到M2。JPEG都是以FF D8开关和FF D9结尾。以下箭头标明。
第六步:这时在目录下面就能看到了接收到的receive.jpeg图像了,直接双击打开就能看到图片。
- #include <stdio.h>
- #include <string.h>
- #include <errno.h>
- #include <wiringPi.h>
- #include <wiringSerial.h>
- int main()
- {
- int fd;
- FILE *picture;
- char data;
- if((picture=fopen("recevie.jpeg","wb"))==NULL){
- printf("cannot open file!\n");
- return 1;
- }
- if ((fd = serialOpen ("/dev/ttyUSB0", 115200)) < 0){
- fprintf (stderr, "Unable to open serial device: %s\n", strerror (errno)) ;
- return 1 ;
- }
- if (wiringPiSetup () == -1)
- {
- fprintf (stdout, "Unable to start wiringPi: %s\n", strerror (errno)) ;
- return 1 ;
- }
- while(1){
- data=serialGetchar (fd);
- fwrite(&data,1,1,picture);
- fflush(picture);
- printf("%X ",data);
- fflush (stdout) ;
- }
- fclose(picture);
- return 0 ;
- }
复制代码 |