| 本帖最后由 cooldog123pp 于 2024-10-1 15:42 编辑 
 之前分享了一波LED流水灯的控制,今天将通过TouchGFX Designer来做一个按键控制LED,在搞个表盘显示RTC。
 先打开TouchGFX Designer 添加一个Button空间然后再添加一个触发事件。说一下,TouchGFX Designer可以直接通过ST
 开发板的型号来选择工程并生成配套代码,我们选择好要保存的文件夹:
 
   
   
     都搞定以后,按F4生成代码即可,
 
 打开生成代码的文件夹中STM32CubeIDE的工程文件,在appil里面添加相关代码。这里做个简单介绍
 在Screen1View.cpp和Screnn1View.hpp中分别要声明LedToggle函数并实现它
 
 class Screen1View : public Screen1ViewBase
{
public:
    Screen1View();
    virtual ~Screen1View() {}
    virtual void setupScreen();
    virtual void tearDownScreen();
                    void LedToggle();
protected:
};
此外还要在Button的回调函数中调用LedTogglevoid Screen1View::LedToggle()
{
   HAL_GPIO_TogglePin(PD2_GPIO_Port, PD2_Pin);
}
 实现效果:别忘记了还有一点是你要点亮那个LED也要把它的IO配置一下。void Screen1ViewBase::buttonCallbackHandler(const touchgfx::AbstractButton& src)
{
    if (&src == &toggleButton1)
    {
        //Interaction1
        //When toggleButton1 clicked call virtual function
        //Call LedToggle
        LedToggle();
    }
}
   
 接下来实现RTC相关,首先在刚刚GUI的基础上增加一个表盘和一个数字时钟,并重新生成代码,
 
   然后我们需要配置一下RTC本身如下,
 
   
   
 代码没有什么特别的可以参考sujingliang这位坛友的帖子,写的很详细了,
 唯一需要注意的就是,要添加HAL_RTC_GetDate(&hrtc, &sDate, RTC_FORMAT_BIN);如下,其他的注意初始化和声明即可
 
 实际效果如下:void Model::tick()
{
        static uint8_t tick=0;
        tick++;
        if(tick%60==0)
        {
                HAL_RTC_GetTime(&hrtc, &sTime, RTC_FORMAT_BIN);
                HAL_RTC_GetDate(&hrtc, &sDate, RTC_FORMAT_BIN);
                modelListener->updateTime(sTime.Hours,sTime.Minutes,sTime.Seconds);
                printf( "%2d:%2d:%2d\r\n", sTime.Hours, sTime.Minutes, sTime.Seconds);
                tick=0;
        }
}
 
   
 
 
 
 
 
 
 
 
 
 
 
 |