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

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

[复制链接]
马晓天 发布时间:2024-6-19 15:03
  STM32U0系列微控制器中的ULP(Ultra Low Power)UART接口设计用于在低功耗应用中实现串行通信。# P1 N7 @& ~' I) N8 d7 _
硬件特性:
4 j" l; k% v" v* ?. X9 o   超低功耗模式支持:ULP UART具备在低功耗模式下保持唤醒源的能力,允许在微控制器处于低功耗状态下依然能够接收数据或触发中断,从而快速唤醒并处理通信事件,有助于降低系统平均功耗。
7 L# Z0 ~6 G, W9 N& o' f9 g电源管理:ULP UART可能集成电源管理特性,如低电压检测、自动电源关断等,有助于在闲置时减少电流消耗。
/ i- K; A: l( Z. `  h5 l* I, k% E! q$ A专用低功耗引脚:某些型号的STM32U0可能提供专门针对低功耗优化的UART引脚,这些引脚在待机或睡眠模式下具有更低的漏电流,有助于降低整体系统功耗。
6 m  G* [7 r' m& N' w1 E0 u软件配置:, `  c% y4 l1 B4 j$ `+ i
1 波特率设置:根据实际通信需求选择合适的波特率。ULP UART可能支持较低的波特率选项,有利于在低功耗模式下降低通信时的瞬态电流。
* f0 n; q3 R+ d* L2 数据格式:配置数据位(通常是8位)、停止位(1或2位)、奇偶校验(无、奇校验、偶校验)等参数,确保与通信伙伴的设置一致。/ Q: j' l8 D7 M$ F/ p4 _# t3 |
3 中断与DMA:& s4 ?$ Z/ p( ~
   中断:启用接收/发送中断,允许微控制器在数据准备好或传输完成时被唤醒,而非持续轮询,有助于节能。确保在中断服务程序中快速  处理事件并返回低功耗状态。DMA:如果ULP UART支持,可以使用DMA(Direct Memory Access)进行数据传输,无需CPU干预,进一步降低功耗。尤其在批量数据传输时,DMA可以显著减少CPU唤醒次数。
# I1 X+ d! M  l4  低功耗模式切换:在进入低功耗模式前,确保正确配置UART的唤醒源(如空闲检测、接收数据可用等),并在唤醒后恢复正常的UART操作。- L! p; U( X  K! x, c7 J
功耗优化技巧:. D, ^6 `0 T8 Y+ d9 z
1 禁用未使用的功能:关闭不需要的UART功能(如硬件流控、校验等)以减少不必要的电流消耗。
. W3 H! F3 w4 P3 ]
4 z& R( t/ J' f2 节电模式:利用ULP UART的节电模式(如果支持),在数据传输间隙降低工作频率或电压,减小功耗。9 i- c* c# @3 ~$ w
3 唤醒阈值调整:某些ULP UART允许设置唤醒阈值,调整阈值可以平衡灵敏度与功耗,避免因噪声引起的误唤醒。& B1 Q8 h# @  A0 [/ v9 F
4 软件定时器:使用精确的软件定时器代替连续轮询,以定期检查UART状态或处理数据,减少CPU活动时间。
- n% B% J/ Q4 i- u& Z! V6 C/ `; b# u
初始化:调用HAL_UART_Init()函数,设置UART参数(如波特率、数据格式等)。2 r% C% Z) Y! \4 I; C3 [4 r$ ?5 |
中断配置:开启相关中断(如接收中断),并编写对应的中断服务程序。
. W) ?3 ?- W* p7 B4 ~. M5 FDMA配置(如果使用):配置DMA通道,关联到UART,并设置传输参数。
* P1 X- U9 u2 R7 t) o* |& g发送/接收:使用HAL_UART_Transmit()、HAL_UART_Receive()或DMA相关函数进行数据传输。
9 J1 o, w) {  e0 @8 N调试与测试:
4 ^# C" f5 F; H3 O& G2 a: P 555.jpg
9 x! n3 y; |  }
6 p; V+ }( N; T0 ~9 K8 K- a8 k: r# [8 Z; E$ v- X
MX_LPUART1_UART_Init初始化:$ u. G) @- b* V7 n' E& o

+ C* I7 M7 @/ c& P0 J8 r' R
  1. static void MX_LPUART1_UART_Init(void)% V' y7 @/ }* f! U2 g
  2. {4 y1 ?% j- s: w5 i1 R; o0 o8 W
  3. ( `. N& F4 A4 V1 N9 B) _

  4. % e4 e/ L5 A8 {. a8 y$ s* N/ q
  5.   hlpuart1.Instance = LPUART1;/ ]9 b9 }3 c5 p9 {# r
  6.   hlpuart1.Init.BaudRate = 115200;5 c( U( W8 G# L) e2 c
  7.   hlpuart1.Init.WordLength = UART_WORDLENGTH_8B;
    , x5 X. E6 e1 v& ]" P
  8.   hlpuart1.Init.StopBits = UART_STOPBITS_1;5 N. S: ]" n0 ]9 e5 T: R# p
  9.   hlpuart1.Init.Parity = UART_PARITY_NONE;
      ]0 k; R: u5 M8 N8 W
  10.   hlpuart1.Init.Mode = UART_MODE_TX_RX;
    # ~0 X; d1 u, O3 B
  11.   hlpuart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
    * c0 j: z' b; J+ J& l$ j
  12.   hlpuart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
      u; G: u. c9 ^* E: z
  13.   hlpuart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
    $ z! Z4 w7 j% N/ E2 g8 H
  14.   hlpuart1.FifoMode = UART_FIFOMODE_DISABLE;6 k4 S0 b) M4 z' o: y$ N, v# w
  15.   if (HAL_UART_Init(&hlpuart1) != HAL_OK)
    ' P& @' i$ w0 P2 Y; R1 _* }
  16.   {
    % y1 ~/ Q6 H% \7 H$ R4 J
  17.     Error_Handler();
    8 _9 I% s: r; D8 v
  18.   }* c6 O. \0 o8 {2 e0 Q
  19.   if (HAL_UARTEx_SetTxFifoThreshold(&hlpuart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)3 _0 j# T# u7 o) K$ |6 G& J0 ]
  20.   {
    . n; b7 d! ?' [7 v  |, q0 ^
  21.     Error_Handler();
      D# `0 l& L) \( t! T1 J* q0 [
  22.   }9 {2 J5 I: T2 V$ U9 |" y/ M9 ?
  23.   if (HAL_UARTEx_SetRxFifoThreshold(&hlpuart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
    ( y) e: g1 h2 W* @) y
  24.   {% Q5 J* w8 |# F
  25.     Error_Handler();7 k  @: {7 J' S# H
  26.   }( g9 ?% v/ o3 S. @
  27.   if (HAL_UARTEx_DisableFifoMode(&hlpuart1) != HAL_OK)
    , M3 V, `) C, M3 @0 _
  28.   {+ \; a) q" W; E7 d$ a9 Y9 M
  29.     Error_Handler();% j' L9 N! F9 t: r' b
  30.   }
    & f# |  O7 m" A9 L$ e! m
  31.   4 h8 `* d0 g" p% I& j  Z! F
  32. }
复制代码

* R7 q  r0 R$ D  j+ a: H) O3 X7 e3 i  k7 J0 G: F
  1. static void MX_LPTIM1_Init(void)
    + r) u- N; j& q& R' T4 b" V
  2. {! u# j6 M( o) s) r9 p

  3. , e2 D; V3 |( i1 t
  4.   /* USER CODE BEGIN LPTIM1_Init 0 *// y0 Q, H9 N* o% H

  5. 5 n5 M- r; O+ r9 ~3 y
  6.   /* USER CODE END LPTIM1_Init 0 */2 B& H' k" C$ c5 z

  7. ; f6 P! P9 u2 U) z
  8.   /* USER CODE BEGIN LPTIM1_Init 1 */0 P% Y9 I7 @6 Z! j+ G

  9. " w2 \, \2 N( `; |/ P
  10.   /* USER CODE END LPTIM1_Init 1 */
    * n! p$ R6 q8 X( S3 o. O! L
  11.   hlptim1.Instance = LPTIM1;
    & @7 F- `. I4 f9 \3 E* h
  12.   hlptim1.Init.Clock.Source = LPTIM_CLOCKSOURCE_APBCLOCK_LPOSC;
    $ \9 |. O1 a& X& S- j" i( M
  13.   hlptim1.Init.Clock.Prescaler = LPTIM_PRESCALER_DIV1;" @6 D, _, r6 T7 b, }" G* b
  14.   hlptim1.Init.Trigger.Source = LPTIM_TRIGSOURCE_SOFTWARE;
    5 A& O1 w1 r) d+ a
  15.   hlptim1.Init.Period = 65535;: g) e; Q! q% q
  16.   hlptim1.Init.UpdateMode = LPTIM_UPDATE_IMMEDIATE;
    , G+ K. e/ `+ n3 U* M. K/ l
  17.   hlptim1.Init.CounterSource = LPTIM_COUNTERSOURCE_INTERNAL;
    6 W8 Z' B: n: f' \
  18.   hlptim1.Init.Input1Source = LPTIM_INPUT1SOURCE_GPIO;0 W% t3 j  e# C3 U; G: c6 }
  19.   hlptim1.Init.Input2Source = LPTIM_INPUT2SOURCE_GPIO;
    1 J( [8 h/ @; F/ U. N' s; v
  20.   hlptim1.Init.RepetitionCounter = 0;
    1 e7 G; L- m2 Q  o+ w+ O9 Z/ ^
  21.   if (HAL_LPTIM_Init(&hlptim1) != HAL_OK)
    . ^) C/ Y7 Z5 L8 Q6 u, u
  22.   {
    ; p* `7 i0 i( b  A
  23.     Error_Handler();
    ! S5 K6 K3 R0 ?1 R8 \# B+ j
  24.   }6 k; H. U1 ?( T0 v( E
  25.   /* USER CODE BEGIN LPTIM1_Init 2 */
    $ n' X. Z# H( X3 W
  26. 5 t6 I1 M! z% J2 W# H' ?# m. c* ^
  27.   /* USER CODE END LPTIM1_Init 2 */
    9 |4 P* L; g- j2 u  W! W: X2 Q

  28. . ~: ^4 p8 i" J0 g
  29. }
复制代码
, {& ^) V4 H/ Q, K  ]1 @
& Z0 ?! A2 I5 S

: \8 w  I7 s* a这里可以选在HAL库 LL库
8 c" Z3 Y2 _- d# p8 I* z 666.jpg . h' b3 P3 Q6 r9 {* z/ B0 _1 a

1 ?5 q2 l* N- p; F
  1. HAL_UART_Transmit_IT(&hlpuart1, (uint8_t*)aTxBuffer, TXBUFFERSIZE);0 g* |- P8 U. f& Z8 N

  2. / i+ }6 `4 j% _6 w
  3.    HAL_Delay(1000);
复制代码

( z1 K8 f, p: Q+ ^: `3 A/ `2 C4 f* b" \* [. m8 Q7 g4 G6 X3 L
# e5 E/ L* `5 i
运行如下:0 d  e' e& {% h, V+ J6 E& Z" \( b
7777.jpg
% S7 ^$ s+ ]' f# b+ F) f& ^' v3 J# y$ Z; w' \0 _0 E- [

4 }' E( l& D, @/ {) E7 C+ y  r
- x- @- A, _6 K+ [" C
QQ截图20240619150835.jpg
QQ截图20240619150835.jpg
收藏 评论0 发布时间:2024-6-19 15:03

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版