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

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

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

  N* h% G1 h/ s& ]; n      当设备接外部传感器的时候,通过数据采样,需要在UI界面上将数据实时显示出来。这里以UI界面中的温度和胎压监测为例。还是以UI的MVP结构为基础,通过上位机串口发送数据,模拟实际传感器的测量数据,在UI界面上显示。( @5 v9 _) Q$ Q: x; s) ?- n- m, s5 o
OK,UI界面图如图1和图2所示:6 i  k( L3 ?1 i: R+ [5 t, Y/ ^- V/ D
6-1.png
/ ?1 |, [) z) J图1; d4 j5 a! {  u. H8 j' z
6-2.png 8 ~5 `9 ]; G4 b3 t
图2
0 v3 T6 U. h- f/ F" ?7 o% f" T( ^要在UI程序架构里增加UART通讯,先在原理图中查找相应的接口,如图3所示:
2 }; [/ i+ w# X- _3 t5 _$ `( N 6-4.png
  L  z6 g6 u$ S  S+ B' {图3: ]0 T2 z9 W% G4 o
USART3正好可以应用,连接好线,测试发现,这个接口不能使,原因尚未找到。然后找到了USART2接口,需要调整下短接电阻,如图4所示:
  e' t% X$ x+ Y7 A* C2 R" a% D" g 6-5.png 8 `; z6 x$ p4 M# a. ~5 J) E
图4
- ^& V- ?( U1 j( }经测试,这个接口是可以使用的。所谓有坑也得迈过去。5 @; b* |  u2 |

" @+ c( {9 |  R3 A

0 ^2 V- l6 W& j1 l% G8 x: B0 Z2 r4 b, [定义中断,如下所示:! V+ J9 ~3 h$ c4 _
  1. TouchGFX_SetUartRxByte(aRxBuffer);
    , g1 H, I5 H$ m% e
  2.         HAL_UART_Receive_IT(&huart2, &aRxBuffer,1);
复制代码

& I1 ]4 v: b1 \% D& z2 L  y, j" S- ^1 v8 |9 o) i
因为程序使用的是FreeRtos的架构,所以还得在默认任务里添加中断。% s/ h" r; _2 G- r5 W

4 J& r  M, {3 D& N" h

9 b' c# c7 E) w  f9 \" |简单测试一下,能收到数据,没有问题。下面修改UI的代码。
9 x- ?1 I) R! ]/ q# U1 r, @( J& d7 }9 s9 S) r
9 w5 d2 k5 v& Y  ~' o
现在Model.cpp 中完成数据采集,如下:& U: V8 t  Q& }, @. _
  1. void Model::setUartRxByte(uint8_t b)
    , v; P1 C, s4 `* x
  2. {' S2 k' T" d* T+ ?3 S& r; z' M
  3.     uartRxByte = b;
    . p: x2 C  V$ N/ ]
  4. 3 f3 b) G1 ]( O7 f6 A2 z( b' g9 M
  5.     if (modelListener != nullptr)& O& b6 y9 ~/ X. t/ m" ]
  6.     {9 I" B$ U  V  x  }0 z
  7.         modelListener->onUartRxByteChanged(b);! ^+ v% y# F, T
  8.     }
    9 G: z1 |& ^, n% F$ t3 |% u+ S
  9. }
复制代码
- E7 Q2 r% Y9 A: h6 o/ c, c

1 m4 n$ B9 C9 F8 j' mpresenter.cpp 完成中转,如下所示:9 N0 l- y9 y. P) S% T; q
  1. void Screen1Presenter::onUartRxByteChanged(uint8_t b)$ d, P+ q$ R8 r" n+ T& ?3 Z
  2. {
    ' @; u, D9 W' X4 y, v& ]
  3.     view.updateRxValue(b);
    % r) B: C+ j8 C( G( h
  4. }
复制代码

/ [% J, Z  Q& j! i+ m2 s2 L4 Q, a0 X0 I" \) m1 Y, g; n
然后在view.cpp 中完成数据显示,如下所示:
* c, p' T4 i* B8 H
  1. void Screen1View::updateRxValue(uint8_t b)2 ~  i; D3 D* C% V6 t5 W% G8 d% t
  2. {
    : C- E) h/ _& ?( B, V2 }
  3.     // static uint8_t lastValue = 255;   // 不可能出现的初始值. u5 I6 H* \1 }4 M1 s
  4. ! F5 U  r! b7 k) g
  5.     // if (b != lastValue)               // 只有变化才更新 UI
      x* f3 p* z1 J/ P, A9 Z
  6.     // {: s) Z2 [4 ?9 M, W  I
  7.     //     lastValue = b;
    . P8 L- o+ C& T
  8. " h  G% R, @: l# O; }. R  P3 A: i
  9.     //     Unicode::snprintf(textArea5Buffer, TEXTAREA5_SIZE, "%d", b);! n( n& v0 |3 O- N2 O! A+ X2 F5 J
  10.     //     textArea5.invalidate();
    / {7 B% |' A6 @, V
  11.     // }
    ; z" {  G6 x+ [$ `: x
  12.     Unicode::snprintf(textArea5Buffer, TEXTAREA5_SIZE, "%d", b);
    & G) S& P/ h5 G1 b) _3 C1 j: e
  13.     textArea5.invalidate();1 ~8 }1 i5 v/ O
  14. }
复制代码

: ~) K, H5 S0 e- y" y/ A6 W! c
1 I, I3 h; b' _0 p( r; W8 z! P最后的效果,通过串口助手发送数据,如图5:5 b% X$ R/ H2 P
6-3.png
) i. c  o/ z, a* y* E, d图5
% y! q" U2 Z0 X  `UI界面实时显示,如图6所示:0 l8 }3 v7 I1 o3 u/ I7 j9 c- d
6-6.jpg & Z& C4 D* O( w' M
图62 f# s7 Y3 Z3 b% I6 [
实际操作还是很好玩的,如图7所示:( [3 j7 Q' o/ y8 M" j( T* t
6-7.gif ' n0 [  L7 V2 n* c5 ~+ U) Z
图7/ H  a6 F0 L+ ?" v
赞 收藏 评论2 发布时间:2025-12-11 19:25

举报

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

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

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

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

好的

所属标签

相似技术帖

官网相关资源

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