RTC(Real TIme Clock)是实时时钟的意思,它其实和TIM有点相似,也是运用计数的原理,挑选RTC时钟源,再进行分频,抵达计数的意图。
该文首要叙述关于RTC的秒中止功用,这个功用相似SysTIck体系滴答的功用。RTC秒中止功用其实是每计数一次就中止一次。留意,这儿所说的秒中止并非一定是一秒的时刻,它是由RTC时钟源和分频值决议的“秒”的时刻,当然也是能够做到1秒钟中止一次。
本文章供给的实例工程,其试验作用是:
主函数距离0.5秒LED改变一次;
秒中止一次打印数据“RTC Sec.。.”;
也便是LED改变一次,串口打印一次数据“RTC Sec.。.”
扩展部分的功用RTC计数:能够完成RTC闹钟,本文将供给实例工程源代码供咱们下载学习。
Ⅱ、实例工程下载
笔者针对于初学者供给的例程都是去掉了许多不必要的功用,精简了官方的代码,对初学者一看就了解,以简单明了的工程供咱们学习。
笔者供给的实例工程都是在板子上经过屡次测验并没有问题才上传至360云盘,欢迎下载测验、参照学习。
供给下载的软件工程是STM32F103ZE的,但F1其他类型也适用(适用F1其他类型: 重视微信,回复“修正类型”)。
STM32F10x_RTC闹钟实例源代码工程:
https://yunpan.cn/cBbpu3gIGK38a 拜访暗码 05da
STM32F10x_RTC秒中止实例源代码工程:
https://yunpan.cn/cBbpPnhYbXR9x拜访暗码 561f
STM32F1材料:
https://yunpan.cn/crBUdUGdYKam2 拜访暗码 ca90
Ⅲ、原理描绘
以笔者个人学习阅历来说,想要把握其真实原理,最好仍是检查参考手册(现在有许多都翻译为中文了),里边模块的框图,从框图中大约就能够看到该模块有些什么功用及其作业的原理。
RTC框图:
从上面体系框图来剖析“RTC秒中止”的原理:
1、RTC时钟源,总共有三类:
RCC_RTCCLKSource_LSE
RCC_RTCCLKSource_LSI
RCC_RTCCLKSource_HSE_Div128
本文实例代码是:RCC_RTCCLKConfig(RCC_RTCCLKSource_HSE_Div128);
运用“RCC_RTCCLKSource_HSE_Div128”作为时钟源(高速时钟源),也便是外部高速时钟的128分频,也便是每秒8M/128(62500)个脉冲;
当然,咱们也能够挑选别的两个时钟源,也便是运用低速时钟源,一般应用在RTC闹钟可RTC日历等都运用低速时钟源。
2、RTC分频:
本文实例代码是:RTC_SetPrescaler(62500);
这个值是和上面对应的,由于咱们这儿是完成真实的1秒钟中止一次。
3、RTC中止:
RTC中止有三种:
RTC_IT_SEC秒中止
RTC_IT_ALR闹钟中止
RTC_IT_OW(计数)溢出中止
本文实例是:RTC_ITConfig(RTC_IT_SEC, ENABLE);
使能RTC_IT_SEC秒中止。
再次着重:
这儿的“秒中止”是概念上的秒中止,它的中止距离时刻是依据你挑选的时钟源和分频值决议的,并非真实的1秒钟中止一次。
咱们能够试着将源代码中的分频值该62500的一半31250,能够看得出来,秒中止的距离时刻为0.5秒(请自行修正试验测验)。
Ⅳ、源代码剖析
笔者以F1规范外设库(一起也主张初学者运用官方的规范外设库)为根底树立的工程,首要以库的办法来叙述(若您的F1芯片与供给工程不一样,可微信回复“修正类型”)。
下面将叙述关于“RTC秒中止”重要的、简单弄错的几点:
1.RCC时钟源
该函数坐落bsp.c文件下面;
RCC是许多初学者,乃至现已作业的朋友简单遗失的当地,有许多朋友觉得它运用的外设不正常,很大部分是没有装备RCC导致的。
要点留意:
A.外设RCC时钟的装备要在其外设初始化的前面;
B.匹配对应时钟。
比方:RCC_APB2外设不要装备在RCC_APB1时钟里边
【如:RCC_APB1PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);这样能编译经过,但这是过错的代码】
2. RTC秒中止装备
该函数坐落rtc.c文件下面;
该函数请结合参考手册(框图和寄存器)了解。
留意4点:
A.使能后备区域:PWR_BackupAccessCmd(ENABLE);
从体系框图能够看见RTC有阴影部分,其实这部分便是后备区域。因而,需求使能,这也是为什么上面需求装备RCC时钟的原因。
B.挑选RTC时钟源:RCC_RTCCLKConfig(RCC_RTCCLKSource_HSE_Div128);
在原理描绘中说了,RTC时钟源有三种:
RCC_RTCCLKSource_LSE
RCC_RTCCLKSource_LSI
RCC_RTCCLKSource_HSE_Div128
能够在源代码中检查其参数,也是有3中能够挑选。
C.使能RTC闹钟中止:RTC_ITConfig(RTC_IT_SEC, ENABLE);
RTC有三类中止:
RTC_IT_SEC秒中止
RTC_IT_ALR闹钟中止
RTC_IT_OW(计数)溢出中止
我供给的拓宽功用“RTC闹钟”便是运用闹钟中止,能够下载实例工程检查源代码。
D.RTC分频:RTC_SetPrescaler(62500);
咱们是为了得到真实的1秒钟中止一次,所以这儿的值是62500 = 8M/128,这样才干刚好1秒中止一次。
3. NVIC装备
该函数坐落bsp.c文件下面;
咱们要中止,就需求装备NVIC(中止控制器),为其分配优先级。
许多人觉得自己的装备没问题,但程序便是不进入中止,原因或许就在这儿。因而,NVIC这儿也是简单疏忽的当地。
4. RTC中止
该函数坐落stm32f10x_it.c文件下面;
这儿需求留意,RTC有三类中止,但进口都是这个函数,因而,需求在函数体里边分辩是哪一个中止进入了该函数。
留意1点:
铲除中止标志位:RTC_ClearITPendingBit(RTC_IT_SEC);
有的中止标志位铲除办法或许有几种办法,比方USART接纳中止,只需读取接纳值就能够铲除(请看USART1_IRQHandler函数)
或许有人觉得自己的程序老是字在中止函数里边,原因或许就在于没有铲除中止标志位。