STM32运行不正常[问题已解决]

2019-03-23 18:04发布

由于对STM32不是太精通,近来使用时,在测试时候遇到一个问题。

我使用的是STM2F103VET6,还有一个19264的液晶屏,一个矩阵的键盘。

先贴上两段代码
代码一:
//--------------------------系统设置菜单--------------------------------------
void LCD_MENU_1(void)
{
u8 key_temp;
LCD_CLEAR1();                     //清屏
USART_T(0X02);
//------1.系统参数-----------
LCD_SHOWSTRING(0,32,"---");
LCD_SHOWSTRING(0,56,"1.");
LCD_SHOW_ZI(0,72,ziti_xi);
LCD_SHOW_ZI(0,88,ziti_tong);
LCD_SHOW_ZI(0,104,ziti_can);
LCD_SHOW_ZI(0,120,ziti_shu);
LCD_SHOWSTRING(0,136,"---");

while(1)
{
key_temp=KEY_Scan();
   if(key_temp)
       {
     switch(key_temp)
        {
     case 0x01:LCD_MENU_NO1();break;
     case 0x0e:MENU_sudu_set();break;
     case 0x0d:MENU_dianji_set();break;
              
     }
    }

}

}



代码二:
//-------------------------主菜单------------------------------------------
void LCD_MENU_NO1(void)
{
u8 key_temp;
LCD_CLEAR1();
USART_T(0X01);

//------1.系统参数-----------
LCD_SHOWSTRING(0,0,"1.");
LCD_SHOW_ZI(0,16,ziti_xi);
LCD_SHOW_ZI(0,32,ziti_tong);
LCD_SHOW_ZI(0,48,ziti_can);
LCD_SHOW_ZI(0,64,ziti_shu);
//------2.端口检测-----------
LCD_SHOWSTRING(2,0,"2.");
LCD_SHOW_ZI(2,16,ziti_duan);
LCD_SHOW_ZI(2,32,ziti_kou);
LCD_SHOW_ZI(2,48,ziti_jian);
LCD_SHOW_ZI(2,64,ziti_ce);



while(1)
{
LCD_FLASH(6,176);       //光标闪烁定位
key_temp=KEY_Scan();
   if(key_temp)
       {
     switch(key_temp)
        {
     case 0x0e:LCD_MENU_1();break;
     case 0x0d:LCD_MENU_2();break;
        
     }
    }


}

}


上面两段代码中,有两个红 {MOD}的函数,我在测试的时候,就是用按键不停的从函数LCD_MENU_1();进入函数LCD_MENU_NO1();然后又由函数LCD_MENU_NO1();进入LCD_MENU_NO1();。

具体来说就是从两个界面中不停切换,但问题来了,在两个界面中切换了54次后,系统就崩毁了。而且从新上电后,继续测试,也是54次就崩毁了,尝试了很多次,切换的次数都是一样的,没有调试接口,所以用串口来测试了一下,每次都是在固定的地方就停止了。

问题报告完毕,大家有没有遇到类似的问题。或者提供参考意见。



[ 本帖最后由 fsyicheng 于 2013-8-28 18:08 编辑 ] 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
zhaojun_xf
1楼-- · 2019-03-24 17:19
死机的时候看看跳到哪里去了,是否是硬件错误那个地方。
fsyicheng
2楼-- · 2019-03-24 18:40
 精彩回答 2  元偷偷看……
fsyicheng
3楼-- · 2019-03-24 23:43
硬件问题应该不太可能,因为测试的时候是循环的,每次都是循环操作相同次数就挂机,这个巧合性估计硬件是很难做到的,而且刚才的软件仿真就证实了,仿真跑了54次切换后,在一个延时的子函数就停住了,仿真也跑不下去了。
fsyicheng
4楼-- · 2019-03-25 04:24
应该是堆栈的问题,改变了菜单的更新方式,使用屏幕显示和按键检测各自独立的方式,问题解决了。谢谢各位的意见。
天问地知
5楼-- · 2019-03-25 07:15
 精彩回答 2  元偷偷看……
qxyysh
6楼-- · 2019-03-25 09:21
程序嵌套层数太多,栈溢出了

一周热门 更多>