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

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

[复制链接]
马晓天 发布时间:2024-6-19 15:03
  STM32U0系列微控制器中的ULP(Ultra Low Power)UART接口设计用于在低功耗应用中实现串行通信。
硬件特性:
   超低功耗模式支持:ULP UART具备在低功耗模式下保持唤醒源的能力,允许在微控制器处于低功耗状态下依然能够接收数据或触发中断,从而快速唤醒并处理通信事件,有助于降低系统平均功耗。
电源管理:ULP UART可能集成电源管理特性,如低电压检测、自动电源关断等,有助于在闲置时减少电流消耗。
专用低功耗引脚:某些型号的STM32U0可能提供专门针对低功耗优化的UART引脚,这些引脚在待机或睡眠模式下具有更低的漏电流,有助于降低整体系统功耗。
软件配置:
1 波特率设置:根据实际通信需求选择合适的波特率。ULP UART可能支持较低的波特率选项,有利于在低功耗模式下降低通信时的瞬态电流。
2 数据格式:配置数据位(通常是8位)、停止位(1或2位)、奇偶校验(无、奇校验、偶校验)等参数,确保与通信伙伴的设置一致。
3 中断与DMA:
   中断:启用接收/发送中断,允许微控制器在数据准备好或传输完成时被唤醒,而非持续轮询,有助于节能。确保在中断服务程序中快速  处理事件并返回低功耗状态。DMA:如果ULP UART支持,可以使用DMA(Direct Memory Access)进行数据传输,无需CPU干预,进一步降低功耗。尤其在批量数据传输时,DMA可以显著减少CPU唤醒次数。
4  低功耗模式切换:在进入低功耗模式前,确保正确配置UART的唤醒源(如空闲检测、接收数据可用等),并在唤醒后恢复正常的UART操作。
功耗优化技巧:
1 禁用未使用的功能:关闭不需要的UART功能(如硬件流控、校验等)以减少不必要的电流消耗。

2 节电模式:利用ULP UART的节电模式(如果支持),在数据传输间隙降低工作频率或电压,减小功耗。
3 唤醒阈值调整:某些ULP UART允许设置唤醒阈值,调整阈值可以平衡灵敏度与功耗,避免因噪声引起的误唤醒。
4 软件定时器:使用精确的软件定时器代替连续轮询,以定期检查UART状态或处理数据,减少CPU活动时间。

初始化:调用HAL_UART_Init()函数,设置UART参数(如波特率、数据格式等)。
中断配置:开启相关中断(如接收中断),并编写对应的中断服务程序。
DMA配置(如果使用):配置DMA通道,关联到UART,并设置传输参数。
发送/接收:使用HAL_UART_Transmit()、HAL_UART_Receive()或DMA相关函数进行数据传输。
调试与测试:
555.jpg


MX_LPUART1_UART_Init初始化:

  1. static void MX_LPUART1_UART_Init(void)
  2. {


  3.   hlpuart1.Instance = LPUART1;
  4.   hlpuart1.Init.BaudRate = 115200;
  5.   hlpuart1.Init.WordLength = UART_WORDLENGTH_8B;
  6.   hlpuart1.Init.StopBits = UART_STOPBITS_1;
  7.   hlpuart1.Init.Parity = UART_PARITY_NONE;
  8.   hlpuart1.Init.Mode = UART_MODE_TX_RX;
  9.   hlpuart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  10.   hlpuart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  11.   hlpuart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  12.   hlpuart1.FifoMode = UART_FIFOMODE_DISABLE;
  13.   if (HAL_UART_Init(&hlpuart1) != HAL_OK)
  14.   {
  15.     Error_Handler();
  16.   }
  17.   if (HAL_UARTEx_SetTxFifoThreshold(&hlpuart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
  18.   {
  19.     Error_Handler();
  20.   }
  21.   if (HAL_UARTEx_SetRxFifoThreshold(&hlpuart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
  22.   {
  23.     Error_Handler();
  24.   }
  25.   if (HAL_UARTEx_DisableFifoMode(&hlpuart1) != HAL_OK)
  26.   {
  27.     Error_Handler();
  28.   }
  29.   
  30. }
复制代码


  1. static void MX_LPTIM1_Init(void)
  2. {

  3.   /* USER CODE BEGIN LPTIM1_Init 0 */

  4.   /* USER CODE END LPTIM1_Init 0 */

  5.   /* USER CODE BEGIN LPTIM1_Init 1 */

  6.   /* USER CODE END LPTIM1_Init 1 */
  7.   hlptim1.Instance = LPTIM1;
  8.   hlptim1.Init.Clock.Source = LPTIM_CLOCKSOURCE_APBCLOCK_LPOSC;
  9.   hlptim1.Init.Clock.Prescaler = LPTIM_PRESCALER_DIV1;
  10.   hlptim1.Init.Trigger.Source = LPTIM_TRIGSOURCE_SOFTWARE;
  11.   hlptim1.Init.Period = 65535;
  12.   hlptim1.Init.UpdateMode = LPTIM_UPDATE_IMMEDIATE;
  13.   hlptim1.Init.CounterSource = LPTIM_COUNTERSOURCE_INTERNAL;
  14.   hlptim1.Init.Input1Source = LPTIM_INPUT1SOURCE_GPIO;
  15.   hlptim1.Init.Input2Source = LPTIM_INPUT2SOURCE_GPIO;
  16.   hlptim1.Init.RepetitionCounter = 0;
  17.   if (HAL_LPTIM_Init(&hlptim1) != HAL_OK)
  18.   {
  19.     Error_Handler();
  20.   }
  21.   /* USER CODE BEGIN LPTIM1_Init 2 */

  22.   /* USER CODE END LPTIM1_Init 2 */

  23. }
复制代码



这里可以选在HAL库 LL库
666.jpg

  1. HAL_UART_Transmit_IT(&hlpuart1, (uint8_t*)aTxBuffer, TXBUFFERSIZE);

  2.    HAL_Delay(1000);
复制代码



运行如下:
7777.jpg



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 手机版