由于对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 编辑 ]
此帖出自
小平头技术问答
这个问题一般很少出现.不过很有意思.
需要两个死循环的问题最好用 RTOS 来解决,或者用一些 C 语言的有关线程的东西来解决.
或者在一个死循环里不断地检测一个函数指针的值,最后决定跳转到哪里.
[ 本帖最后由 Study_Stellaris 于 2013-8-28 12:06 编辑 ]
一周热门 更多>