1057|4

143

帖子

4

TA的资源

一粒金砂(高级)

楼主
 

【DigiKey“智造万物,快乐不停”创意大赛】基于STM32H7B3和LVGL的在线天气时钟站设计 [复制链接]

  本帖最后由 Tristan_C 于 2024-1-3 23:55 编辑
基于STM32H7B3和LVGL的在线天气时钟站设计

一、作品简介

本次参与DigiKey创意大赛的是基于STM32H7B3和LVGL的在线天气时钟站设计,使用的是ST的STM32H7B3I-DK开发板,本身基于性能强劲的STM32H7主芯片设计,除了其强大的处理内核性能外,还利用了其丰富高性能的外设资源,进行外围模块的驱动,如LCD、WiFi模块灯,其中通过WiFi进行网络链接,可以在线获取本地天气信息,如气温温度,湿度气压等,还可以通过NTP服务器,联网在线获取当前本地时间,并更新设备的本地时钟,另外,因为有LCD,因此结合STM32H7的高性能,可以利用LVGL的开源GUI库来进行用户界面的开发,从而将当前天气和时钟的信息展示在其上面。实现丰富的界面交互。

二、作品照片
作品界面使用LVGL官方的ui设计软件SquareLine Studio进行了设计,主要涉及了当前天气信息的显示,当前时间的走时显示,以及设计了两个按钮,分别继续手动时间同步和天气数据获取。另外,也将存储资源使用率以及lvgl的帧率进行了显示。

 

三、系统框图
系统主要的框图如下,其中STM32H7B3I作为系统的主控MCU,通过SPI等接口与WiFi模块进行通信控制,实现时间和天气服务器的数据交互拉取。通过硬件的LCD接口控制LCD的显示输出,再通过UART将一些信息进行打印。

四、硬件设计实现说明

4.1 主芯片

主芯片STM32H7B3LIH6QU基于ARM®架构的微控制器,提供2M字节的FLASH存储器和1.4MB RAM,BGA225封装,性能非常强悍,STM32H7B3xI工作频率高达280 MHz。Cortex®-M7核心具有浮点单元(FPU),支持Arm®双精度(IEEE 754兼容)和单精度数据处理指令和数据类型。STM32H7B3xI支持完整的DSP指令和内存保护单元(MPU),以提高应用的安全性。
STM32H7B3xI器件采用广泛的增强型I/ o和外设,连接到四个APB总线,三个AHB总线,32位多AHB总线矩阵和支持内部和外部存储器访问的多层AXI互连。
所有器件都提供两个adc、两个DAC(一个双DAC和一个单DAC)、两个超低功耗比较器、一个低功耗RTC、12个通用16位定时器、两个用于电机控制的PWM定时器、三个低功耗定时器、一个真随机数生成器(RNG)、一个加密加速单元和一个HASH处理器。该器件支持用于外部sigma δ调制器(DFSDM)的9个数字滤波器。它们还具有标准和高级通信接口。
芯片的主要框图如下,丰富的外设特别是还具备LCD等驱动接口,非常方便进行人机ui交互开发。

4.2电源部分

电源部分主要设计系统供电的来源,主要有ST-LINK,USB等,主要电源转换为3.3V
最重要的MCU部分电源,其中还包括了LDO方式和SMPS方式的选择。

4.3 WiFi & BLE模块

开发板本身板载的是一片ISM43340_M4G_L44模块,这是一颗Cypress的CYW43340芯片的2.4 & 5 GHz双频Wi-Fi 802.11 a/b/g/n, Bluetooth Low Energy (BLE) 和 Bluetooth 4.0的模块,内部还使用了一颗ST的STM32F405 作为主控芯片,采用SPI或者UART接口,本处就使用SPI接口使用。通过该模块可以连接WiFi AP热点,进行互联网访问以及数据的交互。
原理图的设计如下,将UART和I2C也接到了MCU,但实际主要使用了SPI进行通信。

4.3 LCD模块

开发板提供了一块4.3英寸(480x272像素)TFT彩色LCD模块,屏包含带RGB接口的电容式触摸功能。足够大的屏幕也能方便做到ui的交互设计
LCD屏的主要设计原理图如下,其中触摸部分为I2C接口。LCD还支持背光调节控制。

4.4 板载LED和UART输出

硬件设计上还使用了板载的LED作为指示,并通过UART进行log输出的部分。其中LED部分电路如下,其经过VCC的上拉电阻,实现低电平点亮的功能。
串口部分则用了USART1作为了串口debug口,引到了ST-Link的虚拟串口上,可以跟PC上位机软件进行通信,那么串口打印自然就可以用这个串口了。
具体使用的引脚如下

五、软件设计实现及源码说明

软件设计主要涉及几个方面,包括搭建、串口打印驱动、WiFi联网、LVGL及界面设计,整体功能实现等。

5.1 环境搭建

ST的环境搭建还算简单,大部分熟悉ST的都比较容易,安装部分不多赘述了,这里主要列举几个常用到的软件
首先是Keil,该IDE软件在使用过程中可以进行代码编辑,编译和在线调试等,需要提前安装如下的STM32H7的芯片支持包
另一个就是ST官方的IDE,也就是STM32Cube IDE了,这个IDE对ST字节芯片的支持非常好,界面也比较新颖,很方便。本次开发主要使用这个。
另外,开发过程中可能还会设计到芯片代码的擦除和烧写等操作,这里还需要一个ST官方的工具,STM32CubeProgrammer,也非常方便使用。
另外还有一个软件就是LVGL的界面ui设计软件SquareLine Studio了,该软件是LVGL官方的工具,基础版本免费,一般也够满足使用需求,如果需要一些高级功能则设计到一些付费部分。

5.2 串口打印

这部分串口主要用于调试的log打印等功能。接下来先添加串口的初始化代码
再添加重映射定义
然后在main函数中添加初始化,并打印一下做个测试
编译下载运行
运行即可看到PC上打印的内容了
另外,如果要支持浮点数的打印,需要在设置中将如下的两个配置选项都勾选上

5.3 WiFi联网

ST官方针对板载使用的这个WiFi模块有一个驱动库的,可以将其进行移植实现硬件的WiFi网络访问功能。
首先是官方开放的一个驱动库,为了使用这个驱动库,需要用到STM32_Network_Library
为了方便起见,直接拷贝外面的Middlewares整个文件夹
再拷贝应用层的es_wifi_conf相关内容。
以及对应的驱动应用文件
然后注意增加头文件和源代码路径
添加完毕之后,整体的代码框架如图
先做一次编译,无错误提示
增加一些头文件以
变量和函数声明
以及始化函数等
开始编译,可能会出现各种头文件包含的错误,这时需要一定的耐心,通过将头文件所在路劲添加到ide中等操作解决错误。
添加初始化函数调用到main函数中。并连接到指定SSID和Password的AP上,连接成功之后,通过串口打印分配到的IP地址。
其中WIFI_Get_Access_Points和WIFI_Connect函数的实现代码如下。
此时编译下载运行,可以看到成功连接AP路由器,并获得了IP地址为192.168.155.2
然后就可以再尝试做一些网络操作,比如同步一下时间。
H7B3I的DEMO中有举了一个从worldtimeapi.org获取时间的例子,这里我也参考从这里去一下时间数据。
在main函数中调用,该获取时间函数,并在成功之后打印获取到的json格式时间。
可以看到联网成功,并成功获取时间。但时间实际上还有一个时区问题,这里先不做时区处理,只验证网络这块,具体待后续再进行。
接下来还可以再做一个天气信息获取。
当前天气可以用http的get方式从api.openweathermap.org获取,获取时,需要指定APPID,城市,单位等信息。其具体实现操作如下。
然后同样可以在main函数的获取时间操作成功之后,获取一下杭州的天气信息
运行成功之后串口打印如下

5.4 LVGL移植和界面设计

因为使用的开发板是STM32H7B3的主控,并配备了一块4.3寸,480*272分辨率的LCD屏幕,加上项目是要进行天气时钟站的开发,因此UI界面的开发便逃不开了。虽然自己也没什么界面美工细胞,做不来很漂亮的界面,但这次就先把界面的基本功能先打好基础。因为也是第一次用,因此也比较期待能成功。
H7B3是一颗非常强劲的主控,其存储和外设资源及其适合及逆行图形开发,连LVGL官方的DEMO也已经先对这块板子做了支持。也就是下图的所谓官方认证开发板。
因此,先将LVGL官方的代码拉下来
链接已隐藏,如需查看请登录或者注册
可以看到这个其实是一个完整的功能,包含了STM32H7芯片的底层驱动,以及lvgl相关的全部代码。
工程是使用ST官方的IDE工具CubeIDE进行开发的,因此需要事先安装该软件。在从github下载下来之后,就将其导入CubeIDE中。
要注意此处最好选择拷贝一份代码到workspace中,以便备份原始代码。
导入成功之后可看到如下代码结构。
编译如下
还能看到具体的代码的资源使用信息
如果是手动下载代码包的方式,仓库的引用lvgl仓库是不会一起下载。
因此该文件夹为空
需要到lvgl的仓库中单独在下载,并解压到上述文件夹中。
点击run按钮
下载过程log如下
正常运行即可看到如下UI示例界面。在界面的左下角可以看到存储资源使用情况,在右下角则可以看到刷新帧率以及CPU使用率情况。
而LVGL的界面设计则可以使用SquareLine Studio进行设计,利用该软件,可以非常方便进行一些设计,采用所见即所得的开发方式,大大减少了敲代码方式开发UI的时间
如下就是开发的主要界面的设计了

5.5整体功能设计

代码的主函数设计如下,主要先进行一些主芯片的初始化,如时钟,引脚外设等,然后进行串口、RTC等使用的外设的初始化配置。然后进行显示ui、网络等配置,并进入主循环,以实现本地时钟的更新显示,以及定期进行网络时间同步和天气信息的拉取。过程中进行串口信息的打印等。
程序整体设计流程图如下
按钮交互功能处理流程如下

 

其中典型的部分代码如下
更新时钟显示,同时也查询你是否需要时间同步或者更新天气信息。
 
同步网络时间
 
获取网络当前天气
 
查看当前是否需要同步时间或者更新天气。其中时间为1天同步一次,而天气则为1小时获取一次。
 
更新天气内容显示
 
时间同步之后,设置RTC时间
 

六、完成情况
硬件部分主要利用了ST的STM32H7B3I-DK的设计,基于板载的电源管理,LCD、WiFi,UART和LED指示等进行开发。
软件部分则开发了对应的驱动、LCD显示,WiFi联网等,并实现时间的网络获取,以及天气的网络获取,并使用开源的LVGL库以及相应的ui设计工具,通过LCD进行显示,且可以通过LCD的触摸功能,实现ui的交互功能。最终实现效果如下

七、演示视频和代码(链接)
演示视频

演示代码链接:https://download.eeworld.com.cn/detail/Tristan_C/630636

 

八、项目总结
其实很高兴能参加参与到这次的得捷创意大赛中,从报名参加到中间遇到各种问题,并不断去尝试和解决,也学到了非常多,特别是能从各位一起参与的大佬们身上学到很多平时难易接触到的认知和知识,在交流过程中,不断提升自己。
当然,作品本身功能和成熟度并不是非常完美,也并没有充分发挥出板卡的资源和主控MCU的优秀资源,因此也希望这次的作品并不是一个结束,而是一个好的开端,在今后不断利用这块资源学习和完善自己的知识技能储备,完善作品本身,也将硬件板卡尽到发挥到最大的用处。
项目其它帖子主要有:
九、相关附件
 
基于STM32H7B3和LVGL的在线天气时钟站设计.docx (8.46 MB, 下载次数: 3)
 

最新回复

很详细,很厉害   详情 回复 发表于 2024-1-5 11:43
点赞 关注
 
 

回复
举报

6828

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

4.3英寸,480x272像素TFT彩色LCD模块这个很可以

 

点评

是啊,硬件性能和资源非常棒的,只是我的水平有限,还没将其真正全面发挥起来  详情 回复 发表于 2024-1-5 08:21
 
 
 

回复

143

帖子

4

TA的资源

一粒金砂(高级)

板凳
 
Jacktang 发表于 2024-1-5 07:32 4.3英寸,480x272像素TFT彩色LCD模块这个很可以  

是啊,硬件性能和资源非常棒的,只是我的水平有限,还没将其真正全面发挥起来

 
 
 

回复

282

帖子

7

TA的资源

一粒金砂(高级)

4
 

很详细,很厉害

点评

水平有限,见笑啦    详情 回复 发表于 2024-1-5 23:43
 
 
 

回复

143

帖子

4

TA的资源

一粒金砂(高级)

5
 
sipower 发表于 2024-1-5 11:43 很详细,很厉害

水平有限,见笑啦  

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表