OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...

查看: 5594|回复: 14

战舰STM32开发板,GUI和触摸屏成功移植。但是主函数delay_ms(1000)一闪而过;请教...

[复制链接]

  离线 

11

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2013-10-27
在线时间
4 小时
发表于 2014-2-14 23:06:43 | 显示全部楼层 |阅读模式
正点原子公众号
战舰STM32开发板,GUI和触摸屏成功移植。TIM3定时器中断扫描GUI_TOUCH_Exec();但是主函数delay_ms(1000)一闪而过;不知是不是定时器的影响,或是GUI_Delay();函数的影响,请原子大哥指点一下。下面有源程序附件
int main(void)
{
 delay_init();
 NVIC_Configuration();  
 uart_init(9600);   
  LED_Init();  
 KEY_Init();
 TP_Init();//触摸屏初始化
 TIM3_Int_Init(100,7199);//10Khz,10ms中断;
 GUI_Init();
 GUI_SetBkColor(GUI_BLACK);
 GUI_SetColor(GUI_WHITE);
 GUI_Clear();
 GUI_SetFont(&GUI_Font24_ASCII);
    GUI_DispStringAt("- - STM32F103ZET6 - -",4,10);
    GUI_DispStringAt("- - UCGUI3.90 - -",4,40);
    GUI_DispStringAt("- - SUCCESSFULLY - -",4,70);
    GUI_DispStringAt("- - 2014/02/14 - -",4,100); 
// delay_ms(1000);//使用此函数延时闪过
//    delay_ms(1000);
    global_t=200;//2S倒计时,自己用中断倒减的
    while(global_t);
    GUI_Clear();
    GUI_SetFont(&GUI_Font32_ASCII);
    GUI_DispStringHCenterAt("Start Test", 160, 100);
//    delay_ms(1000);//使用此函数延时闪过

    global_t=100;//1S
    while(global_t);
    GUI_Clear();
 while(1)
 {
        LED0=!LED0;
        GUIDEMO_main();
 }
}



UCGUI3.9移植.zip

1.88 MB, 下载次数: 924

既然来了,就留下您的痕迹呗......
回复

使用道具 举报

  离线 

11

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2013-10-27
在线时间
4 小时
 楼主| 发表于 2014-2-15 09:40:56 | 显示全部楼层
今天修改了一下,发现TIM3_Int_Init(100,7199);之前的delay_ms()函数可以用,之后的延时就不准了,是不是GUI_Delay()函数里的delay_ms(5)的影响啊;请大神指教
既然来了,就留下您的痕迹呗......
回复 支持 反对

使用道具 举报

  离线 

504

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
131528
金钱
131528
注册时间
2010-12-1
在线时间
1206 小时
发表于 2014-2-15 11:14:23 | 显示全部楼层
回复【2楼】glyxz1990:
---------------------------------
我们的delay用的是systick
你的ucGUI是不是也是用的systick?
有没有做兼容性处理?
如果没做兼容性处理,delay就不能用了

兼容性处理见我们战舰板的system文件夹,delay.c.
用的时钟摘取法.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

  离线 

0

主题

4

帖子

0

精华

新手入门

积分
24
金钱
24
注册时间
2014-2-18
在线时间
0 小时
发表于 2014-2-18 01:08:11 | 显示全部楼层
请教楼主,delay(1000)这个问题解决了吗?分享一下,谢谢!
回复 支持 反对

使用道具 举报

  离线 

11

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2013-10-27
在线时间
4 小时
 楼主| 发表于 2014-2-18 08:30:39 | 显示全部楼层
正点原子公众号
回复【4楼】hobosyno:
---------------------------------
我用定时器延时了,现在准备把os加进去试试
既然来了,就留下您的痕迹呗......
回复 支持 反对

使用道具 举报

  离线 

0

主题

4

帖子

0

精华

新手入门

积分
24
金钱
24
注册时间
2014-2-18
在线时间
0 小时
发表于 2014-2-18 15:50:57 | 显示全部楼层
用定时器延时可以做delay使用,但是不明白为什么会出现战舰的delay函数失效??调试发现,只要GUI_TOUCH_Exec()这个函数放在Timer3的中断里就出问题,在程序中加入Timer4中断,GUI_TOUCH_Exec()这个函数放在Timer4中断里,问题一样出现,着实不理解为什么会这样?有新进展一起交流一下哦~~~
回复 支持 反对

使用道具 举报

  离线 

11

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2013-10-27
在线时间
4 小时
 楼主| 发表于 2014-2-19 21:52:21 | 显示全部楼层
回复【6楼】hobosyno:
---------------------------------
我那个不就是放中断里的嘛 没有问题啊
既然来了,就留下您的痕迹呗......
回复 支持 反对

使用道具 举报

  离线 

0

主题

4

帖子

0

精华

新手入门

积分
24
金钱
24
注册时间
2014-2-18
在线时间
0 小时
发表于 2014-2-19 22:35:14 | 显示全部楼层
就是这个这个函数放在中断里导致战舰的delay函数不准了,从中断中移除这个函数delay函数就好用了。
回复 支持 反对

使用道具 举报

  离线 

11

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2013-10-27
在线时间
4 小时
 楼主| 发表于 2014-2-19 22:41:18 | 显示全部楼层
回复【8楼】hobosyno:
---------------------------------
嗯 我之前也是这样的 加进去就不准
既然来了,就留下您的痕迹呗......
回复 支持 反对

使用道具 举报

  离线 

27

主题

101

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1007
金钱
1007
注册时间
2015-7-26
在线时间
108 小时
发表于 2016-2-23 21:47:53 | 显示全部楼层
解决了吗?我的也是,调试发现,中断一加那个函数delay_ms(1000)就只有0.07ms,为什么?
回复 支持 反对

使用道具 举报

  离线 

25

主题

95

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
293
金钱
293
注册时间
2016-6-2
在线时间
48 小时
发表于 2016-9-26 07:12:44 | 显示全部楼层
正点原子 发表于 2014-2-15 11:14
回复【2楼】glyxz1990:
---------------------------------
我们的delay用的是systick
你的ucGUI是不是也是 ...


在emWin中使用delay_ms,好像也是延时非常短,是不是system的文件需要修改。我使用的在压缩文件里边。
原子兄 能否帮忙看看。
我没有带操作系统。
下面检测SD,检测3次以后就出错。把GUI_Delay改为delay_ms,没有啥改变。
但在不带emWin的系统中一直好用。


void test_SD(void)
{
     u32 total,free;
    u8 t=0;         
    delay_init();   
  LCD_Clear(WHITE);
     POINT_COLOR=RED;//设置字体为红色      
    LCD_ShowString(60,50,200,16,16,"Mini STM32");   
    LCD_ShowString(60,70,200,16,16,"FATFS TEST");   
    LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
    LCD_ShowString(60,110,200,16,16,"Use USMART for test");      
    LCD_ShowString(60,130,200,16,16,"2014/3/14");      

    while(SD_Initialize())                    //检测SD卡
    {
        LCD_ShowString(60,150,200,16,16,"SD Card Error!");
        //GUI_Delay(200);
        delay_ms(200);
        LCD_Fill(60,150,240,150+16,WHITE);//清除显示              
        //GUI_Delay(200);
        delay_ms(500);
        LED_R=!LED_R;//DS0闪烁
    }                                       
     exfuns_init();                            //为fatfs相关变量申请内存                 
  f_mount(fs[0],"0:",1);                     //挂载SD卡
     //f_mount(fs[1],"1:",1);                     //挂载FLASH.      
    while(exf_getfree("0",&total,&free))    //得到SD卡的总容量和剩余容量
    {
        LCD_ShowString(60,150,200,16,16,"Fatfs Error!");
        //GUI_Delay(200);
        delay_ms(200);
        LCD_Fill(60,150,240,150+16,WHITE);//清除显示              
        //GUI_Delay(500);
        delay_ms(500);
        LED_R=!LED_R;//DS0闪烁
    }                                                     
     POINT_COLOR=BLUE;//设置字体为蓝色      
    LCD_ShowString(60,150,200,16,16,"FATFS OK!");     
    LCD_ShowString(60,170,200,16,16,"SD Total Size:     MB");     
    LCD_ShowString(60,190,200,16,16,"SD  Free Size:     MB");         
     LCD_ShowNum(172,170,total>>10,5,16);                    //显示SD卡总容量 MB
     LCD_ShowNum(172,190,free>>10,5,16);                        //显示SD卡剩余容量 MB               
//    while(1)
//    {
//        t++;
//        delay_ms(200);                        
//        LED_R=!LED_R;//DS0闪烁
//    }
    for(t=0;t<10;t++)
      //GUI_Delay(500);
      delay_ms(200);
}

delay.rar

4.38 KB, 下载次数: 398

回复 支持 反对

使用道具 举报

  离线 

8

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2016-9-23
在线时间
37 小时
发表于 2016-9-30 12:46:04 | 显示全部楼层
我也碰到同样的问题了,楼主是怎样解决的啊?谢
回复 支持 反对

使用道具 举报

  离线 

32

主题

180

帖子

0

精华

高级会员

Rank: 4

积分
510
金钱
510
注册时间
2016-3-8
在线时间
118 小时
发表于 2018-2-2 19:38:45 | 显示全部楼层
同样问题啊,不带系统,移植了EMWIN,发现只要GUI_TOUCH_Exec()这个函数放在中断里就出问题。
回复 支持 反对

使用道具 举报

  离线 

32

主题

180

帖子

0

精华

高级会员

Rank: 4

积分
510
金钱
510
注册时间
2016-3-8
在线时间
118 小时
发表于 2018-2-2 19:38:58 | 显示全部楼层
怎么解决啊
回复 支持 反对

使用道具 举报

  离线 

29

主题

261

帖子

0

精华

高级会员

Rank: 4

积分
840
金钱
841
注册时间
2012-3-30
在线时间
258 小时
发表于 2018-2-13 12:58:22 | 显示全部楼层
GUI_Delay(10);时间太长了,都几分钟还没结束。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则




关闭

必看:"原子哥”力荐上一条 /1 下一条

QQ|联系我们|手机版|官方淘宝店|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-8-17 10:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表
/* */