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

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

[复制链接]
马晓天 发布时间:2024-6-19 15:03
  STM32U0系列微控制器中的ULP(Ultra Low Power)UART接口设计用于在低功耗应用中实现串行通信。
1 v: `0 K' \9 q" ?4 X5 j3 C8 v9 V硬件特性:
# B. X& Q0 ]9 G( \   超低功耗模式支持:ULP UART具备在低功耗模式下保持唤醒源的能力,允许在微控制器处于低功耗状态下依然能够接收数据或触发中断,从而快速唤醒并处理通信事件,有助于降低系统平均功耗。
1 h6 C8 V) R6 a/ m: p电源管理:ULP UART可能集成电源管理特性,如低电压检测、自动电源关断等,有助于在闲置时减少电流消耗。0 m( Y$ B# C0 b. S4 G
专用低功耗引脚:某些型号的STM32U0可能提供专门针对低功耗优化的UART引脚,这些引脚在待机或睡眠模式下具有更低的漏电流,有助于降低整体系统功耗。
8 n* d- I, v1 ]; j8 D6 n, e软件配置:
8 N. b# X% P4 w1 波特率设置:根据实际通信需求选择合适的波特率。ULP UART可能支持较低的波特率选项,有利于在低功耗模式下降低通信时的瞬态电流。
. O9 n4 y$ p! n+ j- P2 数据格式:配置数据位(通常是8位)、停止位(1或2位)、奇偶校验(无、奇校验、偶校验)等参数,确保与通信伙伴的设置一致。
& @2 r, G3 k. H1 k9 i" E3 中断与DMA:
& ^, ^/ Q; w: k2 g2 z3 d   中断:启用接收/发送中断,允许微控制器在数据准备好或传输完成时被唤醒,而非持续轮询,有助于节能。确保在中断服务程序中快速  处理事件并返回低功耗状态。DMA:如果ULP UART支持,可以使用DMA(Direct Memory Access)进行数据传输,无需CPU干预,进一步降低功耗。尤其在批量数据传输时,DMA可以显著减少CPU唤醒次数。' g( r5 v0 p: J* L9 l
4  低功耗模式切换:在进入低功耗模式前,确保正确配置UART的唤醒源(如空闲检测、接收数据可用等),并在唤醒后恢复正常的UART操作。7 d' m4 Z( @( x" }4 m  Q. J
功耗优化技巧:
% ~2 d5 f% r4 m1 禁用未使用的功能:关闭不需要的UART功能(如硬件流控、校验等)以减少不必要的电流消耗。
0 E5 t3 g% j# h; K6 \4 ?6 ]" i8 {5 \" V- s
2 节电模式:利用ULP UART的节电模式(如果支持),在数据传输间隙降低工作频率或电压,减小功耗。. }9 q: d$ e4 J4 N
3 唤醒阈值调整:某些ULP UART允许设置唤醒阈值,调整阈值可以平衡灵敏度与功耗,避免因噪声引起的误唤醒。3 I9 f; l2 S  u1 i) f& ~# `/ D
4 软件定时器:使用精确的软件定时器代替连续轮询,以定期检查UART状态或处理数据,减少CPU活动时间。8 w8 H* \$ S8 f% G: ~

, ^3 y" @; a! H5 o初始化:调用HAL_UART_Init()函数,设置UART参数(如波特率、数据格式等)。  N, X: g$ V# R, N5 J# \9 s
中断配置:开启相关中断(如接收中断),并编写对应的中断服务程序。
  x' V3 z( i3 d0 O; x' w* gDMA配置(如果使用):配置DMA通道,关联到UART,并设置传输参数。% u9 }# S% q# ~0 _# i+ b! [
发送/接收:使用HAL_UART_Transmit()、HAL_UART_Receive()或DMA相关函数进行数据传输。
: _0 D' b6 i2 c1 G调试与测试:( ^' Y  |! B7 n1 W
555.jpg & V4 S4 h" D1 ~

# J2 k* i, \$ u+ d
% j5 G5 L$ W' h6 z' q9 L MX_LPUART1_UART_Init初始化:
0 s; h) G/ r! a& o; z$ ?9 {# x& I$ q) H( @
  1. static void MX_LPUART1_UART_Init(void)6 O* R. W, U2 t1 L4 D, w. x
  2. {
    - F7 _2 }0 E% {" i

  3. : N! o$ _4 H) {# T. v2 F

  4. ( E1 B: d6 K  F- k; P6 X9 g% y: Z8 k
  5.   hlpuart1.Instance = LPUART1;" u% M- y$ C" E8 a, c
  6.   hlpuart1.Init.BaudRate = 115200;
    ) Q& [% m& y% I2 t' g
  7.   hlpuart1.Init.WordLength = UART_WORDLENGTH_8B;
    1 F2 m6 z0 J% C+ t0 z
  8.   hlpuart1.Init.StopBits = UART_STOPBITS_1;; q7 p9 R% d! n, R
  9.   hlpuart1.Init.Parity = UART_PARITY_NONE;
    7 u% `; C% \0 p* h/ s8 X* A% m& X8 g
  10.   hlpuart1.Init.Mode = UART_MODE_TX_RX;; g- u: p: y5 Q5 h
  11.   hlpuart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
    : R- G  `' p! z% B6 l% l1 R
  12.   hlpuart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;. l) W" ?4 T8 m1 {
  13.   hlpuart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
    & d2 Y7 L* y  {$ w. I. h
  14.   hlpuart1.FifoMode = UART_FIFOMODE_DISABLE;5 ?5 K' c8 U1 Q, K( \4 n
  15.   if (HAL_UART_Init(&hlpuart1) != HAL_OK)
    9 B- s+ m% K. b. l
  16.   {
    2 U# S$ D$ D) R
  17.     Error_Handler();3 k$ W5 E2 @. b6 f
  18.   }
    8 x6 g" x5 ]! _! P6 i# f) Z( ^5 m6 ~- [
  19.   if (HAL_UARTEx_SetTxFifoThreshold(&hlpuart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
    # p4 [: ]6 l- ^8 ~& Y' Z
  20.   {+ @+ C, Z5 ?/ l
  21.     Error_Handler();
    ' J, P" I: E6 h$ X& ~9 G
  22.   }$ X0 M. O- d* Q3 q3 N7 ~
  23.   if (HAL_UARTEx_SetRxFifoThreshold(&hlpuart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
    , }, V  [: L' R
  24.   {% o! `0 u3 [% b$ v
  25.     Error_Handler();
    & n: t% T$ w( I1 x( J
  26.   }/ k2 l9 G  ], y; W. k
  27.   if (HAL_UARTEx_DisableFifoMode(&hlpuart1) != HAL_OK)
    ; F6 ?8 P7 T7 `4 M2 E
  28.   {0 u2 M+ T7 k4 A' Z4 n5 B2 l
  29.     Error_Handler();  E) o* m. x# H- q1 Q
  30.   }. ^/ ~: e+ ~: c* q$ Z9 f( k
  31.   
    6 N# m/ V" U- t0 {/ w
  32. }
复制代码

2 b/ O& R( |" ~
8 C& ?/ h+ A2 F0 \6 h
  1. static void MX_LPTIM1_Init(void)
    $ _- a4 S5 z$ H  l+ Y! f: I6 B
  2. {
    9 l/ P2 Z+ D. Z' y( O6 y

  3. 5 D' h6 ~0 h/ U% E; I
  4.   /* USER CODE BEGIN LPTIM1_Init 0 */" R" Y% h# \; s+ ]

  5. # M8 m% r$ d% m2 J+ S9 Q
  6.   /* USER CODE END LPTIM1_Init 0 */
    " ^8 ?! W- S& g% Z5 L" j/ G
  7. - C( i. n$ M1 O/ K
  8.   /* USER CODE BEGIN LPTIM1_Init 1 */
    2 ^- |  o( K6 C" T  R

  9. ! D- H( s, ^( y8 K# `3 ]8 B% k5 A
  10.   /* USER CODE END LPTIM1_Init 1 */
    ' n* I1 S8 ~7 ~/ s; M! d7 h4 C+ d
  11.   hlptim1.Instance = LPTIM1;
    ) U: {! h8 H) B; R: m+ p) `
  12.   hlptim1.Init.Clock.Source = LPTIM_CLOCKSOURCE_APBCLOCK_LPOSC;
    / m$ b' G0 `" W
  13.   hlptim1.Init.Clock.Prescaler = LPTIM_PRESCALER_DIV1;% g; K2 ^$ [$ F/ v, y' e6 h7 t
  14.   hlptim1.Init.Trigger.Source = LPTIM_TRIGSOURCE_SOFTWARE;4 a9 R3 K4 D' V  Z4 o
  15.   hlptim1.Init.Period = 65535;
    " w" j  C  W' V' c6 X
  16.   hlptim1.Init.UpdateMode = LPTIM_UPDATE_IMMEDIATE;
    & @# {  D3 Q- K0 s; q9 _0 C
  17.   hlptim1.Init.CounterSource = LPTIM_COUNTERSOURCE_INTERNAL;
    2 V  `1 Y# o+ y
  18.   hlptim1.Init.Input1Source = LPTIM_INPUT1SOURCE_GPIO;% |2 M( C0 O' z2 X- l) K
  19.   hlptim1.Init.Input2Source = LPTIM_INPUT2SOURCE_GPIO;
    8 c4 E, X- p$ i" c6 g! k( S0 _% b
  20.   hlptim1.Init.RepetitionCounter = 0;; i+ [; N# @- ~
  21.   if (HAL_LPTIM_Init(&hlptim1) != HAL_OK)
    - K8 b& j7 M5 Z7 C2 x* q
  22.   {
    ( H% B1 P6 x8 K4 U* ~5 J" _; S
  23.     Error_Handler();
    # B" g1 C! \% d# j" ~# J) B
  24.   }* Y4 |" K: O1 s. ]
  25.   /* USER CODE BEGIN LPTIM1_Init 2 */
    6 G2 _/ g/ w7 W
  26. 9 U% g/ L% x. l. Q9 c
  27.   /* USER CODE END LPTIM1_Init 2 */
    ) v8 r: S' q0 w. _1 {

  28. - k- w& y/ m6 P3 r. Z7 _" j
  29. }
复制代码
2 L5 c. [7 S" D" T  k! @0 v1 P5 ^
: s. ~5 f7 w8 m2 D) s5 _

8 R  w, u2 Q' P7 X这里可以选在HAL库 LL库: N6 O+ }1 |" v0 ]( R0 Y
666.jpg $ M- A2 d" F" r. `& D& }; c) S

/ A# j9 J- w- P
  1. HAL_UART_Transmit_IT(&hlpuart1, (uint8_t*)aTxBuffer, TXBUFFERSIZE);
    , Z0 ?! C8 s8 Y* i9 N, u/ e7 W
  2. " c2 E5 O$ i( J9 `  o% ], G
  3.    HAL_Delay(1000);
复制代码
" n7 l- C, h  b! z
, P1 }7 K3 x  e  Z8 u9 z( ~

5 C/ @0 e! [  G+ w运行如下:- Q3 P8 c7 g( _! Y, k( h/ p
7777.jpg 5 ~0 \: h" P# |/ Q

! v1 m- z- v: u( l3 D; i0 U# g) A3 E& _8 k
+ C6 W- S/ o+ \9 w1 B- E& Y
QQ截图20240619150835.jpg
QQ截图20240619150835.jpg
收藏 评论0 发布时间:2024-6-19 15:03

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版