[STM32L0] RTC STOP 外部唤醒

[复制链接]
 楼主| 梦想 发表于 2025-7-18 10:45 | 显示全部楼层 |阅读模式
#有奖活动#  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

tpgf 发表于 2025-7-27 10:47 | 显示全部楼层
在RCC配置中优先选择外部32.768kHz晶体作为RTC时钟输入,确保高精度计时
小夏天的大西瓜 发表于 2025-7-27 22:11 | 显示全部楼层
在RCC配置中优先选择外部32.768kHz晶体作为RTC时钟输入
您需要登录后才可以回帖 登录 | 注册

本版积分规则

25

主题

124

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部