蓝牙传图V2.5

  • 实现的功能
  • SD卡
  • Keil主函数
  • Pycharm
  • 总结经验

实现的功能

操作步骤:
预操作:单片机接上电源,蓝牙模块连接到电脑上,两个蓝牙模块慢速闪烁后,运行pyhton程序
应用操作:按下KEY0按键

内部运行大概:
数据存储阶段:按下KEY0按键之后,摄像头拍摄到一张图片,512字节512字节地把数据存储到SD卡里,延时1秒后再次拍摄,就这样拍摄10张图片

数据传输阶段:从SD卡中读取数据,之后通过蓝牙串口配合电脑运行的python程序传输到电脑的Bluetooth文件夹里

SD卡

增加了SD卡的功能
主要用SD的读写的功能

sdio_test

void SD_SingleBlockWrite(uint64_t addr)
{if (Status == SD_OK){/* Write block of 512 bytes on address 0 */Status = SD_WriteBlock(Buffer_Block_Tx, addr, BLOCK_SIZE);/* Check if the Transfer is finished */Status = SD_WaitWriteOperation();while(SD_GetStatus() != SD_TRANSFER_OK);}
}
void SD_SingleBlockRead(uint64_t addr)
{  if (Status == SD_OK){/* Read block of 512 bytes from address 0 */Status = SD_ReadBlock(Buffer_Block_Rx, addr, BLOCK_SIZE);/* Check if the Transfer is finished */Status = SD_WaitReadOperation();while(SD_GetStatus() != SD_TRANSFER_OK);}
}

Keil主函数

main

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "bsp_usart.h"
#include "string.h"
#include "ov7725.h"
#include "exti.h"
#include "sdio_test.h"
#include "bsp_sdio_sdcard.h"#define  OV7725_WINDOW_WIDTH      320     // <=320
#define  OV7725_WINDOW_HEIGHT       240     // <=240extern u8 ov_sta;   //在exit.c里 面定义
extern u8 ov_frame; //在timer.c里面定义  u8 chuaning=0;//正在传输 xxxx xxxxu8 pic_sd_num=0;//图片传输到SD卡的数量编号
u8 pic_bl_num=0;//图片传输到蓝牙的数量编号
void OV7725_camera_refresh(void)
{u8 r, g, b;u16 send;u32 i,j;u16 color;u16 nbn=0;//now_block_num=0;用来指示传输到SD卡的数组里的一个字节u16 pic_block_all=0;//用来知道写入哪一个块if(ov_sta)//有帧中断更新{OV7725_RRST=0;             //开始复位读指针 OV7725_RCK_L;OV7725_RCK_H;OV7725_RCK_L;OV7725_RRST=1;                //复位读指针结束 OV7725_RCK_H; chuaning=1;//正在传输中,在exti中关闭帧中断//读取数据,写入SD卡for(i=0;i<OV7725_WINDOW_HEIGHT;i++){for(j=0;j<OV7725_WINDOW_WIDTH;j++){OV7725_RCK_L;color=GPIOC->IDR&0XFF; //读数据OV7725_RCK_H; color<<=8;  OV7725_RCK_L;color|=GPIOC->IDR&0XFF;  //读数据OV7725_RCK_H; //RGB565转RGB555r = (u8)(0x1f&(color>>11));g = (u8)((color&0x07c0)>>6);b = (u8)(0x1f&color);send = (r<<10)|(g<<5)|b;//写入SD的数组的数据Buffer_Block_Tx[nbn++]=(u8)(send&0x00ff);Buffer_Block_Tx[nbn++]=(u8)((send&0xff00)>>8);//如果写到了第512个数据,nbn回到0用来继续写,写SD卡,下一个图片块if(nbn==BLOCK_SIZE){nbn=0;//一张图片大小为320*240*2,由于是10张图片,所以理所当然的是顺序存储,之后是该图片的第几个块SD_SingleBlockWrite(pic_sd_num*320*240*2+pic_block_all*BLOCK_SIZE);pic_block_all++;}}}chuaning=0;//传输完成,可以接收到帧中断了ov_sta=0;                    //清零帧中断标记pic_sd_num++;//图片更新为下一张图片}
}   int main(void)
{    u16 i;u8 key;   u8 lightmode=0,effect=0;//用来调功能类型和特效s8 saturation=0,brightness=0,contrast=0;//用来调色度,亮度,对比度u16 pic_block=0;//用来指示读取到哪一块了delay_init();            //延时函数初始化    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级USART1_Config();USART3_Config();LED_Init();                    //初始化与LED连接的硬件接口KEY_Init();                   //初始化按键SD_Test();            //初始化SD卡while(OV7725_Init());OV7725_Window_Set(OV7725_WINDOW_WIDTH,OV7725_WINDOW_HEIGHT,0);//QVGA模式输出OV7725_Light_Mode(lightmode);//用来调功能类型OV7725_Color_Saturation(saturation);//用来调色度OV7725_Brightness(brightness);//用来调亮度OV7725_Contrast(contrast);//用来调对比度OV7725_Special_Effects(effect);//用来调特效OV7725_CS=0;//片选信号,选中OV7725这片EXTI8_Init();                        //使能外部中断8,捕获帧中断             while(1){pic_sd_num=0;//图片传输到SD卡的数量编号归零pic_bl_num=0;//图片传输到蓝牙的数量编号归零//按下KEY0才继续下面的程序while(1){key=KEY_Scan(0);if(key==KEY0_PRES)break;}//当拍摄到的的图片数小于十张时继续拍摄while(pic_sd_num<10){OV7725_camera_refresh();//开启并拍摄一张图片放到它的内存里并且读取这些数据,传输到SD卡里delay_ms(1000);//延时1s}//当读取到的的图片数小于十张时继续读取while(pic_bl_num<10){Usart_SendString(USART3,"b");//传输开始标志,和python程序有紧密关系while(1){//一张图片大小为320*240*2,由于是10张图片,所以理所当然的是顺序存储,之后是该图片的第几个块SD_SingleBlockRead(pic_bl_num*320*240*2+pic_block*BLOCK_SIZE);//读取SD卡里的数据//把SD卡的数据通过蓝牙传输到电脑for(i=0;i<BLOCK_SIZE;i++){Usart_SendByte(USART3,Buffer_Block_Rx[i]);while(USART_GetFlagStatus(USART3,USART_FLAG_TC) != SET);}       //传输完成pic_block++;//传输完了一块//当传输完了这张图片,相关参数归零,开始传输下一张图片//320*240*2÷512=300,这里其实是pic_block从零增到299停止了,再到这里就是300if(pic_block==300){pic_block=0;break;}}pic_bl_num++;//当读取到的的图片编号增加}}
}           

Pycharm

import serial
#配置串口号和传输速率
ser = serial.Serial("com5", 115200)
#bmp320*240大小的格式文件的头
head = b'\x42\x4d\x38\x58\x02\x00\x00\x00\x00\x00\x36\x00\x00\x00\x28\x00\x00\x00\x40\x01\x00\x00\xf0\x00\x00\x00\x01\x00\x10\x00\x00\x00\x00\x00\x02\x58\x02\x00\x23\x2e\x00\x00\x23\x2e\x00\x00\x00\x00\x00\x00\x00\x00'
#一张图片的大小
pic_size = (320 * 240 * 2)
#图片的编号j=0while j<10:if j==0:f = open("D:/BlueTooth/0.bmp", "w+b")if j==1:f = open("D:/BlueTooth/1.bmp", "w+b")if j==2:f = open("D:/BlueTooth/2.bmp", "w+b")if j==3:f = open("D:/BlueTooth/3.bmp", "w+b")if j==4:f = open("D:/BlueTooth/4.bmp", "w+b")if j==5:f = open("D:/BlueTooth/5.bmp", "w+b")if j==6:f = open("D:/BlueTooth/6.bmp", "w+b")if j==7:f = open("D:/BlueTooth/7.bmp", "w+b")if j==8:f = open("D:/BlueTooth/8.bmp", "w+b")if j==9:f = open("D:/BlueTooth/9.bmp", "w+b")f.write(head)# 下一张图片j+=1# 接收到初始信号while True:a = ser.read()print(a)if (a) != b'b':print("Wait")# ser.write("w")else:print("OK")breakpic_size = (320 * 240 * 2)# 接收数据while pic_size > 0:data = ser.read()print(data)if data == b'':continueelse:f.write(data)pic_size -= 1# bmp格式文件的尾部加上俩这个f.write(b'\x00\x00')# 关闭文件f.close()#关闭串口
ser.close()

总结经验

问题一:蓝牙的传输速率问题
蓝牙模块的波特率不建议设置为1382400,这个速度太大,用电脑设置过后,由于电脑不能产生1382400的波特率,所以只能用单片机对它进行处理了。

问题二:符号错误问题
不能正常接收,一个相同的数据会被接收好次
再次确认16位数据是否有问题

原来是&&和&的问题
还有用printf被我设置为用USARTx来发送了,所以在中断的时候它也会去发送到蓝牙里面

问题三:抄写函数问题

读写数据错误,和期望的读写的数据不一样->直接用给的函数试试->可以,但是为什么从给的函数改一点变成自己的函数就不对了?->抄错了一个函数

问题四:SD读写问题
还是有一个错误,就是第510、511位都是0?为什么->发现Code或者什么东西超过9000之后就会出现这个问题,因为我给led白白的写了很多代码,用来占内存,定义并且使用了很多u16的数据,可能是Keil没破解?Keil确实没有破解,破解了之后发现只要是用了LCD就会出现这个问题,不太懂。幸好项目不需要使用屏幕

问题五:漏写数据类型问题
多一个pic_sd_num++就会出错???
原来是extern chuaning的时候没有说他的类型 extern u8 chuaning
这个时候它有可能不提醒你出错,要重新编译工程才提醒
…\HARDWARE\EXTI\exti.c(130): warning: #260-D: explicit type is missing (“int” assumed)

要保存好每一个版本,一点一点加功能,如果有新模块要单独拎出来试验一下,做好版本的功能说明·

晨起管家----蓝牙传图V2.5相关推荐

  1. 晨起管家----蓝牙传图

    蓝牙传图 蓝牙 蓝牙模块 蓝牙模块的AT指令使用 蓝牙模块配置 蓝牙模块发送数据 蓝牙模块接受数据 演示 参考的博文: stm32调用OV7670获取图像并通过蓝牙传输至PC. 在回家的前一天,项目负 ...

  2. esp32拍照传输到手机android,ESP32 之 esp32-cam wifi拍照传图系统2

    ESP32 之 esp32-cam wifi拍照传图系统2 ESP32 之 esp32-cam wifi拍照传图系统2 ESP32 之 esp32-cam wifi拍照传图系统 补充说明 ESP32- ...

  3. 如何用计算机蓝牙发送文件,怎么用蓝牙传文件

    怎么用蓝牙传文件 两部手机之间,在没有联网,没有数据线的情况下能互相传送文件吗? 答案是肯定的.那就是使用蓝牙进行互传.那么怎么用蓝牙传文件呢?下面给大家分享一下如何用蓝牙传送文件. 第一步:首先将两 ...

  4. 晨枫U盘维护工具V2.0版

    晨枫U盘维护工具V2.0版 -- 珠海晨枫工作室 制作教程:HDD模式 | ZIP模式 | U+写入模式 | 本地硬盘安装 | 重装封装光盘[光盘版/量产] 更新说明: 2009.1.10: 1.增加 ...

  5. ESP32 之 esp32-cam wifi拍照传图系统2

    ESP32 之 esp32-cam wifi拍照传图系统 补充说明 ESP32-CAM总结 一. ESP32初识 ESP32-CAM模组的核心芯片:ESP32-S 模块是一款超小体积的多功能通用型 8 ...

  6. BlackBerry 10 BlackBerry OS 7 1 手机通过蓝牙串口读取Arduino 蓝牙传过来的温度

    目标:BlackBerry手机通过蓝牙串口读取Arduino 蓝牙传过来的温度 湿度信息 硬件:Arduino主板 + DHT11温湿度传感器 + 蓝牙模块,开发工具C语言 手机:BlackBerry ...

  7. 如何上传图片到fileupload空间_如何用原生js写图片上传组件v2.0(还有新版本)?...

    js图片上传组件: 基本要求: 1.上传的图片可预览,可删除,可被覆盖更新 2.要求图片格式为jpg和png,大小不能超过2M 新加需求: 1.模拟回显,可用本地存储(实际上的回显是通过后台传过来的u ...

  8. 飞鸽传书 v2.51 Build 320 多国语言版

    飞鸽传书 v2.51 Build 320 多国语言版 飞鸽传书是来自俄罗斯的一款高级即时通讯软件,除了聊天基本的音频播放之外它还包含了语音视频.录制.IM标签编辑等功能. 日前,本报报道了南昌市民飞鸽 ...

  9. MarkDown图床助手: 截图-传图-生成url 一步到位

    简介 现在markdown越用越频繁了, md好用是好用, 但就是贴图片的时候有些麻烦: 要截图->上传图片->复制图片url, 于是做了个简单的工具: 截图->传图->生成图 ...

最新文章

  1. python json解析列表显示_求教一下 python 读取 json 以后,输出的问题(unicode 和中文显示)...
  2. poj 3257(哈希+二维dp)
  3. 博客属性10个非常不错的CSS技巧
  4. 模板:快速莫比乌斯变换(FMT)+快速沃尔什变换(FWT)(多项式)
  5. Spring思维导图,让spring不再难懂(一)
  6. linux脚本编写规则,shell脚本编写守则
  7. jquery 立体走马灯_jQuery简单的文字跑马灯特效
  8. Apache 日志配置,包含过滤配置
  9. 信号完整性与电源完整性分析_电源完整性,信号完整性,你说哪个更重要一点?...
  10. oracle中日期格式的注意事项
  11. Windows7系统环境变量path的配置方法
  12. 阿里云服务器(Centos7)安装谷歌浏览器
  13. 图片怎么无损放大?不影响清晰度这么做
  14. 父级fixed_子元素使用position:fixed,导致他的宽度不能和父元素保持一致的解决方案...
  15. 最新!中国大陆人口首超14亿!但我们为什么不再生孩子了?
  16. bootstrap3 文件上传插件fileinput中文说明文档
  17. 生动的SDN基础内容介绍(六)--SDN应用平面和网络测量
  18. 什么是mysql的安装版本的_一:MySQL基本介绍及安装
  19. (2019春)软件构造:雨课堂试卷(第3章)
  20. 计算机打印机端口配置,如何设置打印机端口,打印机端口设置的方法步骤

热门文章

  1. 微信小程序下拉框组件
  2. 使用阈值调优改进分类模型性能
  3. 财务管理中计算机能解决什么问题,事业单位财务管理中计算机技术的作用探究...
  4. TCN(Temporal Convolutional Network,时间卷积网络)
  5. ubuntu安装python3(源码安装方法)
  6. 阿里笔试题(2015)持续更新中
  7. The 15th Heilongjiang Provincial Collegiate Programming Contest (A、G、H、L)
  8. 3月学雷锋 雷锋精神永不褪色
  9. 计算机在生物医学中应用的发展现状,计算机在医学领域中应用的现状.doc
  10. pywinauto java_pywinauto简单介绍