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条回答
exiao
1楼-- · 2019-03-24 00:09
/ 看得出楼主很有耐心,54次都能测出来
没遇到过,这两段程序是怎么切换的?
Li_Lei
2楼-- · 2019-03-24 03:10
 精彩回答 2  元偷偷看……
fsyicheng
3楼-- · 2019-03-24 07:19
每个界面就是一个死循环,然后在检测按键状态,检测到对应的键值就跳入对应的界面,然后又是另外一个死循环,又检测对应的按键,检测到对应的键值就跳入对应的界面,我的测试的时候就是在两个菜单中不停切换,就是不停的按1,2,1,2。这样程序就挂了。郁闷中
zhaojun_xf
4楼-- · 2019-03-24 08:23
程序比较乱,尽量让显示和按键相互独立起来,通过全局变量传递按键值,程序中尽量不要使用死循环,除非是main函数中。
fsyicheng
5楼-- · 2019-03-24 14:21
 精彩回答 2  元偷偷看……
Study_Stellaris
6楼-- · 2019-03-24 16:51
应该是 C 语言写的有问题.两个函数在切换的时候,可能是一直都是相互嵌套,导致最后 Stack 不足.
这个问题一般很少出现.不过很有意思.
需要两个死循环的问题最好用 RTOS 来解决,或者用一些 C 语言的有关线程的东西来解决.
或者在一个死循环里不断地检测一个函数指针的值,最后决定跳转到哪里.

[ 本帖最后由 Study_Stellaris 于 2013-8-28 12:06 编辑 ]

一周热门 更多>