打印
[应用相关]

讨论一下STM32单步好使,全速不好使一般是什么原因造成的?

[复制链接]
5798|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tsx1983|  楼主 | 2008-11-17 15:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
跑一个STM32的程序,点全速运行不好使。单步确好使。有人遇到过类似的情况么?
沙发
simon21ic| | 2008-11-17 15:32 | 只看该作者

延时问题?

使用特权

评论回复
板凳
香水城| | 2008-11-17 15:35 | 只看该作者

说具体点

这种问题可以有上百种答案。

使用特权

评论回复
地板
vigia| | 2008-11-17 16:07 | 只看该作者

我还碰到过High Speed优化不好使,Medium Speed优化好使的

无非是自己仔细调代码了

使用特权

评论回复
5
tsx1983|  楼主 | 2008-11-17 16:55 | 只看该作者

具体是这样的

void LCD_Initialize(void)
{

/* Configure the LCD Control pins --------------------------------------------*/
  LCD_CtrlLinesConfig();

/* Configure the FSMC Parallel interface -------------------------------------*/
  LCD_FSMCConfig();

LCD_WriteCmd(0x00,0xCD); // LCD Control Register(LCR)
LCD_WriteCmd(0x01,0xf1); // Misc.Register(MIR)
LCD_WriteCmd(0x02,0x10); // 
}

使用特权

评论回复
6
tsx1983|  楼主 | 2008-11-17 16:59 | 只看该作者

代码入上面所示

我编译下载之后点击运行,程序不动了,停止发现进FAULT了。
然后我在 LCD_FSMCConfig();
前面设个断点,运行到LCD_FSMCConfig();到这个地方就停了,然后我再点运行。居然好使了。
然后我再复位来一次,等到上面断点的时候我快速的点运行,他也不好使,一定要我在那个地方停一下它才不会进FAULT。

使用特权

评论回复
7
ijk| | 2008-11-17 17:18 | 只看该作者

时序问题

  时序问题,跟2楼说的道理差不多

使用特权

评论回复
8
香水城| | 2008-11-17 17:20 | 只看该作者

估计是你的FSMC时序没有配好

你试试把断点逐渐向后移,重复上述实验,看看到哪里会出现问题,然后再分析。

使用特权

评论回复
9
xwj| | 2008-11-17 17:40 | 只看该作者

LCD的反应很慢的哦,很可能是时序过快了

而且,还要留出指令执行的时间

使用特权

评论回复
10
tsx1983|  楼主 | 2008-11-17 18:25 | 只看该作者

时序问题能导致进FAULT么?

时序不对能导致进FAULT么?顶多就是LCD不显示贝。要是进FAULT就有点说不过去了。而且
/* Configure the LCD Control pins --------------------------------------------*/
  LCD_CtrlLinesConfig();

/* Configure the FSMC Parallel interface -------------------------------------*/
  LCD_FSMCConfig();
这两个函数都市COPY官方的。LCD压根没接,只是跑一下看能不能顺利的跑起来。结果连这个愿望也破空了,郁闷

使用特权

评论回复
11
香水城| | 2008-11-17 18:35 | 只看该作者

不接LCD表示对应的存储器空间不能访问

而HW FAULT的一个主要原因就是访问了不存在的存储器。

你的问题很难有人说得清,首先你自己都不能一次说清楚,别人就更难搞明白了。

使用特权

评论回复
12
tsx1983|  楼主 | 2008-11-18 09:36 | 只看该作者

问题是应用程序里我根本没访问LCD呀

我就是初始化一下看它能不能通过,除了那个初始化之外就再也没有操作LCD接口了

使用特权

评论回复
13
香水城| | 2008-11-18 14:27 | 只看该作者

5楼的程序算访问LCD吗?

LCD_WriteCmd(0x00,0xCD); // LCD Control Register(LCR)
LCD_WriteCmd(0x01,0xf1); // Misc.Register(MIR)
LCD_WriteCmd(0x02,0x10); // 

使用特权

评论回复
14
tsx1983|  楼主 | 2008-11-18 17:05 | 只看该作者

这个对他有影响么?

这个是能引起硬件中断么?好像根本到不了这里就已经FAULT了呀。那为什么停一下又好使了呢?

使用特权

评论回复
15
vigia| | 2008-11-18 17:37 | 只看该作者

产生硬件中断时去看看堆栈

看看是哪条指令产生的硬件中断,再看看为什么。

使用特权

评论回复
16
zxm19820916| | 2014-3-11 15:06 | 只看该作者
我碰到过查看堆栈里啥也没有,不知道是哪里进入的Hard Fault中断。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

25

主题

160

帖子

0

粉丝