请选择 进入手机版 | 继续访问电脑版

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

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

[复制链接]
马晓天 发布时间:2024-6-19 15:03
  STM32U0系列微控制器中的ULP(Ultra Low Power)UART接口设计用于在低功耗应用中实现串行通信。
" l* E# n7 I! {) e) |" v7 R" ^; s+ a$ {% |硬件特性:0 ^5 ?+ A  h8 @, l1 Q! l) \  W
   超低功耗模式支持:ULP UART具备在低功耗模式下保持唤醒源的能力,允许在微控制器处于低功耗状态下依然能够接收数据或触发中断,从而快速唤醒并处理通信事件,有助于降低系统平均功耗。
, U' J# V0 a3 T5 r3 s3 q3 T电源管理:ULP UART可能集成电源管理特性,如低电压检测、自动电源关断等,有助于在闲置时减少电流消耗。) v- m2 o1 l  s  n" `+ M7 U" s" |
专用低功耗引脚:某些型号的STM32U0可能提供专门针对低功耗优化的UART引脚,这些引脚在待机或睡眠模式下具有更低的漏电流,有助于降低整体系统功耗。
4 {' z# y/ I6 a, f) B软件配置:, u- {3 m) z1 u8 f6 l9 r5 U
1 波特率设置:根据实际通信需求选择合适的波特率。ULP UART可能支持较低的波特率选项,有利于在低功耗模式下降低通信时的瞬态电流。# o; R* C& S9 ~5 @. {
2 数据格式:配置数据位(通常是8位)、停止位(1或2位)、奇偶校验(无、奇校验、偶校验)等参数,确保与通信伙伴的设置一致。4 O. q% F, E' H
3 中断与DMA:
- S5 [$ H* m3 [! K   中断:启用接收/发送中断,允许微控制器在数据准备好或传输完成时被唤醒,而非持续轮询,有助于节能。确保在中断服务程序中快速  处理事件并返回低功耗状态。DMA:如果ULP UART支持,可以使用DMA(Direct Memory Access)进行数据传输,无需CPU干预,进一步降低功耗。尤其在批量数据传输时,DMA可以显著减少CPU唤醒次数。
: _2 s8 b4 ?( S" [4  低功耗模式切换:在进入低功耗模式前,确保正确配置UART的唤醒源(如空闲检测、接收数据可用等),并在唤醒后恢复正常的UART操作。
* g6 {# @- H& V( o# c0 }2 P6 B4 R功耗优化技巧:' M/ }! T. V6 n* `0 r
1 禁用未使用的功能:关闭不需要的UART功能(如硬件流控、校验等)以减少不必要的电流消耗。% G) I* X: _9 c
" T+ ?+ ^* z" P3 E2 e3 |9 ]4 C
2 节电模式:利用ULP UART的节电模式(如果支持),在数据传输间隙降低工作频率或电压,减小功耗。
' |$ H" C, R$ m& D: s3 唤醒阈值调整:某些ULP UART允许设置唤醒阈值,调整阈值可以平衡灵敏度与功耗,避免因噪声引起的误唤醒。
" {, l! C5 S7 x; M8 J1 R4 软件定时器:使用精确的软件定时器代替连续轮询,以定期检查UART状态或处理数据,减少CPU活动时间。
. p9 q5 t* m; J; O3 j1 J  a2 V$ p( C. ]/ A6 b
初始化:调用HAL_UART_Init()函数,设置UART参数(如波特率、数据格式等)。
+ G+ i& n, O  ^中断配置:开启相关中断(如接收中断),并编写对应的中断服务程序。
! v% Y6 |8 y, L. p# ]! TDMA配置(如果使用):配置DMA通道,关联到UART,并设置传输参数。
& V. h+ t4 z; E2 I发送/接收:使用HAL_UART_Transmit()、HAL_UART_Receive()或DMA相关函数进行数据传输。1 j0 i: V, V& O' N
调试与测试:) C$ a, O9 D* g$ g! J
555.jpg 0 P; K. C+ R: U
$ r0 v- F" }: a! L& J
# J6 t0 ~+ B* X) l8 a( g
MX_LPUART1_UART_Init初始化:; ]& U6 F) A8 n, \+ X" M* r, M

$ K3 p( H: h8 h( Z
  1. static void MX_LPUART1_UART_Init(void)
    & T, \/ E+ j, W1 e, m0 L* v, b
  2. {
    # k$ A% K; n8 o1 V/ _$ N( E
  3. , k% k5 p: g- a" m; v
  4. ' Z9 @& f. ~0 E5 I$ D
  5.   hlpuart1.Instance = LPUART1;
    ( E' V3 Y4 x* y/ g6 A
  6.   hlpuart1.Init.BaudRate = 115200;8 }: @, T5 b( R1 d/ E% c
  7.   hlpuart1.Init.WordLength = UART_WORDLENGTH_8B;
    : w  p: p, E/ G7 \: K, Y
  8.   hlpuart1.Init.StopBits = UART_STOPBITS_1;
    - j% `; I( B9 e& V. {% a
  9.   hlpuart1.Init.Parity = UART_PARITY_NONE;
      c! E4 J. R2 D* S# J$ Q) |/ g
  10.   hlpuart1.Init.Mode = UART_MODE_TX_RX;7 g. L8 ?% Z3 R; D- O% q+ x/ O# C/ l
  11.   hlpuart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
    ' {6 E2 Q! k2 z; ~4 w& O6 i9 N
  12.   hlpuart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
    8 v+ ?# i$ j% D
  13.   hlpuart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;, N6 P4 |1 u" H1 k- A) k: t: ^
  14.   hlpuart1.FifoMode = UART_FIFOMODE_DISABLE;. v" @" u) H( d# g
  15.   if (HAL_UART_Init(&hlpuart1) != HAL_OK)
    7 A) E& M+ X5 A9 n3 `1 {
  16.   {; Q3 U3 Z& _3 H0 o" c8 f
  17.     Error_Handler();
    9 {+ s' W4 V/ U* C$ M0 h
  18.   }0 C0 N, U7 g) s2 v1 x4 F
  19.   if (HAL_UARTEx_SetTxFifoThreshold(&hlpuart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
    0 u5 y, C- \4 g' O$ `0 H
  20.   {& {( e! o0 R2 `( F6 s
  21.     Error_Handler();4 E2 i: Y3 O. v9 m+ ~8 H  v( K9 A
  22.   }( `+ R) S  n# }5 n; r, D
  23.   if (HAL_UARTEx_SetRxFifoThreshold(&hlpuart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)7 ^+ B& x! |* w9 Z3 r
  24.   {/ z* @2 t. t: z1 u1 q
  25.     Error_Handler();
    0 f$ r8 W* o  b) r+ c/ x+ ^! D( f3 L0 B- S
  26.   }
    0 v/ e$ i. f6 w* w4 V0 \- r1 S" T
  27.   if (HAL_UARTEx_DisableFifoMode(&hlpuart1) != HAL_OK)
    ) K8 Y) C' Z% U
  28.   {
    . O4 F% |0 q* l: E( l, ~, m
  29.     Error_Handler();5 d2 I6 K* a9 {1 |+ B* W
  30.   }8 M5 ~3 t" {! t/ a: y
  31.   3 o5 @/ u! e+ z7 O: z6 A3 s
  32. }
复制代码
  W3 @& [/ z. L8 {4 ?- K/ A7 Q

% Q5 w& G1 q- w$ D
  1. static void MX_LPTIM1_Init(void)
    9 e6 \7 ?+ J) E( g- G! D. D9 f. Q
  2. {
    " J+ o* e, Z2 k. ]3 g5 z9 ^  ?6 p; {! O

  3. : h+ w% S; |, M- @1 h' ~% J- M
  4.   /* USER CODE BEGIN LPTIM1_Init 0 */9 p; D+ T+ Q$ [: V% N8 j7 o5 D

  5. $ V2 O6 C: w1 G# k0 M/ Z9 Q8 \
  6.   /* USER CODE END LPTIM1_Init 0 */
    9 h* |$ }9 |. ^: w0 v; B
  7. 1 t6 ^( h& S5 S1 |) a0 N; T5 e- L% F) W* s
  8.   /* USER CODE BEGIN LPTIM1_Init 1 */
    1 z6 e, E7 A% U$ E/ \: t, A

  9. ( ]% l0 Q" m3 E  D- D- y
  10.   /* USER CODE END LPTIM1_Init 1 */
    & ?- b# r* a/ U$ a
  11.   hlptim1.Instance = LPTIM1;
    $ f6 X% e) S4 q: ?1 x$ `5 J
  12.   hlptim1.Init.Clock.Source = LPTIM_CLOCKSOURCE_APBCLOCK_LPOSC;9 ?2 c! a+ J% ?" w. X
  13.   hlptim1.Init.Clock.Prescaler = LPTIM_PRESCALER_DIV1;4 G$ E4 x: T5 Z. y# d
  14.   hlptim1.Init.Trigger.Source = LPTIM_TRIGSOURCE_SOFTWARE;
    : {7 Q0 E! r; E* k- D3 m  E2 ^3 _
  15.   hlptim1.Init.Period = 65535;
    2 u7 R( e1 r; r9 z! ^/ @
  16.   hlptim1.Init.UpdateMode = LPTIM_UPDATE_IMMEDIATE;, q$ T/ f0 E# m7 i# V0 I7 ?8 V
  17.   hlptim1.Init.CounterSource = LPTIM_COUNTERSOURCE_INTERNAL;# E) D# a+ }' Y3 j1 a
  18.   hlptim1.Init.Input1Source = LPTIM_INPUT1SOURCE_GPIO;2 b7 T* m6 I$ W/ B, k
  19.   hlptim1.Init.Input2Source = LPTIM_INPUT2SOURCE_GPIO;5 h+ h* T7 p0 c! c  M
  20.   hlptim1.Init.RepetitionCounter = 0;
    7 @. O$ k) z6 |0 K# l5 [
  21.   if (HAL_LPTIM_Init(&hlptim1) != HAL_OK)2 d7 N. d: u. ~6 [: t" e- _
  22.   {
    9 @! e$ N, R2 {+ m+ |+ a
  23.     Error_Handler();$ Q+ w; [7 [; H& ^  h2 X
  24.   }- K, D) e& U) N& J3 Y' m* W: [
  25.   /* USER CODE BEGIN LPTIM1_Init 2 */7 r6 l4 ]+ P. x8 f: h
  26. ) p8 O- D1 F$ `- l" u" b; Q
  27.   /* USER CODE END LPTIM1_Init 2 */5 T0 T' d5 y; x# h
  28. # M3 e4 E9 w! r% n% O" C
  29. }
复制代码
4 a; m) w$ E2 f3 u

0 r( a  w- d( N$ s: L6 ^
, _1 D% D/ k9 y" a- ?4 P$ [这里可以选在HAL库 LL库
0 G$ k/ D& R5 L/ \- m 666.jpg
1 \, f" q: C" p7 ~! @0 Z; d3 M! {& C/ x: }1 d
  1. HAL_UART_Transmit_IT(&hlpuart1, (uint8_t*)aTxBuffer, TXBUFFERSIZE);4 s2 v0 {  J6 X% Z' i$ S$ [/ Z

  2. 1 A& j; v% s3 _3 H$ @
  3.    HAL_Delay(1000);
复制代码

7 j" u  o$ e6 g5 D8 `' p  A9 e9 N1 ~. p8 \5 ^; L* Y  }% ]5 G

& H+ H* D# w5 I5 R: ?1 M+ r运行如下:
# |/ J; H8 B4 \) V 7777.jpg
5 L9 {4 X! P+ P* F* b( m8 P; y& [) @4 G" N) o
3 x# {; a; k0 n( t
; d( x; U; ?: I' w
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 手机版