stm32f103rtc stm32cube
时间: 2025-01-19 18:54:47 浏览: 42
### 如何使用 STM32Cube 开发 STM32F103 的 RTC 功能
#### 配置环境与工具链
为了在STM32F103C8T6上利用STM32CubeIDE配置并启用RTC功能,需安装对应版本的STM32CubeIDE, 版本号为V1.14.0[^1]。
#### 取消备份区域(BKP)写保护
由于RTC模块位于后备区域内,在首次设置或更改其参数前,必须解除对该区写的锁定状态。这一步骤至关重要,因为默认情况下该区域处于受保护的状态以防误操作引起的数据丢失。通过编程方式清除`PWR_CR`寄存器中的相应位来完成此动作[^3]。
#### 初始化RTC外设
初始化过程涉及多个方面,包括但不限于设定时基源、预分频系数以及校准值等。对于STM32系列微控制器而言,通常会选择LSE(低速外部振荡器)作为RTC的工作频率来源之一;而APB1总线上的定时器则可能被用来产生更精确的时间间隔信号。此外,还需要调整RTC_CRL寄存器里的PRESCALER字段以适应不同的应用场景需求。
#### 设置初始时间和日期
一旦硬件层面准备就绪,则可通过软件手段向RTC内部存储单元输入具体的年月日及时刻信息。这部分工作可以通过调用库函数如`HAL_RTC_SetTime()` 和 `HAL_RTC_SetDate()` 来简化实现流程。值得注意的是,所有这些变更都应在确保已成功解锁了BKP的前提下执行。
#### 启动RTC服务
最后也是最重要的环节就是激活RTC本身的服务了——即将使能标志位置高从而开启计数进程。此时如果一切正常的话,即使整个系统进入低功耗模式甚至完全断电重启之后,只要给定足够的电力支持(例如内置锂电池),RTC依旧能够持续稳定地运作下去。
```c
// 解锁 BKP 域以便于后续的操作
__HAL_RCC_PWR_CLK_ENABLE();
HAL_PWR_EnableBkUpAccess();
// 选择 LSI 或者 LSE 作为 RTC 时钟源
RCC_OscInitTypeDef RCC_OscInitStruct;
memset(&RCC_OscInitStruct, 0, sizeof(RCC_OscInitStruct));
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){
Error_Handler();
}
// 打开 RTC 外设电源供应
__HAL_RCC_BKP_CLK_ENABLE();
__HAL_RCC_RTC_ENABLE();
// 设定当前时间为指定值
RTC_TimeTypeDef sTime = {0};
sTime.Hours = 17; // 小时部分
sTime.Minutes = 30; // 分钟部分
sTime.Seconds = 0; // 秒数部分
if(HAL_RTC_SetTime(&hrtc,&sTime,FORMAT_BIN)!= HAL_OK){
Error_Handler();
}
```
阅读全文
相关推荐


















