初级会员
- 积分
- 60
- 金钱
- 60
- 注册时间
- 2017-4-24
- 在线时间
- 7 小时
|
5金钱
[mw_shl_code=c,true]u8 ov5640_jpg_photo(u8 *pname)
{
FIL* f_jpg;
u8 res=0;
u32 bwr;
u32 i;
u8* pbuf;
f_jpg=(FIL *)mymalloc(SRAMIN,sizeof(FIL)); //开辟FIL字节的内存区域
if(f_jpg==NULL)return 0XFF; //内存申请失败.
ovx_mode=1;
jpeg_data_ok=0;
sw_ov5640_mode(); //切换为OV5640模式
OV5640_JPEG_Mode(); //JPEG模式
OV5640_OutSize_Set(16,4,1600,1200); //设置输出尺寸(500W)
dcmi_rx_callback=jpeg_dcmi_rx_callback; //JPEG接收数据回调函数
DCMI_DMA_Init((u32)jpeg_buf0,(u32)jpeg_buf1,jpeg_dma_bufsize,DMA_MemoryDataSize_Word,DMA_MemoryInc_Enable);//DCMI DMA配置(双缓冲模式)
// DCMI_DMA_Init((u32)dcmi_line_buf[0],(u32)dcmi_line_buf[1],jpeg_line_size,2,1);//DCMI DMA配置
DCMI_Start(); //启动传输
while(jpeg_data_ok!=1); //等待第一帧图片采集完
jpeg_data_ok=2; //忽略本帧图片,启动下一帧采集
while(jpeg_data_ok!=1); //等待第二帧图片采集完,第二帧,才保存到SD卡去.
DCMI_Stop(); //停止DMA搬运
ovx_mode=0;
sw_sdcard_mode(); //切换为SD卡模式
res=f_open(f_jpg,(const TCHAR*)pname,FA_WRITE|FA_CREATE_NEW);//模式0,或者尝试打开失败,则创建新文件
if(res==0)
{
// printf("jpeg data size:%d\r\n",jpeg_data_len*4);//串口打印JPEG文件大小
pbuf=(u8*)jpeg_data_buf;
for(i=0;i<jpeg_data_len*4;i++)//查找0XFF,0XD8和0XFF,0XD9,获取jpg文件大小
{
if((pbuf==0XFF)&&(pbuf[i+1]==0XD8))break;//找到FF D8
}
if(i==jpeg_data_len*4)res=0XFD;//没找到0XFF,0XD8
else//找到了
{
pbuf+=i;//偏移到0XFF,0XD8处
res=f_write(f_jpg,pbuf,jpeg_data_len*4-i,&bwr);
u32 a;
for(a=0;a<jpeg_data_len*4-i;a++)
{
while((USART1->SR&0X40)==0);
USART1->DR=pbuf[a];//串口输出
}
if(bwr!=(jpeg_data_len*4-i))res=0XFE;
}
}
jpeg_data_len=0;
f_close(f_jpg);
sw_ov5640_mode(); //切换为OV5640模式
OV5640_RGB565_Mode(); //RGB565模式
DCMI_DMA_Init((u32)&LCD->LCD_RAM,0,1,DMA_MemoryDataSize_HalfWord,DMA_MemoryInc_Disable);//DCMI DMA配置
myfree(SRAMIN,f_jpg);
return res;
}
[/mw_shl_code]
就是这段代码,这是拍照实验里面的源码,经过萌新的努力,已经可以再ESP8266程序里面控制单片机进行拍照了,可以看到之前是拍照并且保存在内存卡里面,并且通过这段指令传输到计算机
for(a=0;a<jpeg_data_len*4-i;a++)
{
while((USART1->SR&0X40)==0);
USART1->DR=pbuf[a];//串口输出
}
请问有什么办法可以把程序改一下 通过WIFI传输到计算机么? 现在WIFI虚拟的串口是USART3。
谢谢各位大神,萌新感激不尽!
|
|