1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > STM32CubeMX学习笔记(14)——RTC实时时钟使用

STM32CubeMX学习笔记(14)——RTC实时时钟使用

时间:2018-08-16 20:01:14

相关推荐

STM32CubeMX学习笔记(14)——RTC实时时钟使用

一、RTC简介

实时时钟(RTC)是一个独立的 BCD 定时器/计数器。 RTC 提供具有可编程闹钟中断功能的日历时钟/日历。RTC 还包含具有中断功能的周期性可编程唤醒标志。两个 32 位寄存器包含二进码十进数格式 (BCD) 的秒、分钟、小时( 12 或 24 小时制)、星期几、日期、月份和年份。此外,还可提供二进制格式的亚秒值。系统可以自动将月份的天数补偿为 28、29(闰年)、30 和 31 天。只要芯片的备用电源一直供电,RTC上的时间会一直走。

STM32 的 RTC 外设(Real Time Clock),实质是一个掉电后还继续运行的定时器。从定时器的角度来说,相对于通用定时器 TIM 外设,它十分简单,只有很纯粹的计时和触发中断的功能;但从掉电还继续运行的角度来说,它却是 STM32 中唯一一个具有如此强大功能的外设。所以 RTC 外设的复杂之处并不在于它的定时功能,而在于它掉电还继续运行的特性。在主电源 VDD有效的情况下(待机),RTC 还可以配置闹钟事件使 STM32 退出待机模式。

二、新建工程

1. 打开 STM32CubeMX 软件,点击“新建工程”

2. 选择 MCU 和封装

3. 配置时钟

RCC 设置,选择 HSE(外部高速时钟) 为 Crystal/Ceramic Resonator(晶振/陶瓷谐振器)

开启 LSE(外部低速时钟) 为 Crystal/Ceramic Resonator(晶振/陶瓷谐振器)

选择 Clock Configuration,配置系统时钟 SYSCLK 为 72MHz

修改 HCLK 的值为 72 后,输入回车,软件会自动修改所有配置

4. 配置调试模式

非常重要的一步,否则会造成第一次烧录程序后续无法识别调试器

SYS 设置,选择 Debug 为 Serial Wire

三、RTC

3.1 选择时钟

选择 Clock Configuration,RTC 时钟选择为外部低速晶振(LSE),频率为 32.768KHz。

RTC 设备因为其独特的运行方式(即掉电依旧运行)使用 HSE 分频时钟或者 LSI 的时候,在主电源 VDD 掉电的情况下,这两个时钟来源都会受到影响,资源消耗太大,小小的纽扣电池根本吃不消。没法保证 RTC 正常工作.所以 RTC 一般都时钟低速外部时钟 LSE。

3.2 参数配置

Timers中选择RTC设置,并勾选Activate Clock Source激活时钟源,勾选Activate Calendar激活万年历。

RTC OUT:Disable(是否使能 tamper(PC13)引脚上输出校正的秒脉冲时钟)Tamper:不勾选(是否使能tamper(PC13)引脚作为入侵检测功能)

RTC校验功能,使能侵入检测功能。RTC时钟经64分频输出到侵入检测引脚TAMPER上

当 TAMPER引脚上的信号从 0变成1或者从 1变成 0(取决于备份控制寄存器BKP_CR的 TPAL位),会产生一个侵入检测事件。侵入检测事件将所有数据备份寄存器内容清除。

Parameter Settings进行具体参数配置。

Calendar Time

Data Format(日期格式):BCD data format

HAL库是否存在BUG待验证

Hours(小时)Minutes(分钟)Seconds(秒)

Calendat Date
Week Day(星期)Month(月份)Date(日期)Year(年份)

3.3 生成代码

输入项目名和项目路径

选择应用的 IDE 开发环境 MDK-ARM V5

每个外设生成独立的’.c/.h’文件

不勾:所有初始化代码都生成在 main.c

勾选:初始化代码生成在对应的外设文件。 如 GPIO 初始化代码生成在 gpio.c 中。

点击 GENERATE CODE 生成代码

3.4 添加全局变量

main.c头部添加 RTC 相关结构体GetDataGetTime

/* Private variables ---------------------------------------------------------*/RTC_HandleTypeDef hrtc;UART_HandleTypeDef huart1;/* USER CODE BEGIN PV */RTC_DateTypeDef GetData; //获取日期结构体RTC_TimeTypeDef GetTime; //获取时间结构体/* USER CODE END PV */

3.5 添加读取时间函数

在while循环中添加:

/*** @brief The application entry point.* @retval int*/int main(void){/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_USART1_UART_Init();MX_RTC_Init();/* USER CODE BEGIN 2 *//* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* Get the RTC current Time */HAL_RTC_GetTime(&hrtc, &GetTime, RTC_FORMAT_BIN);/* Get the RTC current Date */HAL_RTC_GetDate(&hrtc, &GetData, RTC_FORMAT_BIN);/* Display date Format : yy/mm/dd */printf("%02d/%02d/%02d\r\n",2000 + GetData.Year, GetData.Month, GetData.Date);/* Display time Format : hh:mm:ss */printf("%02d:%02d:%02d\r\n",GetTime.Hours, GetTime.Minutes, GetTime.Seconds);printf("\r\n");HAL_Delay(1000);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */}

3.6 查看打印

串口打印功能查看 STM32CubeMX学习笔记(6)——USART串口使用

四、注意事项

用户代码要加在USER CODE BEGIN NUSER CODE END N之间,否则下次使用 STM32CubeMX 重新生成代码后,会被删除。

• 由 Leung 写于 年 2 月 4 日

• 参考:STM32CubeMX系列教程13:实时时钟(RTC)

【STM32】HAL库 STM32CubeMX教程十三—RTC时钟

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。