本帖最后由 HonestQiao 于 2024-3-5 17:00 编辑
#申请原创# 在 STM32U599J-DK 开发板上,提供了一个MEMS温度传感器:
这篇评测分享,就是使用X-CUBE-MEMS,获取温度传感器数据,并在屏幕上进行显示,最终的效果如下:
一、功能设计
这个工业温度仪表盘要显示当前的温度数据,每秒刷新一次。
同时,还要累计历史数据,显示5分钟的平均值,以及15分钟的平均值。
二、硬件了解
从开发板的手册,可以了解到温度传感器的具体位置(U18):
从官方提供的原理图中,可以看到具体的型号为STTS22H:
关于其详细信息,可以从ST官网查看:https://www.st.com/zh/mems-and-sensors/stts22h.html
从上面的电路原理图可知,其连接到了I2C3,对应的引脚为PH7-SCL、PH8-SDA。
三、TouchGFX界面设计
1. 图片准备:
首先,准备好一张背景图:
这张图是经过仔细挑选的,搭配STM32U599J-DK的屏,完美。
并在TouchGFX项目中,添加该图片:
2. 字体文件准备
另外,还需要准备一个LED字体:
并将该字体文件,放置到项目对应的目录下:
3. 字体设置:
对界面中,要显示的字号设置对应的字体规格:
对于显示数值的部分,还有从特殊处理:
然后,在Config进行如下设置,确保最后字体能够正常调用:
4 界面设计:
参考小图,进行界面的设计:
对于要动态显示数值的元素,需要做wildcard设置:
设计完成后,可以点击预览,查看效果:
四、STM32CubeMX配置
ST官方提供了X-CUBE-MEMS,其中已经对STTS22H温度传感器提供了支持,可以很方便的通过配置集成,然后在程序中读取数据。
1. 安装X-CUBE-MEMS1
通过包管理,安装需要的模块:
2. MEMS模块传感器安装:
从上述界面,点击X-CUBE-MEMS1,进入包管理:
安装其中的STTS22H和ENV_SENSOR两个即可。
3. I2C3启用:
因为STTS22H连接到了I2C3,对应的引脚为PH7-SCL、PH8-SDA,在I2C3配置中开启并进行设置:
4. 设置STTS22H
默认情况下,需要将STTS22H的Addr脚接地:
因此需要做如下的配置:
并设置使用I2C3:
设置完成后,关闭STM32CubeMX,自动生成最新的代码。
五、代码编写
代码部分,分为两个部分,分别是初始化STTS22H,以及在MPV代码中获取温度传感器的数据,并进行呈现。
1. 初始化STTS22H
在main.c中,使用如下的代码完成初始化:
2. 温度传感器数据读取
这个部分的处理,参考了ST官方TouchGFX手册的后端通信部分:https://support.touchgfx.com/zh-CN/docs/development/ui-development/touchgfx-engine-features/backend-communication#sampling-from-gui-task
在MVP架构中:
帧率为60Hz,也就是1秒刷新60次。
在这个分享中,温度读取不需要太高的速度,所以直接在帧刷新的过程中,进行温度传感器数据的读取。
在Model的预定一种,添加对应的属性:
其中,counter用于计数,每60次进入一次读取。
temperature用于当前温度数据的测量,temps使用了向量vector来存储历史的数据。
tick()调用中,添加对应的代码:
在上述代码中,会调用SENSOR接口,读取STTS22H的数据,然后存放到temps中,并计算5分钟和15分钟的平均值。
计算完毕后,通过modelListener->notifyTemperatureChanged(temp1, temp2, temp3),通知监听其的控制器,进行数据的更新处理。
在ModelListener中,有一个空的virtual函数定义:
其实际定义在对应的控制器中:
最终,调用关联的view,进行温度值的设置。
在View中,做最终的呈现处理:
在上述代码中,需要将要显示的数据,使用字符串的模式,存入对应的Buffer中。
而这些Buffer,通过之前的界面设计,自动生成到代码中,具体在ScreenViewBase中查看:
将上面的处理流程总结一下:
- 屏幕每秒刷新60次,也就是帧率为60Hz
- 在Model中,判断刷新的次数,每60次,也就是间隔1秒,进行一次温度数据的读取,并将读取到的数据进行存储
- 在Model中,根据存储的数据,取得当前值,以及计算5分钟平均值和15分钟平均值
- 在Model中,计算完毕,通过ModelListener发出通知,要更新数据
- 在Presenter中,接收到通知,并调用自己当前关联的View的接口,进行温度值的设置
- 在View中,进行实际的界面处理。
六、实际效果
编译上述代码,下载到开发板,最终的效果如下:
七、参考资料
在研究学习过程中,参考了很多资料,以下为还记得的部分。
对所有的资料,特此表示感谢:
- STTS22H 精度为0.5°C的低压、超低功耗I2C/SMBus 3.0温度传感器
- C++ vector计算数组之和
- C++ vector 容器浅析
- C++浮点数组(vector, valarray)的二进制存取/读写
- 【STM32H750B-DK评测】6.传感器数据读取及TouchGFX界面显示实战
- TouchGFX后端通信
- TouchGFX之文本和字体
- 测评汇总:STM32U599J-DK
- TouchGFX: 第二部分–TextArea外观和通配符
|