打印
[STM32H7]

【STM32H7S78-DK测评】+触摸按键控制LED+RTC时钟显示

[复制链接]
178|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 cooldog123pp 于 2024-9-14 23:45 编辑

之前分享了一波LED流水灯的控制,今天将通过TouchGFX Designer来做一个按键控制LED,在搞个表盘显示RTC。
先打开TouchGFX Designer 添加一个Button空间然后再添加一个触发事件。说一下,TouchGFX Designer可以直接通过ST
开发板的型号来选择工程并生成配套代码,我们选择好要保存的文件夹:



都搞定以后,按F4生成代码即可,

打开生成代码的文件夹中STM32CubeIDE的工程文件,在appil里面添加相关代码。这里做个简单介绍
[size=13.3333px]Screen1View.cpp和Screnn1View.hpp中分别要声明LedToggle函数并实现它
class Screen1View : public Screen1ViewBase
{
public:
    Screen1View();
    virtual ~Screen1View() {}
    virtual void setupScreen();
    virtual void tearDownScreen();
                    void LedToggle();

protected:
};
void Screen1View::LedToggle()
{
   HAL_GPIO_TogglePin(PD2_GPIO_Port, PD2_Pin);
}
此外还要在Button的回调函数中调用[size=13.3333px]LedToggle
void Screen1ViewBase::buttonCallbackHandler(const touchgfx::AbstractButton& src)
{
    if (&src == &toggleButton1)
    {
        //Interaction1
        //When toggleButton1 clicked call virtual function
        //Call LedToggle
        LedToggle();
    }
}
实现效果:别忘记了还有一点是你要点亮那个LED也要把它的IO配置一下。


接下来实现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;

        }

}
实际效果如下:













使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1776

主题

6279

帖子

29

粉丝