讨论一下STM32单步好使,全速不好使一般是什么原因造成的?
跑一个STM32的程序,点全速运行不好使。单步确好使。有人遇到过类似的情况么?
我还碰到过High Speed优化不好使,Medium Speed优化好使的
无非是自己仔细调代码了
具体是这样的
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); //
}
代码入上面所示
我编译下载之后点击运行,程序不动了,停止发现进FAULT了。
然后我在 LCD_FSMCConfig();
前面设个断点,运行到LCD_FSMCConfig();到这个地方就停了,然后我再点运行。居然好使了。
然后我再复位来一次,等到上面断点的时候我快速的点运行,他也不好使,一定要我在那个地方停一下它才不会进FAULT。
估计是你的FSMC时序没有配好
你试试把断点逐渐向后移,重复上述实验,看看到哪里会出现问题,然后再分析。
LCD的反应很慢的哦,很可能是时序过快了
而且,还要留出指令执行的时间
时序问题能导致进FAULT么?
时序不对能导致进FAULT么?顶多就是LCD不显示贝。要是进FAULT就有点说不过去了。而且
/* Configure the LCD Control pins --------------------------------------------*/
LCD_CtrlLinesConfig();
/* Configure the FSMC Parallel interface -------------------------------------*/
LCD_FSMCConfig();
这两个函数都市COPY官方的。LCD压根没接,只是跑一下看能不能顺利的跑起来。结果连这个愿望也破空了,郁闷
不接LCD表示对应的存储器空间不能访问
而HW FAULT的一个主要原因就是访问了不存在的存储器。
你的问题很难有人说得清,首先你自己都不能一次说清楚,别人就更难搞明白了。
问题是应用程序里我根本没访问LCD呀
我就是初始化一下看它能不能通过,除了那个初始化之外就再也没有操作LCD接口了
5楼的程序算访问LCD吗?
LCD_WriteCmd(0x00,0xCD); // LCD Control Register(LCR)
LCD_WriteCmd(0x01,0xf1); // Misc.Register(MIR)
LCD_WriteCmd(0x02,0x10); //
这个对他有影响么?
这个是能引起硬件中断么?好像根本到不了这里就已经FAULT了呀。那为什么停一下又好使了呢?
产生硬件中断时去看看堆栈
看看是哪条指令产生的硬件中断,再看看为什么。