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

【NUCLEO-U083RC评测】ULP uart 定时器测评

[复制链接]
马晓天 发布时间:2024-6-19 15:03
  STM32U0系列微控制器中的ULP(Ultra Low Power)UART接口设计用于在低功耗应用中实现串行通信。
) u& K4 ?, O- G9 }2 K- y! w3 s$ ?硬件特性:5 R# M5 X/ a8 B$ ]2 n
   超低功耗模式支持:ULP UART具备在低功耗模式下保持唤醒源的能力,允许在微控制器处于低功耗状态下依然能够接收数据或触发中断,从而快速唤醒并处理通信事件,有助于降低系统平均功耗。
8 ^1 |2 c/ s, {电源管理:ULP UART可能集成电源管理特性,如低电压检测、自动电源关断等,有助于在闲置时减少电流消耗。
- s% z( H: |5 k专用低功耗引脚:某些型号的STM32U0可能提供专门针对低功耗优化的UART引脚,这些引脚在待机或睡眠模式下具有更低的漏电流,有助于降低整体系统功耗。4 y" w' e4 k0 w" T
软件配置:
# Q' o$ T% T% g1 c" `9 n: C1 波特率设置:根据实际通信需求选择合适的波特率。ULP UART可能支持较低的波特率选项,有利于在低功耗模式下降低通信时的瞬态电流。5 Q& ~4 \8 F, F* B" c, Q$ {& o! ]
2 数据格式:配置数据位(通常是8位)、停止位(1或2位)、奇偶校验(无、奇校验、偶校验)等参数,确保与通信伙伴的设置一致。
+ k/ a$ m# X8 r" V3 X$ A- i% p3 中断与DMA:
1 I% a& H1 ?. v) {; _8 z   中断:启用接收/发送中断,允许微控制器在数据准备好或传输完成时被唤醒,而非持续轮询,有助于节能。确保在中断服务程序中快速  处理事件并返回低功耗状态。DMA:如果ULP UART支持,可以使用DMA(Direct Memory Access)进行数据传输,无需CPU干预,进一步降低功耗。尤其在批量数据传输时,DMA可以显著减少CPU唤醒次数。
4 }, E: M% v2 ~; _4  低功耗模式切换:在进入低功耗模式前,确保正确配置UART的唤醒源(如空闲检测、接收数据可用等),并在唤醒后恢复正常的UART操作。
! n3 Z" p" w5 H8 u" O功耗优化技巧:# b$ X# ]! M' l
1 禁用未使用的功能:关闭不需要的UART功能(如硬件流控、校验等)以减少不必要的电流消耗。
( P* J7 W( h6 r
+ v; r4 F$ ^; e/ a/ I7 [* f! S2 节电模式:利用ULP UART的节电模式(如果支持),在数据传输间隙降低工作频率或电压,减小功耗。! J* R: A3 [* d4 R
3 唤醒阈值调整:某些ULP UART允许设置唤醒阈值,调整阈值可以平衡灵敏度与功耗,避免因噪声引起的误唤醒。1 n  ~/ g3 F1 |, j
4 软件定时器:使用精确的软件定时器代替连续轮询,以定期检查UART状态或处理数据,减少CPU活动时间。+ H1 z5 [* z- d

4 x1 L$ q' h" a8 f9 U9 H4 I初始化:调用HAL_UART_Init()函数,设置UART参数(如波特率、数据格式等)。! |7 j/ G' S3 x, a; v  h. R4 ~" {
中断配置:开启相关中断(如接收中断),并编写对应的中断服务程序。4 p6 R9 j# P5 T* j7 Y
DMA配置(如果使用):配置DMA通道,关联到UART,并设置传输参数。
- u+ X) I, X, G+ z发送/接收:使用HAL_UART_Transmit()、HAL_UART_Receive()或DMA相关函数进行数据传输。3 p8 z- O0 B) B$ ^- D+ i
调试与测试:# j4 v$ M6 h4 o7 i( e$ `
555.jpg
% \  n) Z; p& \# L; u) f2 {6 c/ H% F. w8 s( ]% D! K

2 N, P7 a9 P. J) f, U" Z MX_LPUART1_UART_Init初始化:
- h$ |$ h' B6 B' W2 k4 J5 r. n% k; N* S# `$ a
  1. static void MX_LPUART1_UART_Init(void)( e7 x( P7 D( B2 ~$ S
  2. {
    ! }: d$ r; P- x; Y' u* U/ _

  3. : j! K9 l1 ^0 i- m+ p
  4. 7 q4 q7 X& v5 Q" c' q3 h# K
  5.   hlpuart1.Instance = LPUART1;* A' N7 Z* L# V& u7 t
  6.   hlpuart1.Init.BaudRate = 115200;1 d2 ]) m( n2 u, S) o! c+ ?
  7.   hlpuart1.Init.WordLength = UART_WORDLENGTH_8B;
    5 z: B0 Y$ H2 C2 h4 S
  8.   hlpuart1.Init.StopBits = UART_STOPBITS_1;
    ! h* ^' t, Y. a9 z% x
  9.   hlpuart1.Init.Parity = UART_PARITY_NONE;
    ) A# C5 I) v$ D6 @
  10.   hlpuart1.Init.Mode = UART_MODE_TX_RX;  K& @8 ~# S8 `) T+ J+ {0 R6 o
  11.   hlpuart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;8 B9 O* }1 U  X# k! _3 o8 n' i- F
  12.   hlpuart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
    * t, o' ~2 k2 \: {" ]. S, g
  13.   hlpuart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
    1 V+ `8 Z8 c+ `/ B
  14.   hlpuart1.FifoMode = UART_FIFOMODE_DISABLE;
    : e' Q! n" n1 z
  15.   if (HAL_UART_Init(&hlpuart1) != HAL_OK)
    1 {  K3 e+ S# J# f4 q) j* q# _
  16.   {  R3 i: W3 K4 E& U% `
  17.     Error_Handler();% h. p* U( |+ F
  18.   }
    " T" f- X5 z! x9 H& v
  19.   if (HAL_UARTEx_SetTxFifoThreshold(&hlpuart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
      W9 z% n5 k7 I0 e$ }3 i
  20.   {% v+ B: f( W7 H7 X9 H1 U2 g; {$ i
  21.     Error_Handler();5 `0 U8 I8 I  a/ C5 h/ [8 y
  22.   }
      Z& _4 s; `2 x- p. T
  23.   if (HAL_UARTEx_SetRxFifoThreshold(&hlpuart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
    8 c+ w) q/ h* A0 c. |( J
  24.   {
    1 U/ z2 W. A' I
  25.     Error_Handler();- `4 c$ [% S5 ?1 R# a  L
  26.   }: `$ \7 T( _  }% Z& W, e( D0 ~6 n
  27.   if (HAL_UARTEx_DisableFifoMode(&hlpuart1) != HAL_OK)* H1 W( F. B5 [5 K% a" r+ d
  28.   {
    ; O$ ~. S# d+ h0 U5 r6 ^
  29.     Error_Handler();& q4 B6 H% h. X  Q" @9 g$ G
  30.   }
    ; S! H$ H' N" g# v- Q; R: v5 k3 W
  31.   
    5 o( w( S/ u7 a: ^" t, s4 d1 F9 y
  32. }
复制代码
" \, J( f) L" E/ a) z

( A) Z5 [$ O3 c4 M. w
  1. static void MX_LPTIM1_Init(void)  ?! w1 C' v2 E9 c$ Q/ ^5 t
  2. {  n7 k* _7 L" j0 D% E2 k5 `- w
  3. 6 y  E( X9 z8 `8 ~  }
  4.   /* USER CODE BEGIN LPTIM1_Init 0 */* B( l# z- C. E, V2 g
  5. ' a) @4 C- b$ H, X. g: ~+ ~+ d* s
  6.   /* USER CODE END LPTIM1_Init 0 */
    3 [4 o2 Q) f# q0 r- e/ k1 Y! b
  7. 6 m' a7 b) R' g' L3 L/ C$ ?
  8.   /* USER CODE BEGIN LPTIM1_Init 1 */
    ' t* m1 s' `4 h
  9. 5 o9 d7 @  {8 p8 p" E- U3 ?
  10.   /* USER CODE END LPTIM1_Init 1 */* P5 x* P7 f# a: T: G+ ?0 H6 N
  11.   hlptim1.Instance = LPTIM1;
    & d" k- O- z: u5 ?, ^3 ^$ d
  12.   hlptim1.Init.Clock.Source = LPTIM_CLOCKSOURCE_APBCLOCK_LPOSC;+ v0 p% D7 j( g: k6 E
  13.   hlptim1.Init.Clock.Prescaler = LPTIM_PRESCALER_DIV1;, n! {+ P& S: P6 s; Q+ n9 P
  14.   hlptim1.Init.Trigger.Source = LPTIM_TRIGSOURCE_SOFTWARE;3 N% f7 W, c4 o1 B( S. v
  15.   hlptim1.Init.Period = 65535;
    . r- M. p: I* a0 P
  16.   hlptim1.Init.UpdateMode = LPTIM_UPDATE_IMMEDIATE;
    ! L4 a5 v. R6 C+ P2 ]( Q
  17.   hlptim1.Init.CounterSource = LPTIM_COUNTERSOURCE_INTERNAL;$ U# ?& M5 [, L/ w+ e. z  x
  18.   hlptim1.Init.Input1Source = LPTIM_INPUT1SOURCE_GPIO;/ L, i$ y* S- {1 T1 h3 x* y
  19.   hlptim1.Init.Input2Source = LPTIM_INPUT2SOURCE_GPIO;& {$ ]0 Z5 j9 }0 B, x5 P% J
  20.   hlptim1.Init.RepetitionCounter = 0;
    ) A& t( f% p/ u( O7 }( K8 q. K
  21.   if (HAL_LPTIM_Init(&hlptim1) != HAL_OK); h" g* R9 q' p. a4 T4 {: V
  22.   {
    , R% \+ ?* ~* d( Y- w
  23.     Error_Handler();
    : U* ?3 v" p6 h" o3 m7 v' W, b
  24.   }2 m6 o' F% j. c* C/ j" u
  25.   /* USER CODE BEGIN LPTIM1_Init 2 */
    5 C( u# Q: ~* o
  26. * h: J5 b4 \0 E8 Z* \* o
  27.   /* USER CODE END LPTIM1_Init 2 */) v* O+ A' |5 w
  28. 9 ]. t7 C  M# j; P! S3 n5 r
  29. }
复制代码

% P) a2 z3 ^/ g% K1 `0 `( a: r  A9 v6 u8 F  X: ]3 Z7 ?" |
4 l% \& Z# E( ]4 o: ~
这里可以选在HAL库 LL库
9 U: ~% m( I& m# I/ T 666.jpg
, f1 v  J2 F( N- O) k; {7 V
. X3 w5 X' n7 C* O
  1. HAL_UART_Transmit_IT(&hlpuart1, (uint8_t*)aTxBuffer, TXBUFFERSIZE);
      n' j( P& K; A; k# `$ h) q
  2. 8 Q- ~4 [" o: i) `+ v9 x8 T: i
  3.    HAL_Delay(1000);
复制代码
0 U1 E) w. S1 W) k6 t) }
- {3 I+ e9 U- c$ d3 k; r
7 r  q( Q- h' G7 ~9 W- o
运行如下:# J  p4 Z6 J0 w6 n
7777.jpg $ A; D) R) ~1 q+ z7 g+ x
5 x7 f: _# _- B
5 j8 a7 g" {+ P/ A- p2 _

2 _; l& v: A1 W6 ~
QQ截图20240619150835.jpg
QQ截图20240619150835.jpg
收藏 评论0 发布时间:2024-6-19 15:03

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版