STM32单片机中RTC的秒中断的原理解析_第1页
STM32单片机中RTC的秒中断的原理解析_第2页
STM32单片机中RTC的秒中断的原理解析_第3页
STM32单片机中RTC的秒中断的原理解析_第4页
STM32单片机中RTC的秒中断的原理解析_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

STM32单片机中RTC的秒中断的原理解析RTC(RealTimeClock)是实时时钟的意思,它其实和TIM有点类似,也是利用计数的原理,选择RTC时钟源,再进行分频,到达计数的目的。该文主要讲述关于RTC的秒中断功能,这个功能类似SysTick系统滴答的功能。RTC秒中断功能其实是每计数一次就中断一次。注意,这里所说的秒中断并非一定是一秒的时间,它是由RTC时钟源和分频值决定的“秒”的时间,当然也是可以做到1秒钟中断一次。本文章提供的实例工程,其实验效果是:主函数间隔0.5秒LED变化一次;秒中断一次打印数据“RTCSec.。.”;也就是LED变化一次,串口打印一次数据“RTCSec.。.”扩展部分的功能RTC计数:可以实现RTC闹钟,本文将提供实例工程源代码供大家下载学习。Ⅱ、实例工程下载笔者针对于初学者提供的例程都是去掉了许多不必要的功能,精简了官方的代码,对初学者一看就明白,以简单明了的工程供大家学习。笔者提供的实例工程都是在板子上经过多次测试并没有问题才上传至360云盘,欢迎下载测试、参照学习。提供下载的软件工程是STM32F103ZE的,但F1其他型号也适用(适用F1其他型号:关注微信,回复“修改型号”)。STM32F10x_RTC闹钟实例源代码工程:/cBbpu3gIGK38a访问密码05daSTM32F10x_RTC秒中断实例源代码工程:/cBbpPnhYbXR9x访问密码561fSTM32F1资料:/crBUdUGdYKam2访问密码ca90Ⅲ、原理描述以笔者个人学习经历来说,想要掌握其真正原理,最好还是查看参考手册(现在有很多都翻译为中文了),里面模块的框图,从框图中大概就可以看到该模块有些什么功能及其工作的原理。RTC框图:从上面系统框图来分析“RTC秒中断”的原理:1、RTC时钟源,总共有三类:RCC_RTCCLKSource_LSERCC_RTCCLKSource_LSIRCC_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_LSERCC_RTCCLKSource_LSIRCC_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_Clear

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论