智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 9197|回复: 27
打印 上一主题 下一主题

上位机采集出的图有时候分为两截,图像下一截是后一帧图像的上半部分,怎么回事?

  [复制链接]

2

主题

30

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1078
威望
613
贡献
255
兑换币
12
注册时间
2012-1-7
在线时间
105 小时
跳转到指定楼层
1#
发表于 2012-3-21 21:03:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

有时会是如上的图片
这个是原图
上位机使用了坛子里一个高手写的,感谢这位高手。
程序如下:
#include<stm32f10x_lib.h>
#include"delay.h"
#include"sys.h"
#include"usart.h"
#include"sccb.h"
#include"exti.h"
//#include"key.h"

int main(void)
{
        u8 i,j;                       
        Stm32_Clock_Init(9); //系统时钟设置
        delay_init(72);             //延时初始化
        uart_init(72,128000);  //串口初始化

        RCC->APB2ENR|=1<<3;
        GPIOB->CRH&=0X00000000;
        GPIOB->CRH|=0X88888888;
        GPIOB->ODR&=0XFFFF00FF;
        GPIOB->ODR|=0XFFFFFFFF;

        SCCB_Init();
        delay_ms(100);

        //SCCB_Write(0x42,0x15,0x24);
        SCCB_Write(0x42,0x11,0x01);
        delay_ms(1000);
        delay_ms(1000);
        delay_ms(1000);
        delay_ms(1000);
        EXTIX_Init();

        while(1)
        {
                while(imageok);
                imageok=1;
                USART1->DR=1;
                while((USART1->SR&0X40)==0);
                for(i=0;i<Ymax;i++)
                {
                        for(j=0;j<Xmax;j++)
                        {
                                if(data[j]==0x01)
                                {
                                        data[j]=0x02;
                                }
                                USART1->DR=data[j];
                                while((USART1->SR&0X40)==0);
                        }
                }

                USART1->DR=1;
                while((USART1->SR&0X40)==0);

                delay_ms(1000);
                delay_ms(1000);
                EXTI->IMR|=(1<<0);
                EXTI->EMR|=(1<<0);
                EXTI->IMR|=(1<<1);
                EXTI->EMR|=(1<<1);       
        }
                         


芯片是STM32,先谢谢各位了。。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

2

主题

30

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1078
威望
613
贡献
255
兑换币
12
注册时间
2012-1-7
在线时间
105 小时
2#
 楼主| 发表于 2012-3-21 21:11:25 | 只看该作者
俺很想知道为什么会出现这种情况???很影响调试,是我的程序有问题吗??
回复 支持 反对

使用道具 举报

36

主题

420

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2528
威望
1341
贡献
513
兑换币
18
注册时间
2011-7-10
在线时间
337 小时
3#
发表于 2012-3-21 21:29:00 | 只看该作者
我用试用版的~~不知怎么就是出不来图像~~郁闷中~~
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
205
威望
132
贡献
41
兑换币
2
注册时间
2011-9-17
在线时间
16 小时
4#
发表于 2012-3-21 21:39:39 | 只看该作者
开行中断或场中断之前清中断标志位
回复 支持 反对

使用道具 举报

2

主题

30

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1078
威望
613
贡献
255
兑换币
12
注册时间
2012-1-7
在线时间
105 小时
5#
 楼主| 发表于 2012-3-21 22:29:44 | 只看该作者
  1. void EXTI0_IRQHandler(void)//VSYNC
  2. {
  3.         VSYNC_Flag=1;
  4.         EXTI->PR=1<<0;
  5. }

  6. void EXTI1_IRQHandler(void)//HREF
  7. {       
  8.         if(VSYNC_Flag)
  9.         {
  10.                 if(HREF_Num<480)
  11.                 {
  12.                         if(HREF_Num%8==0)
  13.                         {
  14.                                 for(pclk_Num=0;pclk_Num<Xmax;pclk_Num++)
  15.                                 {
  16.                                         //rewdata=GPIOB->IDR;
  17.                                         //imagedata=(rewdata&0x0000FF00)>>8;
  18.                                         //data[HREF_Num/10][pclk_Num]=imagedata;
  19.                                         data[HREF_Num/8][pclk_Num]=(GPIOB->IDR&0x0000ff00)>>8;
  20.                                 }
  21.                         }
  22.                         HREF_Num++;
  23.                 }
  24.                 else
  25.                 {
  26.                         EXTI->IMR&=~(1<<0);
  27.                         EXTI->EMR&=~(1<<0);
  28.                         EXTI->IMR&=~(1<<1);
  29.                         EXTI->EMR&=~(1<<1);
  30.                         VSYNC_Flag=0;
  31.                         HREF_Num=0;
  32.                         imageok=0;
  33.                 }
  34.         }
  35.         EXTI->PR=1<<1;
  36. }
复制代码


回复 支持 反对

使用道具 举报

2

主题

30

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1078
威望
613
贡献
255
兑换币
12
注册时间
2012-1-7
在线时间
105 小时
6#
 楼主| 发表于 2012-3-21 22:38:06 | 只看该作者
3楼 你设置了帧头么,还有那个图片大小需要调整,不接收满这个软件貌似不会显示。希望能帮到你
回复 支持 反对

使用道具 举报

2

主题

30

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1078
威望
613
贡献
255
兑换币
12
注册时间
2012-1-7
在线时间
105 小时
7#
 楼主| 发表于 2012-3-21 22:39:31 | 只看该作者
QianDE1991 发表于 2012-3-21 21:29
我用试用版的~~不知怎么就是出不来图像~~郁闷中~~

你设置了帧头么,还有那个图片大小需要调整,不接收满这个软件貌似不会显示。希望能帮到你
回复 支持 反对

使用道具 举报

11

主题

280

帖子

0

精华

杰出人士

真·打酱油

Rank: 12Rank: 12Rank: 12

积分
16877
威望
12599
贡献
3404
兑换币
422
注册时间
2012-2-4
在线时间
437 小时
8#
发表于 2012-3-22 08:48:30 | 只看该作者
开行中断或场中断之前清中断标志位 + 1
回复 支持 反对

使用道具 举报

2

主题

30

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1078
威望
613
贡献
255
兑换币
12
注册时间
2012-1-7
在线时间
105 小时
9#
 楼主| 发表于 2012-3-22 10:28:00 | 只看该作者
荔枝糖葫芦 发表于 2012-3-22 08:48
开行中断或场中断之前清中断标志位 + 1
  1. void EXTI0_IRQHandler(void)//VSYNC
  2. {
  3.         VSYNC_Flag=1;//帧标志flag置一
  4.         EXTI->PR=1<<0;//向寄存器写1 清中断标志
  5. }

  6. void EXTI1_IRQHandler(void)//HREF
  7. {        
  8.         if(VSYNC_Flag)
  9.         {
  10.                 if(HREF_Num<480)
  11.                 {
  12.                         if(HREF_Num%8==0)
  13.                         {
  14.                                 for(pclk_Num=0;pclk_Num<Xmax;pclk_Num++)
  15.                                 {
  16.                                         //rewdata=GPIOB->IDR;
  17.                                         //imagedata=(rewdata&0x0000FF00)>>8;
  18.                                         //data[HREF_Num/10][pclk_Num]=imagedata;
  19.                                         data[HREF_Num/8][pclk_Num]=(GPIOB->IDR&0x0000ff00)>>8;//采集图像
  20.                                 }
  21.                         }
  22.                         HREF_Num++;
  23.                 }
  24.                 else
  25.                 {
  26.                         EXTI->IMR&=~(1<<0);
  27.                         EXTI->EMR&=~(1<<0);
  28. //中断关闭
  29.                         EXTI->IMR&=~(1<<1);
  30.                         EXTI->EMR&=~(1<<1);
  31. //中断关闭
  32.                         VSYNC_Flag=0;//帧标志清零
  33.                         HREF_Num=0;//行计数清零
  34.                         imageok=0;//一帧图像采集完毕
  35.                 }
  36.         }
  37.         EXTI->PR=1<<1;
  38. //向寄存器写1 清中断标志
  39. }
复制代码
注释写好了,很抱歉是stm32的程序,但是您说的“清中断标志位”我已经清过了,您能指点下具体的么?谢谢!!
回复 支持 反对

使用道具 举报

59

主题

234

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2831

热心会员奖章推广达人奖章

威望
737
贡献
1890
兑换币
0
注册时间
2012-2-20
在线时间
102 小时
毕业学校
华中科技大学
10#
发表于 2012-3-22 14:03:20 | 只看该作者
我也遇到过这个问题,场中断优先级要高于行中断
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-9-30 14:30 , Processed in 0.101663 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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