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

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

[复制链接]
jundao721 发布时间:2025-12-11 19:25
% D* n% Y# @- w0 g8 `! w8 e
      当设备接外部传感器的时候,通过数据采样,需要在UI界面上将数据实时显示出来。这里以UI界面中的温度和胎压监测为例。还是以UI的MVP结构为基础,通过上位机串口发送数据,模拟实际传感器的测量数据,在UI界面上显示。
: @$ }. g# ~! s6 `0 F# F' ^3 FOK,UI界面图如图1和图2所示:  c) |$ H8 V& h$ o
6-1.png
. P0 O1 Q: g* Z" l' ]图1
; q& q7 ]4 u- W. y' R 6-2.png 9 Y( b3 T! o! Z8 F+ p5 s! p8 f
图2- ?/ m% m  H1 ?6 [1 i5 S
要在UI程序架构里增加UART通讯,先在原理图中查找相应的接口,如图3所示:5 Q9 r, ~& C" E6 z) P: e9 d9 s( U
6-4.png
- C$ z1 u* R/ W4 f9 @9 V) m4 h8 V图3: p. X; }; A9 B( v( S3 O4 O5 K" K
USART3正好可以应用,连接好线,测试发现,这个接口不能使,原因尚未找到。然后找到了USART2接口,需要调整下短接电阻,如图4所示:8 l& d$ U/ J1 x4 v
6-5.png $ g3 |* [8 r6 g- ^3 m# q, }
图46 X; e/ d4 t: o& Y: i' x1 W
经测试,这个接口是可以使用的。所谓有坑也得迈过去。
0 p9 Y$ V/ G! e4 q
: a  X  A9 n! A* k5 E+ A

1 ?. c( H  j& P2 l定义中断,如下所示:, q1 c. ?, X" ]1 ?
  1. TouchGFX_SetUartRxByte(aRxBuffer);
    6 T! D/ q* v* r9 l7 E
  2.         HAL_UART_Receive_IT(&huart2, &aRxBuffer,1);
复制代码

- N' z% a3 ?5 U8 `$ [7 \: W1 q
: O% P7 f, |+ v( i, E因为程序使用的是FreeRtos的架构,所以还得在默认任务里添加中断。1 Q; m% N3 P2 |& l* y5 b- I1 \1 r

. _  N7 P7 n) z4 [! j5 q) s$ L

: I2 W7 k2 l6 ?& m- M5 D简单测试一下,能收到数据,没有问题。下面修改UI的代码。
: ?1 t) p$ {& {6 P8 D! C
7 r; D  Q, D$ I
- w& r% I; n$ x. v- }+ \8 c$ ?
现在Model.cpp 中完成数据采集,如下:
2 R  h& U% @8 K$ |' Y1 _9 C
  1. void Model::setUartRxByte(uint8_t b)
    1 k7 G6 H; ?8 B1 R/ D, t
  2. {, R& k5 I. U7 X5 d/ X/ M  T
  3.     uartRxByte = b;
    ; c2 E, i  w1 ?' Q& M+ x$ f

  4.   ]- \8 H( t' b( n1 x
  5.     if (modelListener != nullptr)
    . L2 p! W8 \' q7 m9 {# k
  6.     {3 z) L. K1 u' J' k* E! Z7 ~
  7.         modelListener->onUartRxByteChanged(b);' t" G' a5 I1 U$ ?
  8.     }! L( E4 u/ a& j3 r' J0 K1 `
  9. }
复制代码
* d1 O3 K; A- u* R$ {

/ v: J" d' c5 Q" W! k3 r" u* Opresenter.cpp 完成中转,如下所示:  u5 F8 Q8 Z# p% J% d
  1. void Screen1Presenter::onUartRxByteChanged(uint8_t b)9 [- m8 _* ?$ ]8 X! R7 m
  2. {
    , e% n  K7 {+ N2 e6 ?$ C1 z
  3.     view.updateRxValue(b);
    . S% v3 X& P2 X% _
  4. }
复制代码

; O( c" H4 q# J; X
9 M5 Z/ ~2 e3 }6 w1 x2 `然后在view.cpp 中完成数据显示,如下所示:
5 y) d  T7 K( `4 q" u& t
  1. void Screen1View::updateRxValue(uint8_t b)& p6 I# S4 ]8 r6 R
  2. {$ v( _* d  }8 Z, Q' d- E
  3.     // static uint8_t lastValue = 255;   // 不可能出现的初始值& R! k; e- s, \7 \7 L0 ~) }6 o8 V
  4.   D  G- R) ^3 e3 Y; e
  5.     // if (b != lastValue)               // 只有变化才更新 UI) b( C0 p5 e/ d- E+ r4 J; E
  6.     // {; T! M( [: Q0 L. W; k5 r: Y. K4 z
  7.     //     lastValue = b;
    ( x0 R/ K7 N5 X. p( y7 y- \
  8. 2 N) s, O+ [$ q
  9.     //     Unicode::snprintf(textArea5Buffer, TEXTAREA5_SIZE, "%d", b);8 d8 x2 q/ r3 `6 P6 T% }
  10.     //     textArea5.invalidate();
    7 f5 R; h8 V$ T  c! d# R
  11.     // }
    0 G/ b' M- C) J3 O! k
  12.     Unicode::snprintf(textArea5Buffer, TEXTAREA5_SIZE, "%d", b);6 I' ~7 R1 x5 e" L
  13.     textArea5.invalidate();( I# H8 E' y3 g$ j0 S
  14. }
复制代码
! [4 O% Q* v  M8 e5 H
' R: h4 [7 l; n. _+ h# |
最后的效果,通过串口助手发送数据,如图5:3 }1 W3 c1 h* W
6-3.png 9 Z( B6 F/ Y; I8 T
图5
- @8 J7 m+ K6 f$ mUI界面实时显示,如图6所示:
2 G1 K, p! k: P; s) V  s2 p- d 6-6.jpg
. l% U; @; k9 H: J, }$ \% D图6* y) W# F( t& C. R- u/ I8 x
实际操作还是很好玩的,如图7所示:
! X9 a2 A. y. Q 6-7.gif
% X1 L) ~1 U% Z$ m# O/ ]图75 M; ^, g, b# H9 _/ V0 w2 e2 |0 h" \
赞 收藏 评论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 手机版