这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » NUCLEO-U083RC学习历程8-使用低功耗定时器产生PWM

共1条 1/1 1 跳转至

NUCLEO-U083RC学习历程8-使用低功耗定时器产生PWM

助工
2024-11-09 15:17:21     打赏

前言:最近对STM32U083的进行一个系统的学习,今天和大家分享一下低功耗定时器1的学习;

STM32U083存在基本定时器:定时器6,定时器7,高级定时器:定时器1和低功耗的定时器:UPLTime1等等,今天就和大家分享一下低功耗定时器的学习;

image.png

首先简单介绍一下低功耗的定时器:

STM32U083共计提供三个低功耗定时器,LPTIM1、LPTIM2和LPTIM3。这些定时器具有独立的时钟源,并可以在系统处于低功耗模式(如Stop模式)时保持运行状态,从而能够将系统从低功耗状态唤醒。

低功耗定时器的主要特性:

1、超低功耗:LPTIM因其设计上的优化,在低电压、低频率条件下运行时能够消耗极小的电流,这对于电池供电的设备尤为重要。

2、独立时钟源:LPTIM支持多种时钟源,包括内部LSE、LSI、HSI16或APB时钟,以及外部通过LPTIM输入的时钟。这种灵活性使得LPTIM能够适应不同的应用场景和需求。

3、丰富的配置选项:LPTIM提供了多种配置选项,如连续/一次性模式、软件/硬件输入触发器、可选的时钟源等。这些配置选项使得LPTIM能够生成满足各种需求的PWM波形。

4、PWM生成能力:通过配置LPTIM的相关寄存器,可以生成具有特定周期和占空比的PWM波形。这对于需要精确控制输出功率的应用场景非常有用。

低功耗定时器产成PWM的基本步骤:

1、选择ULP定时器:确定系统中支持ULP模式的定时器资源,并设置定时器为PWM工作模式。

2、配置定时器参数:配置定时器的计数器、比较寄存器以及相关的控制位,以使其能够按照预定的时钟源频率进行递增计数,并在特定计数值处触发状态切换。

3、确定PWM周期和占空比:通过设置定时器的预分频系数和计数上限(周期寄存器值)来确定PWM波形的周期。通过配置比较寄存器的值来确定占空比。

4、映射PWM输出通道:将ULP定时器的PWM输出通道映射到相应的GPIO引脚,并确保这些引脚被配置为复用功能模式。

5、启动定时器:启动ULP定时器并使能PWM输出。此时,定时器开始按照设定的参数进行计数,并在达到比较值时切换PWM输出状态,形成所需占空比的PWM波形。

三、STM32cube软件配置截图如下:

image.png

使用PB3引脚,作为PWM输出的引脚

image.png

四:软件最主要代码如下:

/**
  * @brief LPTIM1 Initialization Function
  * @param None
  * @retval None
  */
static void MX_LPTIM1_Init(void)
{

  /* USER CODE BEGIN LPTIM1_Init 0 */
	LPTIM_OC_ConfigTypeDef sConfig1 = {0};
  /* USER CODE END LPTIM1_Init 0 */

  /* USER CODE BEGIN LPTIM1_Init 1 */

  /* USER CODE END LPTIM1_Init 1 */
  hlptim1.Instance = LPTIM1;
  hlptim1.Init.Clock.Source = LPTIM_CLOCKSOURCE_APBCLOCK_LPOSC;
  hlptim1.Init.Clock.Prescaler = LPTIM_PRESCALER_DIV1;
  hlptim1.Init.Trigger.Source = LPTIM_TRIGSOURCE_SOFTWARE;
  hlptim1.Init.Period = 10000;
  hlptim1.Init.UpdateMode = LPTIM_UPDATE_IMMEDIATE;
  hlptim1.Init.CounterSource = LPTIM_COUNTERSOURCE_INTERNAL;
  hlptim1.Init.Input1Source = LPTIM_INPUT1SOURCE_GPIO;
  hlptim1.Init.Input2Source = LPTIM_INPUT2SOURCE_GPIO;
  hlptim1.Init.RepetitionCounter = 0;
  if (HAL_LPTIM_Init(&hlptim1) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN LPTIM1_Init 2 */
  sConfig1.Pulse = 5000;
  sConfig1.OCPolarity = LPTIM_OCPOLARITY_HIGH;
  if (HAL_LPTIM_OC_ConfigChannel(&hlptim1, &sConfig1, LPTIM_CHANNEL_3) != HAL_OK)
  {
    Error_Handler();
  }

  if (HAL_LPTIM_PWM_Start(&hlptim1, LPTIM_CHANNEL_3) != HAL_OK)
  { 
    Error_Handler();
  }
  /* USER CODE END LPTIM1_Init 2 */

}

五、测试实物图片如下:

image.png








关键词: NUCLEO-U083RC     LPTIM1     产生     P    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]