OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 20978|回复: 41

STM32F103ZET6+OV7670串口成功输出图像数据,但显示出问题了 『求解』

[复制链接]

3

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2014-3-20
在线时间
4 小时
发表于 2014-3-20 10:09:22 | 显示全部楼层 |阅读模式
STM32F103ZET6+OV7670串口成功输出图像数据,但显示出问题了!
具体为:我通过串口将OV7670拍摄的QVGA格式的图像(RGB565)发送到串口助手,然后以txt格式保存下来。再通过matlab将txt文件中每个像素的RGB565格式,转换为RGB格式,并显示。但结果如下图所示,请大家指点下错在哪里了呢?上面的图片为手机拍摄,下面的图像为OV7670拍摄并用matlab转换后的结果,比较可以发现图像错位并且发生了信号的反折。错位肯定不是摄像头抖动造成的,因通过多幅图像实现发现都是这样的错误显示!




 
下面为matlab,转化为正常RGB值的程序:

 

length=240;width=320;
in_name='0113.txt';%0213 1253.txt
out_name='0113.bmp';%0213
pic=uint8(zeros(length,width,3));

in=textread(in_name,'%s');
dec_data=hex2dec(in);
% dlmwrite('dec.txt',dec_data,'','');
% dec_test=dec_data(1:320);
k=1;
for i=1:length
for j=1:width
H=dec_data(k,1);
if(k+1>width*length*2)
k=k-1;
else
k=k;
end
L=dec_data(k+1,1);
k=k+2;
pic(i,j,1)=(H/8)*8;
pic(i,j,2)=(mod(H,8)*8+L/32)*4;
pic(i,j,3)=(mod(L,32))*8; 
end
end
figure,imshow(pic);
imwrite(pic,out_name);
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

39

主题

2026

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2020
金钱
2020
注册时间
2013-5-1
在线时间
87 小时
发表于 2014-3-20 13:20:43 | 显示全部楼层
错误的那一部分应该是有数据丢失,导致下面部分错位了....像素点不少的话问题可能是出在摄像头驱动程序部分...
博观而约取,厚积而薄发。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-3-20 17:27:55 | 显示全部楼层
是不是发送过程有数据错误?或者摄像头数据有更新?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2014-3-20
在线时间
4 小时
 楼主| 发表于 2014-3-21 15:59:56 | 显示全部楼层
回复【3楼】正点原子:
-我为了把串口数据输出来,串口的中断优先级设置为最高,不知道是不是我的优先级设置有问题,会导致数据发送出来错误,因为我试着把串口的优先级改低后,一副图像数据没有发送完,直接就跳出去了!但优先级设置最高,这样确实可以保证完整发送完一帧图像数据,再继续发送另一帧。我可以肯定数据量是对的,就是应该没有数据丢失,因为你看两幅图像比较,是图像各部分之间发生了信号的反折,就是那种镜像对称发生了反转。这应该就是图像像素顺序发送错了,但这不应该要么全反,要么全错,怎么会部分错了呢?
回复 支持 反对

使用道具 举报

3

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2014-3-20
在线时间
4 小时
 楼主| 发表于 2014-3-21 16:03:21 | 显示全部楼层
回复【2楼】745021926:
---------------------------------
摄像头的驱动,我看就是正点原子的,是把图像先存到FIFO,再输出到TFT,那版,我只是把数据由FIFO发送到TFT前,加了串口数据输出,这样不就把TFT要显示的图像,就完整输出来了吗?
回复 支持 反对

使用道具 举报

39

主题

2026

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2020
金钱
2020
注册时间
2013-5-1
在线时间
87 小时
发表于 2014-3-21 16:05:49 | 显示全部楼层
回复【5楼】ichina:
---------------------------------
把波特率的速度调高,看会不会对图像有影响?
博观而约取,厚积而薄发。
回复 支持 反对

使用道具 举报

3

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2014-3-20
在线时间
4 小时
 楼主| 发表于 2014-3-21 16:24:24 | 显示全部楼层
回复【6楼】745021926:
---------------------------------
我直接把波特率设的就是最高:115200
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2014-4-1
在线时间
0 小时
发表于 2014-4-22 16:43:35 | 显示全部楼层
我试过把头像满满按照原子的驱动程序显示在TFT上,第一帧的画面是这样子,第二帧以后的画面就恢复正常了,楼主试试看第二帧图像的数据
回复 支持 反对

使用道具 举报

16

主题

69

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2013-3-17
在线时间
13 小时
发表于 2014-6-10 17:51:06 | 显示全部楼层
回复【5楼】ichina:
---------------------------------
请问楼主,你用串口输出一帧数据大约多长时间?
回复 支持 反对

使用道具 举报

3

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2014-3-20
在线时间
4 小时
 楼主| 发表于 2014-6-19 21:00:59 | 显示全部楼层
回复【9楼】ejie+:
---------------------------------
 瞬间就完成了,应该是毫秒级的!
回复 支持 反对

使用道具 举报

14

主题

67

帖子

0

精华

初级会员

Rank: 2

积分
154
金钱
154
注册时间
2013-12-24
在线时间
5 小时
发表于 2014-6-20 01:19:42 | 显示全部楼层
mark
回复 支持 反对

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2014-7-21
在线时间
0 小时
发表于 2014-7-21 10:39:59 | 显示全部楼层
回复【10楼】ichina:
---------------------------------
楼主用的是带FIFO的还是不带的?用串口输出是用printf直接打印还是用DMA传输?那个matlab程序中的dec_data是多少乘多少的矩阵?搞了好几天摄像头了,出来的数据都不对,求指教。
回复 支持 反对

使用道具 举报

3

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2014-3-20
在线时间
4 小时
 楼主| 发表于 2014-11-15 17:20:33 | 显示全部楼层
回复【12楼】风过暖城:
---------------------------------
带FIFO的,DMA传输
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2015-2-2
在线时间
0 小时
发表于 2015-2-2 16:01:04 | 显示全部楼层
回复【10楼】ichina:
---------------------------------
一帧图像是153600字节,我发送完成用了15秒诶,
回复 支持 反对

使用道具 举报

3

主题

7

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2015-1-24
在线时间
0 小时
发表于 2015-3-10 21:23:08 | 显示全部楼层
楼主能开源吗,最近也在做个图像由串口输出的实验,但RGB值始终不对啊
回复 支持 反对

使用道具 举报

5

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2015-3-28
在线时间
0 小时
发表于 2015-5-12 15:50:25 | 显示全部楼层
借用你的matlab代码 显示正常  谢谢楼主
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2015-6-9
在线时间
0 小时
发表于 2015-6-9 21:15:30 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
      原子哥,我现在做的毕设是将OV7670采集的数据发送到电脑里的指定的文件夹中。楼主说的把OV7670拍摄的QVGA格式的图像(RGB565)发送到串口助手是参考历程中的串口实验实现的吗,如果不是的话应该怎么传呢?还有我想将图像存进电脑的文件夹中,是不是要在电脑上写一个上位机接受图像的软件,我在网上搜到一些用VC或者VB编的上位机图像处理软件不知道能不能用在我的设计上,本人刚接触stm32不久,请大神指点一下。
。。。。。。。。。。。
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2015-6-9
在线时间
0 小时
发表于 2015-6-9 22:13:08 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
追问一下,通过串口传图片的话还要写下位机与上位机的传输协议吗,还是就是用串口传输协议?
。。。。。。。。。。。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-6-9 22:45:11 | 显示全部楼层
回复【18楼】zhenshihaonan:
---------------------------------
最好有协议回复

【16楼】zhenshihaonan:
---------------------------------
现成代码没有哦,你这个就printf打印出去就可以了,不难啊
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2015-6-9
在线时间
0 小时
发表于 2015-6-10 22:53:54 | 显示全部楼层
回复【19楼】正点原子:
---------------------------
      原子哥我试了一下串口打印实在是太慢了,我的设计是一个带拍照功能的报警器,要求拍下的照片能以最快速度传送到电脑上。我看了一下照相机实验是将数据存进SD卡里,那如果我结合USB读卡器实验,让电脑读出SD卡,这样算不算变相把数据传到电脑上了呢,别人能从电脑提取我的图片吗?因为我的设计只要做到把图片传到电脑上就行,另一个同学做的是用手机APP把图片从电脑上提取到手机上。毕设时间有点紧,办法有点取巧,不知道原子哥觉得行的通行不通。
。。。。。。。。。。。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-6-11 00:17:51 | 显示全部楼层
回复【20楼】zhenshihaonan:
---------------------------------
这样更慢吧。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2015-6-9
在线时间
0 小时
发表于 2015-6-11 21:27:49 | 显示全部楼层
回复【21楼】正点原子:
---------------------------------
      原子哥现在我把照相机实验和USB读卡器实验合并在一块,想实现IO接收到一个高电平后拍照,然后通过USB在电脑上读出SD卡上拍下的图片,中途不用手动操作,两个程序的内容最好同时实现。但是现在程序写完了之后一个功能都实现不了。。是我的主函数逻辑有问题吗?已经搞了一整天了还是没有头绪。。。
      在原有照相机实验的基础上又引用了USB读卡器主函数中的几个头文件#include "mass_mal.h"  #include "usb_lib.h"  #include "hw_config.h"
#include "usb_pwr.h"  #include "memory.h" #include "usb_bot.h"
      void usb_port_set(u8 enable)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);          
if(enable)_SetCNTR(_GetCNTR()&(~(1<<1)));
else
{   
_SetCNTR(_GetCNTR()|(1<<1));  
GPIOA->CRH|=0X00033000;
PAout(12)=0;        
}
}  
extern u8 ov_sta;
extern u8 ov_frame;
void camera_refresh(void)
{
u32 j;
  u16 color;  
if(ov_sta==2)
{
LCD_Scan_Dir(U2D_L2R);  
LCD_SetCursor(0x00,0x0000);
LCD_WriteRAM_Prepare();     
OV7670_RRST=0;
OV7670_RCK=0;
OV7670_RCK=1;
OV7670_RCK=0;
OV7670_RRST=1;  
OV7670_RCK=1;  
for(j=0;j<76800;j++)
{
OV7670_RCK=0;
color=GPIOC->IDR&0XFF;
OV7670_RCK=1; 
color<<=8;  
OV7670_RCK=0;
color|=GPIOC->IDR&0XFF;
OV7670_RCK=1; 
LCD->LCD_RAM=color;    
}     
EXTI_ClearITPendingBit(EXTI_Line8);  
ov_sta=0;
  ov_frame++; 
LCD_Scan_Dir(DFT_SCAN_DIR);

}


//??????×????¨±?????????
//×é????:????"0HOTO/PIC13141.bmp"????????
void camera_new_pathname(u8 *pname)
{  
u8 res;  
u16 index=0;
while(index<0XFFFF)
{
sprintf((char*)pname,"0HOTO/PIC%05d.bmp",index);
res=f_open(ftemp,(const TCHAR*)pname,FA_READ);//?????ò??????????
if(res==FR_NO_FILE)break; //??????????????=?????????è????.
index++;
}
}  

 
 int main(void)
 {  
u8 res;  
u8 *pname;    
u8 i;  
u8 sd_ok=1;
  u8 t;
u8 offline_cnt=0;
u8 tct=0;
u8 USB_STA;
u8 Divece_STA; 
 
delay_init();        
NVIC_Configuration(); 
uart_init(9600);  
  LED_Init();     
LCD_Init();
BEEP_Init();       
KEY_Init();  
  mem_init(SRAMIN);
usmart_dev.init(72);
  exfuns_init();  
   f_mount(0,fs[0]);   
  f_mount(1,fs[1]); 
piclib_init();
POINT_COLOR=RED;    
//LCD_ShowString(60,50,200,16,16,"WarShip STM32");
//LCD_ShowString(60,70,200,16,16,"USB Card Reader TEST");
//LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
//LCD_ShowString(60,110,200,16,16,"2012/9/25");
  SPI_Flash_Init();
if(SD_Initialize());//LCD_ShowString(60,130,200,16,16,"SD Card Error!");
else
{      
    LCD_ShowString(60,130,200,16,16,"SD Card Size:     MB");
      Mass_Memory_Size[0]=(long long)SD_GetSectorCount()*512;
    Mass_Block_Size[0] =512;
    Mass_Block_Count[0]=Mass_Memory_Size[0]/Mass_Block_Size[0];
    LCD_ShowNum(164,130,Mass_Memory_Size[0]>>20,5,16);
  }
if(SPI_FLASH_TYPE!=W25Q64);//LCD_ShowString(60,130,200,16,16,"W25Q64 Error!");
{      
      Mass_Memory_Size[1]=1024*1024*6;
    Mass_Block_Size[1] =512;
    Mass_Block_Count[1]=Mass_Memory_Size[1]/Mass_Block_Size[1];
 
}
delay_ms(1800);
  usb_port_set(0); 
delay_ms(300);
    usb_port_set(1);    
  //LCD_ShowString(60,170,200,16,16,"USB Connecting...");  
  USB_Interrupts_Config();    
  Set_USBClock();   
  USB_Init();     
delay_ms(1800);
 
POINT_COLOR=RED;      
  while(font_init()) 
{     
LCD_ShowString(60,50,200,16,16,"Font Error!");
delay_ms(200);   
LCD_Fill(60,50,240,66,WHITE);      
}    
res=f_mkdir("0:/PHOTO");
if(res!=FR_EXIST&&res!=FR_OK) 
{     
Show_Str(60,150,240,16,"SD?¨?í?ó!",16,0);
delay_ms(200);   
Show_Str(60,170,240,16,"????????????????!",16,0);
sd_ok=0;  
}else
{
Show_Str(60,150,240,16,"SD?¨????!",16,0);
delay_ms(200);   
Show_Str(60,170,240,16,"KEY_UP:????",16,0);
sd_ok=1;     
}         
  pname=mymalloc(SRAMIN,30);     
  while(pname==NULL)
  {     
Show_Str(60,190,240,16,"????·????§°?!",16,0);
delay_ms(200);   
LCD_Fill(60,190,240,146,WHITE);     
delay_ms(200);   
}      
while(OV7670_Init())
{
Show_Str(60,190,240,16,"OV7670 ?í?ó!",16,0);
delay_ms(200);
    LCD_Fill(60,190,239,186,WHITE);
delay_ms(200);
}
  Show_Str(60,190,200,16,"OV7670 ????",16,0);
delay_ms(1500);    
TIM6_Int_Init(10000,7199);   
EXTI8_Init();
OV7670_Window_Set(10,174,240,320);   
   OV7670_CS=0;
REDLINE_Init();
  while(1)
{ if(USB_STA!=USB_STATUS_REG)//×?????±??? 
{      
LCD_Fill(60,190,240,190+16,WHITE);//????????       
if(USB_STATUS_REG&0x01)//??????   
{
LCD_ShowString(60,190,200,16,16,"USB Writing...");//?á??USB????????????  
}
if(USB_STATUS_REG&0x02)//??????
{
LCD_ShowString(60,190,200,16,16,"USB Reading...");//?á??USB????????????    
}     
if(USB_STATUS_REG&0x04)LCD_ShowString(60,210,200,16,16,"USB Write Err ");//?á???????í?ó
else LCD_Fill(60,210,240,210+16,WHITE);//????????   
if(USB_STATUS_REG&0x08)LCD_ShowString(60,230,200,16,16,"USB Read  Err ");//?á???????í?ó
else LCD_Fill(60,230,240,230+16,WHITE);//????????    
USB_STA=USB_STATUS_REG;//????×??ó??×???
}
if(Divece_STA!=bDeviceState) 
{
if(bDeviceState==CONFIGURED)LCD_ShowString(60,170,200,16,16,"USB Connected    ");
else LCD_ShowString(60,170,200,16,16,"USB DisConnected ");
}
tct++;
if(tct==200)
{
tct=0;
LED0=!LED0;
if(USB_STATUS_REG&0x10)
{
offline_cnt=0;
bDeviceState=CONFIGURED;
}else 
{
offline_cnt++;  
if(offline_cnt>10)bDeviceState=UNCONNECTED;
}
USB_STATUS_REG=0;
}
t=REDLINE_Scan();
    if(t==1)
{
LED1=0;
//BEEP=1;
LED0=0;
if(sd_ok)
{
LED1=0;
camera_new_pathname(pname);     
if(bmp_encode(pname,0,0,240,320,0))
{
Show_Str(40,130,240,12,"?????????í?ó!",12,0);  
}else 
{
Show_Str(40,130,240,12,"????????!",12,0);
Show_Str(40,150,240,12,"±?????:",12,0);
  Show_Str(40+42,150,240,12,pname,12,0);     
  BEEP=1;
delay_ms(100);
}
}
else 
{     
Show_Str(40,130,240,12,"SD?¨?í?ó!",12,0);
  Show_Str(40,150,240,12,"??????????????!",12,0);     
  }
    //BEEP=0;
//LED1=1;
delay_ms(1000);
}else 
LED1=1;
  //BEEP=0;
LED0=1;
delay_ms(10);
  camera_refresh();
i++;
if(i==20)//DS0????.
{
i=0;
LED0=!LED0;
  }
}              
}
整个程序没有编译上的错误,可以烧进板子里,但是摄像头不工作,tft屏幕也是雪白,并且也读不了SD卡。
想问一下原子哥是我主程序改的有问题,还是因为两个实验都用到SD卡,所以冲突了的原因。
。。。。。。。。。。。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-6-11 22:06:47 | 显示全部楼层
回复【22楼】zhenshihaonan:
---------------------------------
思路就有问题。

你如何实现:stm32拍到一张照片,电脑就能读出来,全过程自动实现。
这个,你怎么实现?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

7

主题

67

帖子

0

精华

初级会员

Rank: 2

积分
156
金钱
156
注册时间
2013-8-24
在线时间
16 小时
发表于 2015-6-11 22:58:50 | 显示全部楼层
不错,有时间也试试看
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2015-6-9
在线时间
0 小时
发表于 2015-6-13 18:27:58 | 显示全部楼层
回复【23楼】正点原子:
---------------------------------
     原子哥我只是想单纯的想把USB读卡器实验移植到照相机实验上去,就像把手机插在电脑上,电脑可以识别手机中SD的内容,这时手机拍下照片,电脑刷新一下就会看见拍下的照片已经在SD的目录里了,我认为理论上是可行的,结果出现好多问题,至今还未解决....
     我的TFT屏上显示的内容是 战舰 STM32开发板
                                             照相机实验
                                             WK_UP:拍照
                                             正点原子@ALIENTEK
                                             2012年9月19日
                                             SD卡正常!
                                             USB Connecting
                                             OV7670 正常
然而OV7670并不工作,让我纠结。屏幕一直是显示这些内容,没有显示摄像头拍到的内容,照相机功能也没有,USB也无法读出SD卡,实在是想不出是什么原因。
请原子哥给指条明路,我这两个实验结合是理论上就无法实现还是我的程序改的不对,应该怎么改呢。
main函数如下:
extern u8 ov_sta;
extern u8 ov_frame;    
void camera_refresh(void)
{
u32 j;
  u16 color;  
if(ov_sta==2)
{
LCD_Scan_Dir(U2D_L2R);
LCD_SetCursor(0x00,0x0000);
LCD_WriteRAM_Prepare();     
OV7670_RRST=0;  
OV7670_RCK=0;
OV7670_RCK=1;
OV7670_RCK=0;
OV7670_RRST=1;
OV7670_RCK=1;  
for(j=0;j<76800;j++)
{
OV7670_RCK=0;
color=GPIOC->IDR&0XFF;
OV7670_RCK=1; 
color<<=8;  
OV7670_RCK=0;
color|=GPIOC->IDR&0XFF;
OV7670_RCK=1; 
LCD->LCD_RAM=color;    
}     
EXTI_ClearITPendingBit(EXTI_Line8);  
ov_sta=0;
  ov_frame++; 
LCD_Scan_Dir(DFT_SCAN_DIR);  

}
void usb_port_set(u8 enable)//把这句定义USB电源供电的语句放在这应该没问题吧?
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);         
if(enable)_SetCNTR(_GetCNTR()&(~(1<<1)));
else
{   
_SetCNTR(_GetCNTR()|(1<<1));  
GPIOA->CRH&=0XFFF00FFF;
GPIOA->CRH|=0X00033000;
PAout(12)=0;        
}
}  
void camera_new_pathname(u8 *pname)
{  
u8 res;  
u16 index=0;
while(index<0XFFFF)
{
sprintf((char*)pname,"0HOTO/PIC%05d.bmp",index);
res=f_open(ftemp,(const TCHAR*)pname,FA_READ);
if(res==FR_NO_FILE)break;
index++;
}
}  

 
 int main(void)
 {  
u8 res;  
u8 *pname;    
u8 i;  
u8 sd_ok=1;
  u8 key;
u8 offline_cnt=0;//USB要用到的四个变量
u8 tct=0;
u8 USB_STA;
u8 Divece_STA; 
 
delay_init();          
NVIC_Configuration(); 
uart_init(9600);  
  LED_Init();      
LCD_Init();
BEEP_Init();        
KEY_Init();  
  mem_init(SRAMIN);
usmart_dev.init(72);
  exfuns_init();  
   f_mount(0,fs[0]);   
  f_mount(1,fs[1]); 
piclib_init();
POINT_COLOR=RED;    
  SPI_Flash_Init();
if(SD_Initialize())LCD_ShowString(60,190,200,16,16,"SD Card Error!");
else 
{      
LCD_ShowString(60,190,200,16,16,"SD Card Size:     MB");
      Mass_Memory_Size[0]=(long long)SD_GetSectorCount()*512;
    Mass_Block_Size[0] =512;
    Mass_Block_Count[0]=Mass_Memory_Size[0]/Mass_Block_Size[0];
  LCD_ShowNum(164,130,Mass_Memory_Size[0]>>20,5,16);
  }
if(SPI_FLASH_TYPE!=W25Q64)LCD_ShowString(60,190,200,16,16,"W25Q64 Error!");
else //SPI FLASH ????
{      
      Mass_Memory_Size[1]=1024*1024*6;
    Mass_Block_Size[1] =512;
    Mass_Block_Count[1]=Mass_Memory_Size[1]/Mass_Block_Size[1];
LCD_ShowString(60,210,200,16,16,"SPI FLASH Size:6144KB");  
}
  while(font_init()) 
{     
LCD_ShowString(60,50,200,16,16,"Font Error!");
delay_ms(200);   
LCD_Fill(60,50,240,66,WHITE);      
}    
  Show_Str(60,50,200,16,"战舰STM32开发板",16,0);       
Show_Str(60,70,200,16,"照相机实验",16,0);       
Show_Str(60,90,200,16,"WK_UP:拍照",16,0);       
Show_Str(60,110,200,16,"正点原子@ALIENTEK",16,0);       
Show_Str(60,130,200,16,"2012年9月19日",16,0);
res=f_mkdir("0:/PHOTO");
if(res!=FR_EXIST&&res!=FR_OK) 
{     
Show_Str(60,150,240,16,"SD?¨?í?ó!",16,0);
delay_ms(200);   
Show_Str(60,170,240,16,"????????????????!",16,0);
sd_ok=0;  
}else
{
Show_Str(60,150,240,16,"SD?¨????!",16,0);
delay_ms(200);   
Show_Str(60,170,240,16,"KEY_UP:????",16,0);
sd_ok=1;     
}         
  pname=mymalloc(SRAMIN,30);     
  while(pname==NULL)
  {     
Show_Str(60,190,240,16,"????·????§°?!",16,0);
delay_ms(200);   
LCD_Fill(60,190,240,146,WHITE);     
delay_ms(200);   
}      
while(OV7670_Init())//按说有这句初始化ov7670的话,屏幕显示ov7670正常以后,LCD就会有图像的,然而.......
{
Show_Str(60,190,240,16,"OV7670 ?í?ó!",16,0);
delay_ms(200);
  LCD_Fill(60,190,239,186,WHITE);
delay_ms(200);
}
  Show_Str(60,190,200,16,"OV7670 ????",16,0);
delay_ms(1500);    
TIM6_Int_Init(10000,7199);   
EXTI8_Init();
OV7670_Window_Set(10,174,240,320);   
  OV7670_CS=0;
  delay_ms(1800);
  usb_port_set(0); 
delay_ms(300);
    usb_port_set(1);    
  LCD_ShowString(60,170,200,16,16,"USB Connecting..."); 
    //USB????
  USB_Interrupts_Config();    
  Set_USBClock();   
  USB_Init();     
delay_ms(1800);         
  while(1)//死循环的逻辑不知道对不对。
{
key=KEY_Scan(0);?
if(key==KEY_UP)
{
LED1=0;
//BEEP=1;
LED0=0;
if(sd_ok)
{
LED1=0;
camera_new_pathname(pname);     
if(bmp_encode(pname,0,0,240,320,0))
{
Show_Str(40,130,240,12,"?????????í?ó!",12,0);  
}else 
{
Show_Str(40,130,240,12,"????????!",12,0);
Show_Str(40,150,240,12,"±?????:",12,0);
  Show_Str(40+42,150,240,12,pname,12,0);     
  BEEP=1;
delay_ms(100);
}
}
else
{     
Show_Str(40,130,240,12,"SD?¨?í?ó!",12,0);
  Show_Str(40,150,240,12,"??????????????!",12,0);     
  }
    //BEEP=0;
//LED1=1;
delay_ms(1000);
    if(USB_STA!=USB_STATUS_REG)
{      
LCD_Fill(60,190,240,190+16,WHITE);       
if(USB_STATUS_REG&0x01)
{
LCD_ShowString(60,250,200,16,16,"USB Writing...");  
}
if(USB_STATUS_REG&0x02)//??????
{
LCD_ShowString(60,250,200,16,16,"USB Reading...");  
}     
if(USB_STATUS_REG&0x04)LCD_ShowString(60,270,200,16,16,"USB Write Err ");
else// LCD_Fill(60,210,240,210+16,WHITE);  
if(USB_STATUS_REG&0x08)LCD_ShowString(60,270,200,16,16,"USB Read  Err ");
else //LCD_Fill(60,230,240,230+16,WHITE);
USB_STA=USB_STATUS_REG;
}
}else 
LED1=1;
  //BEEP=0;
LED0=1;
delay_ms(10);
  camera_refresh();
i++;
if(i==20)
{
i=0;
LED0=!LED0;
  }
if(Divece_STA!=bDeviceState) 
{
if(bDeviceState==CONFIGURED)LCD_ShowString(60,170,200,16,16,"USB Connected    ");
else LCD_ShowString(60,170,200,16,16,"USB DisConnected ");
Divece_STA=bDeviceState;
}
tct++;
if(tct==200)
{
tct=0;
LED0=!LED0;
if(USB_STATUS_REG&0x10)
{
offline_cnt=0;
bDeviceState=CONFIGURED;
}else
{
offline_cnt++;  
if(offline_cnt>10)bDeviceState=UNCONNECTED;
}
USB_STATUS_REG=0;
}
}              
}
因为要做毕设所以第一次接触stm32,以前51学的都不是很扎实,希望原子哥多多指点,最近自己瞎琢磨的已经有点醉了。
。。。。。。。。。。。
回复 支持 反对

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2015-6-9
在线时间
0 小时
发表于 2015-6-15 01:24:08 | 显示全部楼层
回复【23楼】正点原子:
---------------------------------
      我把程序挨个查了一遍,发现只要有USB_Init();整个程序运转就会卡住,写在循环外面就卡在显示文字那块,写进循环摄像头勉强能能工作一瞬间,然后画面就卡在哪里了,USB读卡器也不工作。把这句话注释掉照相机的功能就能实现,USB读卡器同样实现不了(USB初始化都被注释掉了....)。想问一下原子哥这是什么问题,摄像头和USB不能同时初始化?
。。。。。。。。。。。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-6-17 00:58:59 | 显示全部楼层
回复【26楼】zhenshihaonan:
---------------------------------
IO有没有冲突?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

17

主题

81

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2013-12-16
在线时间
6 小时
发表于 2015-12-15 11:02:20 | 显示全部楼层
这个帖子就这么沉了吗?没有下文了吗?还是说楼主已经解决了?帮顶一下!
楼主要是解决了就出来分享一下哈~
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
24
金钱
24
注册时间
2015-12-16
在线时间
0 小时
发表于 2015-12-16 10:34:50 | 显示全部楼层
楼主求串口发送到电脑转TXT 的源码!!!
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
24
金钱
24
注册时间
2015-12-16
在线时间
0 小时
发表于 2015-12-16 10:38:58 | 显示全部楼层
462707875@qq.com
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
24
金钱
24
注册时间
2015-12-16
在线时间
0 小时
发表于 2015-12-16 10:40:08 | 显示全部楼层
回复【27楼】正点原子:
------------------------------
原子个有木有串口发送图像的源码求分享,上位机也求分享。462707875@qq.com
回复 支持 反对

使用道具 举报

10

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2015-7-9
在线时间
19 小时
发表于 2015-12-18 09:46:52 | 显示全部楼层
求串口输出图像数据的代码和上位机   274725824@qq.com
回复 支持 反对

使用道具 举报

7

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
158
金钱
158
注册时间
2016-5-7
在线时间
41 小时
发表于 2016-5-7 17:50:29 | 显示全部楼层
楼主,,可不可以把你的程序发我参考一下呢
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2016-6-8
在线时间
1 小时
发表于 2016-6-12 12:45:12 | 显示全部楼层
lz能不能发一下你的程序和上位机资料。。。。411761045@qq.com,谢谢你了
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2016-6-24
在线时间
1 小时
发表于 2016-6-24 14:42:35 | 显示全部楼层
同求:
lz能不能发一下你的上位机资料。。。。369829174@qq.com,谢谢你了
回复 支持 反对

使用道具 举报

0

主题

0

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2020-12-10
在线时间
20 小时
发表于 2016-8-17 19:10:34 | 显示全部楼层
楼主 需要你的程序1016022412@qq.com  在线等   ^_^
回复 支持 反对

使用道具 举报

4

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2013-5-10
在线时间
49 小时
发表于 2017-5-9 16:24:28 | 显示全部楼层
楼主!我用你的代码,为什么显示的是花屏?求教!
回复 支持 反对

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2018-10-13
在线时间
4 小时
发表于 2018-11-7 11:14:21 | 显示全部楼层
求楼主分享一下程序,谢谢!1187174926@qq.com
回复 支持 反对

使用道具 举报

7

主题

21

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2019-4-8
在线时间
20 小时
发表于 2019-4-15 22:46:42 | 显示全部楼层
楼主求分享一下源码  感谢!!!!  2020005498@qq.com
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2019-5-6
在线时间
3 小时
发表于 2019-5-7 16:54:52 | 显示全部楼层
qinshuhou 发表于 2015-2-2 16:01
**** 作者被禁止或删除 内容自动屏蔽 ****

请问用DMA如何一次传输153600个数据,我的DMA最多只能传65535个数据
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2020-5-21
在线时间
1 小时
发表于 2020-5-21 14:47:16 | 显示全部楼层
我的matlab仿真怎么报错
>> Untitled
索引超出矩阵维度。

出错 Untitled (line 19)
L=dec_data(k+1,1);
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2021-11-29
在线时间
4 小时
发表于 2021-11-29 11:28:41 | 显示全部楼层
码住,学习一下
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-18 07:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表