你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32H750-DK 车辆仪表】6.模拟温度和胎压监测

[复制链接]
jundao721 发布时间:2025-12-11 19:25

      当设备接外部传感器的时候,通过数据采样,需要在UI界面上将数据实时显示出来。这里以UI界面中的温度和胎压监测为例。还是以UI的MVP结构为基础,通过上位机串口发送数据,模拟实际传感器的测量数据,在UI界面上显示。
OK,UI界面图如图1和图2所示:
6-1.png
图1
6-2.png
图2
要在UI程序架构里增加UART通讯,先在原理图中查找相应的接口,如图3所示:
6-4.png
图3
USART3正好可以应用,连接好线,测试发现,这个接口不能使,原因尚未找到。然后找到了USART2接口,需要调整下短接电阻,如图4所示:
6-5.png
图4
经测试,这个接口是可以使用的。所谓有坑也得迈过去。


定义中断,如下所示:
  1. TouchGFX_SetUartRxByte(aRxBuffer);
  2.         HAL_UART_Receive_IT(&huart2, &aRxBuffer,1);
复制代码


因为程序使用的是FreeRtos的架构,所以还得在默认任务里添加中断。


简单测试一下,能收到数据,没有问题。下面修改UI的代码。


现在Model.cpp 中完成数据采集,如下:
  1. void Model::setUartRxByte(uint8_t b)
  2. {
  3.     uartRxByte = b;

  4.     if (modelListener != nullptr)
  5.     {
  6.         modelListener->onUartRxByteChanged(b);
  7.     }
  8. }
复制代码


presenter.cpp 完成中转,如下所示:
  1. void Screen1Presenter::onUartRxByteChanged(uint8_t b)
  2. {
  3.     view.updateRxValue(b);
  4. }
复制代码


然后在view.cpp 中完成数据显示,如下所示:
  1. void Screen1View::updateRxValue(uint8_t b)
  2. {
  3.     // static uint8_t lastValue = 255;   // 不可能出现的初始值

  4.     // if (b != lastValue)               // 只有变化才更新 UI
  5.     // {
  6.     //     lastValue = b;

  7.     //     Unicode::snprintf(textArea5Buffer, TEXTAREA5_SIZE, "%d", b);
  8.     //     textArea5.invalidate();
  9.     // }
  10.     Unicode::snprintf(textArea5Buffer, TEXTAREA5_SIZE, "%d", b);
  11.     textArea5.invalidate();
  12. }
复制代码


最后的效果,通过串口助手发送数据,如图5:
6-3.png
图5
UI界面实时显示,如图6所示:
6-6.jpg
图6
实际操作还是很好玩的,如图7所示:
6-7.gif
图7
收藏 评论2 发布时间:2025-12-11 19:25

举报

2个回答
STMCU-管管 回答时间:3 天前

完整做完之后可以打包发创客秀哈

jundao721 回答时间:3 天前

STMCU-管管 发表于 2025-12-12 11:17
完整做完之后可以打包发创客秀哈

好的

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版