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

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

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

; x6 c, x. C! u2 N) |      当设备接外部传感器的时候,通过数据采样,需要在UI界面上将数据实时显示出来。这里以UI界面中的温度和胎压监测为例。还是以UI的MVP结构为基础,通过上位机串口发送数据,模拟实际传感器的测量数据,在UI界面上显示。0 v% x. G  k* c# {% Z  p9 q; `  t
OK,UI界面图如图1和图2所示:
0 j% M' t" _$ ~8 g3 e 6-1.png / r0 w4 d: y! a3 _% {
图11 V* X) s6 Q3 y! }4 I
6-2.png
/ _; e* [  T# {6 \2 K( T; j图2
% t: q( A' d$ i# A( G; y/ e; m要在UI程序架构里增加UART通讯,先在原理图中查找相应的接口,如图3所示:$ D! R6 N1 s# {! w
6-4.png
% I& e' D# f7 r4 H; ?图3
9 b! T9 v2 O6 FUSART3正好可以应用,连接好线,测试发现,这个接口不能使,原因尚未找到。然后找到了USART2接口,需要调整下短接电阻,如图4所示:
5 F" Y8 `" k  ~; u4 P 6-5.png 9 b8 }! V5 N/ J, F1 |
图46 q1 @/ n8 \% J* V
经测试,这个接口是可以使用的。所谓有坑也得迈过去。
* p8 P5 @% \' H" M
0 a3 m0 T; v9 ]

6 C0 y5 M$ \/ R  G定义中断,如下所示:% c+ h3 q+ B0 v! p9 e+ y
  1. TouchGFX_SetUartRxByte(aRxBuffer);1 U# q% R! }, i
  2.         HAL_UART_Receive_IT(&huart2, &aRxBuffer,1);
复制代码
' N9 L! j5 Q% y
  D9 y1 m# W. G6 L* r" ?
因为程序使用的是FreeRtos的架构,所以还得在默认任务里添加中断。
. F5 u  `0 l! y/ c! n+ F9 c5 P% i' f8 I  E8 N

- f6 L! B, P; K" d/ S简单测试一下,能收到数据,没有问题。下面修改UI的代码。; u8 \) w. F' _0 E) \% i$ f

8 p0 y7 F9 L' H# b/ ]& r2 f
* {" A: x) ^" w
现在Model.cpp 中完成数据采集,如下:
) \% [, I7 j  J( {! R$ V3 w
  1. void Model::setUartRxByte(uint8_t b)
    1 x* ]; w1 n, w* }  z2 P, i1 }
  2. {! K& ~( O: A2 i- l3 j% w4 v
  3.     uartRxByte = b;1 A/ g' `1 A7 O- W# V

  4. 3 v1 U. R1 d; y" A7 v! y1 j
  5.     if (modelListener != nullptr)3 d0 L- F' N. W5 d( v
  6.     {% B  _4 _- g- K" m* `
  7.         modelListener->onUartRxByteChanged(b);' `# M# E7 M4 V2 h0 F5 P* V
  8.     }6 w, ^( t/ z  y$ y# i4 j& S: T# l
  9. }
复制代码
0 J& i$ o7 `$ G2 U' u% h8 ?

9 j# F3 R5 ^5 l5 C' gpresenter.cpp 完成中转,如下所示:" U- {) B2 i% M* ?7 G3 i% J
  1. void Screen1Presenter::onUartRxByteChanged(uint8_t b)
    , K& ?$ A& ?2 G+ m" c& s" r- M
  2. {
    & B% ]" }8 m2 m. T5 J; t" C
  3.     view.updateRxValue(b);
    % |: q" S( P& I& c
  4. }
复制代码
  X, H* l9 q1 D" x
4 z( {. G8 U8 l% J$ Q0 s
然后在view.cpp 中完成数据显示,如下所示:* j9 x8 Z( n1 t% `
  1. void Screen1View::updateRxValue(uint8_t b)  k) {' N' K! Q2 h5 {
  2. {
      p: k5 N3 @- h4 o
  3.     // static uint8_t lastValue = 255;   // 不可能出现的初始值
    6 t6 F: O' t( T/ g
  4.   [0 k( @8 h2 {# |( k/ v
  5.     // if (b != lastValue)               // 只有变化才更新 UI7 B) Q2 a8 L! a4 N! ]
  6.     // {
    & O- J' A' s/ \' T: Q8 L
  7.     //     lastValue = b;
      v( U% b# r* Q" A- u, R5 k! x$ f( D

  8. ' L+ r  M6 b; w, k, u0 y" V
  9.     //     Unicode::snprintf(textArea5Buffer, TEXTAREA5_SIZE, "%d", b);
    * R  ]- B  N2 p: s* G5 A5 g
  10.     //     textArea5.invalidate();
    , g1 `/ j8 k: c" T0 ]1 R: h7 o
  11.     // }
      F) p0 w, y' |# r( Y; _
  12.     Unicode::snprintf(textArea5Buffer, TEXTAREA5_SIZE, "%d", b);" \# @+ s! m+ l7 b2 P/ ]& c
  13.     textArea5.invalidate();
    . S- r' v& [1 o. u% [
  14. }
复制代码
3 M6 K' L& _. d- \8 e3 a

% C0 j/ _- Q! B" D5 L8 S9 m最后的效果,通过串口助手发送数据,如图5:3 k8 s" b) {( i$ }
6-3.png
! K# _* k1 L/ X; Y1 t6 s图5& h- h* r, |8 {- ^* ~8 S/ _
UI界面实时显示,如图6所示:+ f  v% Z6 j3 n, I: @
6-6.jpg " \" x8 e8 o' p3 `  t+ ?$ }0 E
图6" w2 i1 i4 `' Q% c
实际操作还是很好玩的,如图7所示:
& I+ P# ]4 v1 x/ O' K1 [/ a. K; b 6-7.gif   s1 ?" H* `7 P5 u  }! B1 ~8 h
图7
7 N8 U- K8 M( g& G
赞 收藏 评论2 发布时间:2025-12-11 19:25

举报

2个回答
STMCU-管管 回答时间:2025-12-12 11:17:41

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

jundao721 回答时间:2025-12-12 13:39:23

<br /> <br />

好的

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版