5.AT32F403A例程之-FreeRTOS+emWin创建窗体定时器

AT32F403A例程之-FreeRTOS+Emwin创建窗体定时器


前言

AT32F403A例程之-FreeRTOS+emWin创建窗体定时器,在一些界面上需要定时更新显示内容,这时 Emwin的窗体定时器就非常有用,本文会详细介绍emWin的窗体定时器的使用


一、 emWin的窗体定时器

emWin的窗体定时器是指emWin软件定时器,主要用于回调函数定时更新界面内容
在这里插入图片描述

二、emWin的窗体定时器的创建和使用

1.emWin的窗体定时器的创建要在窗体创建后进行。

代码如下(示例):

/*********************************************************************
*
*       Public code
*
**********************************************************************
*/
/*********************************************************************
*
*       CreateWindow
*/
WM_HWIN MainCreateWindow(void) {
  
    WM_HWIN hWin;
    
    hWin = GUI_CreateDialogBox(_aDialogCreate,  GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
    //设置50时定时50MS
    WM_CreateTimer(WM_GetClientWindow(hWin), 0, 50, 0);
    
    return hWin;
}

2.emWin的窗体定时器的要在回调函数中进行复位,也就是说定时时间到后一定要复位

代码如下(示例):

  case WM_TIMER:    
 	WM_RestartTimer(pMsg->Data.v, 50);   
  	break;

该处使用的url网络请求的数据。


2.emWin的窗体定时器注意的问题和删除的问题

emWin的窗体定时器要注意的问题就是不要在没有新建emWin的窗体定时的时候去删除定时器,这样会导致死机,说白了就是最好不要用删除的函数。

  case WM_DELETE:
       //不可以在这个回调中删除定时器,会造成死机
        WM_DeleteTimer(hTimers);
        
	  break;

那怎么删除定时器呢?其实在删除界面的时候会自动删除定时器的,所以只要用下面代码就可以了

    WM_DeleteWindow(hWin);

2.完整代码如下

代码如下(示例):

/*********************************************************************
*                                                                    *
*                SEGGER Microcontroller GmbH & Co. KG                *
*        Solutions for real time microcontroller applications        *
*                                                                    *
**********************************************************************
*                                                                    *
* C-file generated by:                                               *
*                                                                    *
*        GUI_Builder for emWin version 5.32                          *
*        Compiled Oct  8 2015, 11:59:02                              *
*        (c) 2015 Segger Microcontroller GmbH & Co. KG               *
*                                                                    *
**********************************************************************
*                                                                    *
*        Internet: www.segger.com  Support: support@segger.com       *
*                                                                    *
**********************************************************************
*/

// USER START (Optionally insert additional includes)
// USER END

#include "DIALOG.h"

/*********************************************************************
*
*       Defines
*
**********************************************************************
*/
#define ID_WINDOW_0 (GUI_ID_USER + 0x00)
#define ID_TEXT_0 (GUI_ID_USER + 0x01)


// USER START (Optionally insert additional defines)
// USER END

/*********************************************************************
*
*       Static data
*
**********************************************************************
*/

// USER START (Optionally insert additional static data)
// USER END

/*********************************************************************
*
*       _aDialogCreate
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  { WINDOW_CreateIndirect, "Window", ID_WINDOW_0, 0, 0, 320, 240, 0, 0x0, 0 },
  { TEXT_CreateIndirect, "Text", ID_TEXT_0, 100, 81, 80, 20, 0, 0x64, 0 },
  // USER START (Optionally insert additional widgets)
  // USER END
};

/*********************************************************************
*
*       Static code
*
**********************************************************************
*/

// USER START (Optionally insert additional static code)
// USER END

/*********************************************************************
*
*       _cbDialog
*/
static void _cbDialog(WM_MESSAGE * pMsg) {
  WM_HWIN hItem;
  // USER START (Optionally insert additional variables)
  // USER END

  switch (pMsg->MsgId) {
  case WM_INIT_DIALOG:
    //
    // Initialization of 'Text'
    //
    hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);
    TEXT_SetFont(hItem, GUI_FONT_20_ASCII);
    TEXT_SetText(hItem, "00:00");
    TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
    TEXT_SetTextColor(hItem, GUI_MAKE_COLOR(0x00000000));
    // USER START (Optionally insert additional code for further widget initialization)
    // USER END
    break;
  // USER START (Optionally insert additional message handling)
  // USER END
  
  case WM_TIMER: //在这里更新界面内容 
  
      hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);
    	TEXT_SetFont(hItem, GUI_FONT_20_ASCII);
    	TEXT_SetText(hItem, "00:00");
    	TEXT_SetTextColor(hItem, GUI_MAKE_COLOR(0x00000000));   
 		WM_RestartTimer(pMsg->Data.v, 50);   
  	break;
  	
  default:
    WM_DefaultProc(pMsg);
    break;
  }
}

/*********************************************************************
*
*       Public code
*
**********************************************************************
*/
/*********************************************************************
*
*       CreateWindow
*/
WM_HWIN MainCreateWindow(void) {
  
    WM_HWIN hWin;
    
    hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
    //设置50时定时50MS
    WM_CreateTimer(WM_GetClientWindow(hWin), 0, 50, 0);
    
    return hWin;
}

// USER START (Optionally insert additional public code)
// USER END

/*************************** End of file ****************************/

总结

5.AT32F403A例程之-FreeRTOS+emWin创建窗体定时器,需要注意不要去删除定时器,否则会死机。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
STM32F4X7是一款高性能的微控制器,支持uC/OS、FreeRTOS、LWIP、SSL和MQTT等多种工具。它通过使用MDK5开发工具,能够提供稳定可靠的开发环境。 W5500是一款硬件模块,是一种以太网控制器,用于实现物联网设备的网络连接。它能够与STM32F4X7微控制器结合使用,实现MQTT协议的通信。在这个例程中,W5500与STM32F4X7通过SPI接口进行通信,使用MQTT协议实现设备之间的数据传输。 在这个例程和说明中,首先需要配置W5500模块的网络参数,包括IP地址、子网掩码、网关和DNS服务器等。然后,通过MQTT协议连接到MQTT服务器。在连接成功后,可以通过MQTT协议发布和订阅主题,进行设备之间的数据交换。 MQTT是一种轻量级的消息队列传输协议,它具有低带宽和低功耗的特点,适用于物联网设备的通信。通过使用MQTT协议,设备可以以发布订阅的方式进行消息传递,实现设备之间的数据交互。 这个例程和说明提供了详细的配置和使用指南,帮助开发者快速上手使用W5500和MQTT协议。同时,MDK5开发工具提供了丰富的调试和分析功能,帮助开发者进行代码的验证和调试,保证系统稳定可靠。 总而言之,STM32F4X7与uC/OS、FreeRTOS、LWIP、SSL和MQTT等工具的结合使用,以及W5500和MQTT协议的应用,能够提供稳定可靠的物联网解决方案。通过使用MDK5开发工具,开发者可以快速开发和验证自己的物联网应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

suqingxiao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值