梦想 发表于 2025-7-18 10:45

RTC STOP 外部唤醒

#有奖活动#RTC,外部32.768, STOP唤醒,内部主频4M, 通过更改串口来的任意秒数据(或者不做串口这步,只要变量设定),假设数据是2800秒,定时唤醒。芯片为STM32L051,求大佬完整工程代码。

梦想 发表于 2025-7-18 10:48

WX: ufobestzhao 有偿

kzlzqi 发表于 2025-7-25 15:28

支持通过变量设置定时时间(示例为 2800 秒)

#include "stm32l0xx_hal.h"
#include "stdio.h"

/* 全局变量定义 */
RTC_HandleTypeDef hrtc;
UART_HandleTypeDef huart2;

// 定时唤醒时间(单位:秒),可修改此值设置不同定时
uint32_t WakeUpSeconds = 2800;

/* 函数声明 */
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART2_UART_Init(void);
static void MX_RTC_Init(void);
void RTC_WakeUp_Config(uint32_t Seconds);
void Enter_STOP_Mode(void);

int main(void) {
/* 初始化HAL库 */
HAL_Init();

/* 配置系统时钟 */
SystemClock_Config();

/* 初始化外设 */
MX_GPIO_Init();
MX_USART2_UART_Init();
MX_RTC_Init();

/* 打印初始信息 */
printf("STM32L051 RTC WakeUp Demo\r\n");
printf("WakeUp Time: %d seconds\r\n", WakeUpSeconds);

while (1) {
    /* 配置RTC唤醒定时器 */
    RTC_WakeUp_Config(WakeUpSeconds);

    /* 进入STOP模式 */
    printf("Entering STOP mode...\r\n");
    Enter_STOP_Mode();

    /* 从STOP模式唤醒后执行 */
    printf("Woken up from STOP mode!\r\n");

    /* 延时一段时间(可选) */
    HAL_Delay(1000);
}
}

/**
* @brief 配置系统时钟:内部HSI 4MHz作为系统时钟
*/
void SystemClock_Config(void) {
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

/* 配置HSI振荡器(内部4MHz) */
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;// 不使用PLL
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
    Error_Handler();
}

/* 配置系统时钟源 */
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;// 内部4MHz作为系统时钟
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;      // AHB

页: [1]
查看完整版本: RTC STOP 外部唤醒