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

【STM32H5 评测】+ 多外设同时开启稳定性简要评测

[复制链接]
BinWin 发布时间:2026-10-30 23:45
      STM32H5的外设也是相当丰富的,作为新款产品,简要测一下多个外设开启的情况。3 w* i7 {! u# p2 U
      方便测试,串口第一个选择。使用调试器虚拟串口对应的串口3来做收发测试。开启DMA,接收使用IDLE+DMA来接收; Z) Q# m7 @: R& a9 `. a
不定长数据,发送直接使用独立缓存区。
/ e) r/ M9 U( q: s/ s. w6 J/ R       1.png
! X- v, @' b! V     开启串口以后,补充以下代码
* B% c, t4 P5 c% q1 Q; |     
7 f$ U$ L' c4 X0 r4 J" S+ P
  1. void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
    1 x: b# V" l! x" @. h! n5 H# V9 t  s
  2. {/ \$ o/ l3 x- _% @9 K- I; t! P" k0 V
  3.   if (huart->Instance == USART3)" Z" W$ Z. Q: t
  4.   {4 @1 P; z3 D* X
  5.     if (Size > 0 && Size <= 16)2 c# U. B) x2 u5 D6 _4 s
  6.     {
    0 X! E; U3 p  G$ I) p+ s3 v" ?
  7.       recvLen = Size;
    2 s8 u& W: W: V7 F
  8.       rxDone = 1;( s! e! Q% v8 B: o$ O
  9.       memcpy(txBuffer, rxBuffer, recvLen);
    : ^/ @& K9 q7 _9 _
  10.       HAL_UARTEx_ReceiveToIdle_DMA(&huart3, rxBuffer, 16);- F$ _+ _% ]( X0 I+ V
  11.       __HAL_DMA_DISABLE_IT(huart3.hdmarx, DMA_IT_HT);
    $ D9 O, }; W: b, `7 l* f+ [
  12.       
    + c; [, F% h- B. N
  13.     }
      v+ C/ T/ f$ ]; [" K% ?
  14.   }: e4 t3 b+ [4 h3 i2 j
  15. }& \. N: u1 ]5 [  e

  16. 5 F9 h. v, i  L. X- N! ]5 k* ]
  17. void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)' \4 K/ w4 L- [" Y2 _2 m
  18. {5 o0 C, u7 t. n  s* H7 [- r8 @
  19.     if (huart->Instance == USART3). B, [* I7 \  n9 p5 J4 }
  20.     {, w' z& G. }& \( V6 l% d
  21.         txBusy = 0;* q4 G+ [7 x* N' l3 L
  22.     }
    , U4 j" F+ a' I+ m& F
  23. }( _2 y( k& l$ `" |
  24. 5 K2 G5 _. c( U9 n7 v
  25. void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)( P$ C' W% O" ?5 A& J* x# h$ ~
  26. {. b% v* Z: Z2 V8 o" K6 C# M
  27.     if (huart->Instance == USART3)" v- h' P0 K7 A$ A3 s  f% ^8 z6 K
  28.     {2 L) p1 ], y& g8 [; \8 p- ^
  29.         
    : F0 U8 @9 ?: E" n# v
  30.         HAL_UARTEx_ReceiveToIdle_DMA(&huart3, rxBuffer, 16);
    7 O- s$ x- `% [3 F. H6 p( O* n& E
  31.         __HAL_DMA_DISABLE_IT(huart3.hdmarx, DMA_IT_HT);
    ! G$ b: ~2 o7 z, {/ S# C7 W: G
  32.     }4 u$ @! i0 ^" \/ N3 {
  33. }
复制代码
     然后再开启一个定时器吧,这个也是很常用的资源。TIM1常规溢出中断,点亮LED。, B$ }# F% \4 G" Z7 G
       2.png 5 M$ I# [1 R0 s: b: q& d8 Q
      算好1ms定时,中断回调内写个GPIO翻转2 C' k  Y6 R& U
      0 ~- N( K0 k, x$ g
  1. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)' n2 G1 f* H0 c) w! z0 W5 B
  2. {$ a  \' n+ ?& a2 T: y
  3.   static uint16_t cnt = 0;/ q; `/ _" E2 e' W
  4.   if (htim->Instance == TIM1)* ~* H$ F1 W* ]6 h6 P5 N6 \
  5.     {& I( V1 \+ A9 x- {! o" D! Z  t! k
  6.         cnt++;7 }+ p( j; Q2 a: u! x
  7.         if (cnt >= 500) 7 C- s+ b5 ]  Q1 I( H
  8.         {
      q; e) Y' E% J+ T
  9.             cnt = 0;6 K" }5 y3 S9 Y2 C! b# V% j# V
  10.             HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);  1 i7 w( j( v0 h
  11.         }
    6 x: f/ D0 x0 y
  12.     }2 p+ c) t9 J/ \
  13. }
复制代码
  模拟外设也开启一个吧,ADC算常用的。读一下芯片内部温度。使用DMA连续采样。  x  N( q- b" ~1 g! ]3 e  L
    3.png 4.png
( e* l! X3 Y+ U" g, A3 d   代码里需要读一下ADC值并转换为温度值,这个库函数以宏定义方式给了一个很方便的函数。6 U& _/ o6 d) G* s7 z
   + d1 [/ `! d+ q
  1. __HAL_ADC_CALC_TEMPERATURE(3300, adc_raw[0], ADC_RESOLUTION_12B);
复制代码
正确的读数如下$ b) W% x3 V. |% C. e& t% {
   5.png
5 b& k1 C! d  ~, k* t1 m  开始一直读不对,然后查问题,想到ICACHE原因,但也没HardFault,并且核对了MPU配置+ n( u( J: u. c$ x
   6.png 7.png
* v; g7 K; p( a1 `    实在是没有想到问题出在DMA数据位宽上面,串口打开DMA默认是字节,ADC居然忘记了这一点。修改后就没问题了。串口助手持续收发测试,可以看到在TIM和ADC同时工作的情况下并没有丢包。持续测试一段时间如下,没有问题2 c) h+ e5 t1 v) [1 ^2 k  C
    8.png
! [$ Q$ g" L2 K9 D1 a    以上也是简单的日常应用测试该产品没有明显BUG,是否满足实际工况根据需要做针对性压力测试。
: S" h9 Q1 ]5 w; ^
$ c& t" v4 W# p0 `; o
9 b# x6 P- ]' B, \6 C& c
& C8 ?3 Y) Z+ L: U8 M9 J0 a, a2 ?* }5 i

3 C0 `) g1 _: [- r6 |8 |
赞 收藏 评论0 发布时间:2026-10-30 23:45

举报

0个回答

所属标签

相似技术帖

官网相关资源

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