STM32的RTC中断标志只能手动清除

背景:

  最近在做一个stm32的项目,其中用到RTC的实时时钟功能。时钟源采用外部32.768K晶振,时钟预分频设置为32767,目的是为了产生1秒的中断,然后在中断处理函数中更新实时年月日时分秒。

解决方案:

  但是由于缺乏经验,RTC中断处理函数中并没有使用RTC_ClearITPendingBit(RTC_IT_SEC)将中断标志位清除,导致程序在NVIC_Init()之后一直跳转到中断函数中,无法执行接下来的代码。

结论:

  通过手动清除秒中断标志位之后,问题迎刃而解。说明STM32的RTC中断标志位无法自动清除,必须要手动清除,否则会出现上述情况。

原文地址:https://www.cnblogs.com/wzzgeorge/p/11564347.html

时间: 2024-10-31 09:48:59

STM32的RTC中断标志只能手动清除的相关文章

STM32之外部中断控制

一.STM32外部中断 1.STM32外部中断结构图 如上图所示: 主要包括四个环节,GPIO.AFIO.EXTI.NVIC. 2.STM32外部中断软件配置步骤 ① 配置NVIC控制器 ② 使能GPIO和AFIO时钟 ③ 配置GPIO (复用功能的输入输出配置) ④ 配置AFIO (选定要配置为EXTI的I/O口线) ⑤  EXTI控制器的配置 配置寄存器就好像是我们在更改STM32的硬件电路,让它们处于一种新的工作状态--外部中断模式. 二.STM32外部中断软件配置细节 以PA0引脚的外部

STM32的USART中断死循环,形成死机。

直接说重点:我用的是 STM32F103 芯片 USART2_IRQHandler 总是中断,程序死循环. 1.出现问题: 原程序的中断处理程序是: void USART2_IRQHandler(void){  u8 key = 0;  USART_ClearFlag(USART2,USART_FLAG_TC ); //清除中断标志  if(USART_GetITStatus(USART2,USART_IT_RXNE)!=Bit_RESET)//检查指定的usart是否发生了中断  {     

stm32通用定时器中断问题

在使用stm32的通用定时器定时中断的时候,发现定时器在完成初始化配置后,定时器UIF位会立刻置位,导致在使能中断后,程序会立刻进入定时器中断. 如果设计代码时不希望定时器配置完成后,立刻进入中断,可以在定时器配置完成后,立刻清除UIF标志位(TIMx->SR &= 0xFFFE) ,再使能定时器更新中断.比如用库函数这么写: TIM_ClearITPendingBit(TIM4, TIM_IT_Update  ); TIM_ITConfig(TIM4,TIM_IT_Update,ENABL

嵌入式单片机,外部中断,中断标志位介绍

body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;} th{border: 1px solid gray; padding: 4px; background-color: #DDD;} td{border: 1px solid gray; padding: 4px;} tr:nth-chil

编写一个stm32 svc关中断函数

做到了让stm32触发svc中断并传递进去参数然后切换到handler模式并修改特殊寄存器的值,从而达到关中断,但是其实这个程序直接就是特权级,故不进入handler模式也可以修改特殊寄存器...... 如下为调用写的开关中断函数: 新建了一个文件asm.c,所有我写的汇编函数都在里面: 前两个是关中断和开中断函数,主要做的事将参数传入R8并触发svc中断. Svc中断中则调用第三个set_i()函数. 当触发了中断之后,M3内核进入handler模式,利用R8中的数据,修改特殊寄存器BASEP

STM32的RTC晶振不起振的原因及解决方法

STM32的RTC晶振经常出现不起振的问题,这已经是"业界共识"了.很多人在各种电子论坛上求助类似于"求高手指点!RTC晶振不起振怎么办"的问题,而其答案基本可以概括为"这次高手帮不了你了" 更有阴谋论者提出让人啼笑皆非的解释--STM32的RTC晶振不起振是ST与晶振厂商串通后故意搞出来的,目的是提高某晶振厂商高端晶振的销量. 最近做的几块板子也用到了STM32的RTC,前后两版一共做了大概6片,幸运的是并未遇到晶振不起振的现象.而我采用的是3

x86汇编--RTC中断(时间显示器)

可以用前一篇操作系统内核加载器(x86汇编)的加载器来加载这个RTC中断程序,就可以显示时间了. ;user.asm ;程序的头文件,整个程序的信息表 ;--------header----------------------------------- section header align=16 vstart=0 program_length dd program_end program_entry dw start dd section.code.start section_count d

Windows AD残留信息手动清除

              下面整理之前做过的清除AD残留信息的操作步骤分享给大家: 1 使用命令netdom query fsmo查看AD角色 2       使用命令检查当前域控的复制状态 通过命令repadmin /showrepl查看到目前存在一台域控DC-SD存在域信息同步问题. 3       通过命令repadmin /replsummary 命令repadmin /replsummary查看域信息同步队列,发现域控DC-SD已经超过60天没有和其他域控进行信息同步了. 4    

手动清除memcached缓存方法

1.查memcache状态/usr/bin/perl /usr/local/src/memcached-1.4.5/scripts/memcached-tool localhost:11211或者telnet localhost 11211 2.手动清除memcached测试 1). flush_all  echo "flush_all" | nc localhost 11211 # telnet localhost 11211Trying 127.0.0.1...Connected