cube ide stm32F103 RTC
时间: 2025-01-15 16:08:25 浏览: 41
### 配置和使用STM32F103上的RTC
#### 使用CubeMX初始化项目
为了在STM32F103微控制器上配置RTC,首先需要通过STM32CubeMX软件创建一个新的工程。启动STM32CubeMX并选择目标板型号为STM32F103VET6或其他适用版本[^3]。
设置时钟源对于RTC至关重要。通常推荐采用外部低速晶振(LSE),频率为32.768kHz作为RTC时基信号。这可以通过在Clock Configuration页面中启用LSE选项来完成。当使用LSE 32.768KHz时,CubeIDE配置默认即可满足需求;分频设定为(127+1)\*(255+1)=32768, 正好对应一秒周期[^5]。
#### 初始化代码生成
完成硬件配置之后,在中间件(Middlewares)标签页下找到并勾选RTT/RTC库支持。接着点击GENERATE CODE按钮让工具自动生成初始化框架文件以及必要的驱动程序接口函数声明[^1]。
#### 编写应用程序逻辑
打开生成好的工程项目,在`main.c`文件内添加如下C语言片段用于开启RTC功能:
```c
/* USER CODE BEGIN Includes */
#include "stm32f1xx_hal.h"
/* USER CODE END Includes */
RTC_HandleTypeDef hrtc;
int main(void){
/* ...其他初始化代码... */
MX_RTC_Init(); // Initialize the RTC peripheral
HAL_Delay(10); // Wait a bit before accessing RTC registers
/* Set current time and date */
RTC_TimeTypeDef sTime = {0};
RTC_DateTypeDef DateToUpdate = {0};
sTime.Hours = 14;
sTime.Minutes = 30;
sTime.Seconds = 0;
DateToUpdate.WeekDay = RTC_WEEKDAY_MONDAY;
DateToUpdate.Month = RTC_MONTH_JANUARY;
DateToUpdate.Date = 1;
DateToUpdate.Year = 21;
if(HAL_OK != HAL_RTC_SetTime(&hrtc,&sTime,RTC_FORMAT_BIN)){
Error_Handler();
}
if(HAL_OK != HAL_RTC_SetDate(&hrtc,&DateToUpdate,RTC_FORMAT_BIN)){
Error_Handler();
}
while (1){
/* Infinite loop */
}
}
```
上述代码实现了基本的时间日期设置操作,并提供了错误处理机制以确保任何异常情况都能被及时捕获。
#### 中断服务例程(ISR)
如果希望利用秒级更新事件触发某些特定行为,则可以在`stm32f1_it.c`里定义相应的ISR入口点:
```c
void RTC_IRQHandler(void)
{
/* Enter Critical Section */
__HAL_RCC_PWR_CLK_ENABLE();
if (__HAL_RTC_ALARM_GET_FLAG(&hrtc, RTC_FLAG_ALRAF)!= RESET){
// Handle alarm A interrupt here...
/* Clear the Alarm flag */
__HAL_RTC_ALARM_CLEAR_FLAG(&hrtc, RTC_FLAG_ALRAF);
}else if(__HAL_RTC_SECOND_GET_FLAG(&hrtc, RTC_FLAG_SEC) != RESET){
// Process second update event...
/* Clear Second Flag */
__HAL_RTC_SECOND_CLEAR_FLAG(&hrtc, RTC_FLAG_SEC);
}
/* Leave Critical Section */
__HAL_RCC_PWR_CLK_DISABLE();
}
```
这段代码展示了如何响应由RTC产生的两种不同类型的中断——闹钟A报警与每秒钟计数溢出通知。注意每次处理完毕后都需要清除对应的标志位以便下次正常工作。
阅读全文
相关推荐


















