OpenEdv-开源电子网

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

STM32F407+OV5640+3.5寸TFTLCD遇到的奇怪问题

[复制链接]

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2019-4-27
在线时间
19 小时
发表于 2019-7-12 18:19:49 | 显示全部楼层 |阅读模式
6金钱
按照原子哥探索版的电路图做了一个电路板,用LCD屏显示摄像头内容,用的原子哥的源程序,就修改成横屏、修改成30帧和直接使用摄像头功能。程序在探索者开发板能正常运行,在我画的电路板上执行LCD初始化的时候就一直进入HardFault_Handler,LCD黑屏,偶尔能正常运行,一步一步调试的话也能正常运行(直接烧原程序也会出现这种情况)。经过测试,发现在这个函数出了问题,u16 LCD_RD_DATA(void),执行这个函数后就进入HardFault_Handler。然后我在u16 LCD_RD_DATA(void)中ram=LCD->LCD_RAM后面的加了个delay_us(5),file:///C:\Users\80996\AppData\Roaming\Tencent\Users\809965167\QQ\WinTemp\RichOle\2I_~@9}7}QE5E_{Z`IAB%71.pngLCD屏便能在我画的电路板上运行,若不加便会经常开机后进入HardFault_Handler,无法运行。LCD调好后,又出现新的问题,在执行OV5640的程序u8 SCCB_WR_Byte(u8 dat)中的SCCB_SDA_IN();完后,[img]file:///C:\Users\80996\AppData\Roaming\Tencent\Users\809965167\QQ\WinTemp\RichOle\Q)T~@E~1KJ8MQ%EY_[%K70V.png[/img]又经常会进入HardFault_Handler,大神们帮帮忙[img]file:///C:\Users\80996\AppData\Roaming\Tencent\Users\809965167\QQ\WinTemp\RichOle\1(V74ZC[JQ@1]1SI9AA3VX4.png[/img]file:///C:\Users\80996\AppData\Roaming\Tencent\Users\809965167\QQ\WinTemp\RichOle\I0}CN)(2~AN~2W$R(1AL_K2.png
[img]file:///C:\Users\80996\AppData\Roaming\Tencent\Users\809965167\QQ\WinTemp\RichOle\Q{V$O$JI(U[P6Q76TC366G5.png[/img]




OV5640摄像头实验.zip

6.6 MB, 下载次数: 59

最佳答案

查看完整内容[请看2#楼]

问题暂时得到解决,跟定时器有关,发现加上定时器中断的ov_frame被我屏蔽了没有清零,可能是发生了溢出,但我再中断里加上后ov_frame=0后还是会进入中断,然后我将定时器这段给屏蔽了,摄像头便能正常运行,不会进入硬中断了。之前特意从在原子哥的定时器中断程序上修改的,当时调是没有进入中断的,然后加入LCD程序调,也能正常运行,加入OV5640程序后出现进入硬中断现象,但摄像头能运行。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2019-4-27
在线时间
19 小时
 楼主| 发表于 2019-7-12 18:19:50 | 显示全部楼层
问题暂时得到解决,跟定时器有关,发现加上定时器中断的ov_frame被我屏蔽了没有清零,可能是发生了溢出,但我再中断里加上后ov_frame=0后还是会进入中断,然后我将定时器这段给屏蔽了,摄像头便能正常运行,不会进入硬中断了。之前特意从在原子哥的定时器中断程序上修改的,当时调是没有进入中断的,然后加入LCD程序调,也能正常运行,加入OV5640程序后出现进入硬中断现象,但摄像头能运行。
回复

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2019-4-27
在线时间
19 小时
 楼主| 发表于 2019-7-12 18:22:57 | 显示全部楼层
按照原子哥探索版的电路图做了一个电路板,用LCD屏显示摄像头内容,用的原子哥的源程序,就修改成横屏、修改成30帧和直接使用摄像头功能。程序在探索者开发板能正常运行,在我画的电路板上执行LCD初始化的时候就一直进入HardFault_Handler,LCD黑屏,偶尔能正常运行,一步一步调试的话也能正常运行(直接烧原程序也会出现这种情况)。经过测试,发现在这个函数出了问题,u16 LCD_RD_DATA(void),执行这个函数后就进入HardFault_Handler。然后我在u16 LCD_RD_DATA(void)中ram=LCD->LCD_RAM后面的加了个delay_us(5),LCD屏便能在我画的电路板上运行,若不加便会经常开机后进入HardFault_Handler,无法运行。LCD调好后,又出现新的问题,在执行OV5640的程序u8 SCCB_WR_Byte(u8 dat)中的SCCB_[/img]SDA_IN();完后,又经常会进入HardFault_Handler,大神们帮帮忙
回复

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2019-4-27
在线时间
19 小时
 楼主| 发表于 2019-7-12 18:25:34 | 显示全部楼层
  1. u16 LCD_RD_DATA(void)
  2. {
  3.         vu16 ram;                        //防止被优化
  4.         ram=LCD->LCD_RAM;       
  5.         delay_us(5);                                  
  6.         return ram;         
  7. }       
复制代码
回复

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2019-4-27
在线时间
19 小时
 楼主| 发表于 2019-7-12 18:26:55 | 显示全部楼层

u8 SCCB_WR_Byte(u8 dat)
{
        u8 j,res;         
        for(j=0;j<8;j++) //循环8次发送数据
        {
                if(dat&0x80)SCCB_SDA=1;       
                else SCCB_SDA=0;
                dat<<=1;
                delay_us(2);
                SCCB_SCL=1;       
                delay_us(2);
                SCCB_SCL=0;                  
        }                         
        SCCB_SDA_IN();                //设置SDA为输入
//从这执行OV5640后面的语句便会进入HardFault_Handler
        delay_us(2);
        SCCB_SCL=1;                        //接收第九位,以判断是否发送成功
        delay_us(2);
        if(SCCB_READ_SDA)res=1;  //SDA=1发送失败,返回1
        else res=0;         //SDA=0发送成功,返回0
        SCCB_SCL=0;                 
        SCCB_SDA_OUT();                //设置SDA为输出   
        return res;  
}
回复

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2019-4-27
在线时间
19 小时
 楼主| 发表于 2019-7-12 18:31:04 | 显示全部楼层
电路图
O}[U6%P1H]M{6V4_]9]}_22.png
回复

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2019-4-27
在线时间
19 小时
 楼主| 发表于 2019-7-12 18:34:04 | 显示全部楼层
电路图

QQ截图20190712183333.png
回复

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2019-4-27
在线时间
19 小时
 楼主| 发表于 2019-7-12 18:35:33 | 显示全部楼层
LCD+OV5640
3.png
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165508
金钱
165508
注册时间
2010-12-1
在线时间
2115 小时
发表于 2019-7-13 02:38:58 | 显示全部楼层
帮顶
回复

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2019-4-27
在线时间
19 小时
 楼主| 发表于 2019-7-14 16:27:13 | 显示全部楼层
有没大佬帮忙解惑
回复

使用道具 举报

4

主题

48

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
205
金钱
205
注册时间
2019-6-15
在线时间
36 小时
发表于 2019-7-16 09:12:54 | 显示全部楼层
产生硬错误可能的原因栈溢出,所以你把MCU的栈空间加大一些试试,因为有时候LCD或OV5640使用时可能开辟了很大的数组,导致指针访问数据时出现栈溢出。
我在调试FREERTOS的时候碰到过,一直进入硬错误,后来检查发现是栈空间设置太小的原因,楼主可以试试
回复

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2019-4-27
在线时间
19 小时
 楼主| 发表于 2019-7-16 09:43:03 | 显示全部楼层
mvvm 发表于 2019-7-16 09:12
产生硬错误可能的原因栈溢出,所以你把MCU的栈空间加大一些试试,因为有时候LCD或OV5640使用时可能开辟了很 ...

我使用的是原子哥的原程序,电路图也是。开发板能正常运行,自己做的电路板经常进入HardFault_Handler,偶尔出现一次能正常传输摄像头数据。Stack_Size      EQU     0x00000400,Heap_Size       EQU     0x00000200,这样设置的。液晶屏进入HardFault_Handler的问题我在u16 LCD_RD_DATA(void)这个函数里加了个延时就解决了,现在延时        delay_us(1);        也能用。摄像头的话我不知道什么原因,然后我重新将定时器例程和LCD例程结合起来,再把OV5640模块的程序加进去,现在摄像头能横屏显示30帧的画面,但运行一会儿后还是会进入HardFault_Handler,LCD显示不受影响
回复

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2019-4-27
在线时间
19 小时
 楼主| 发表于 2019-7-16 09:43:56 | 显示全部楼层

原子哥,这大概是什么原因引起的呢
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-15 10:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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