前言:最近对STM32U083的进行一个系统的学习,今天和大家分享一下低功耗定时器1的学习;
STM32U083存在基本定时器:定时器6,定时器7,高级定时器:定时器1和低功耗的定时器:UPLTime1等等,今天就和大家分享一下低功耗定时器的学习;

首先简单介绍一下低功耗的定时器:
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软件配置截图如下:

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

四:软件最主要代码如下:
/**
* @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 */
}五、测试实物图片如下:

我要赚赏金
