RTC STOP 外部唤醒
#有奖活动#RTC,外部32.768, STOP唤醒,内部主频4M, 通过更改串口来的任意秒数据(或者不做串口这步,只要变量设定),假设数据是2800秒,定时唤醒。芯片为STM32L051,求大佬完整工程代码。 WX: ufobestzhao 有偿 支持通过变量设置定时时间(示例为 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]