stm32在SRAM中调试部分中断不响应的问题stm32在SRAM中调试部分中断不响应的问题.doc
文本预览下载声明
stm32在SRAM中调试部分中断不响应的问题
?
?因为stm32在flash区擦写的次数有限,所以我选择在sram中调试,SRAM擦除次数无限次,不过掉电代码就消失。代码放在SRAM中,对于我们调试是非常有帮助的。(我用的是原子的开发板)
????最近这几天发现,在SRAM中调试,部分中断不响应的问题,比如RTC秒中断,明明使能了秒中断,可是总是卡在某个地方不动,然后怎么也进入不了中断。下面是我的代码。结合代码说明问题吧。
?
rtc.h文件中代码
?
#ifndef __RTC_H#define __RTC_H
typedef struct{?u8 m;?u8 h;?u8 s;}calendar;extern calendar rl;extern u8 tim_bz;u8 RTC_Init(void);
#endif
rtc.c文件中代码
#include sys.h#include delay.h#include rtc.hu8 tim_bz=0;calendar rl;u8 RTC_Init(void){?u8 temp = 0;?if(BKP-DR1 != 0X5050)//检测是不是第一次配置,后面会有向BKP-DR1写数据的语句?{??//1,使能电源时钟和备份区域时钟??RCC-APB1ENR |= 128;//电源接口时钟使能??RCC-APB1ENR |= 127;//备份接口时钟使能
??//2,取消备份区域写保护,需要向备份区域写??//一个字节来标记时钟已经配置过了,避免每次复位启动??PWR-CR |= 18;//取消后备区域的写保护????//3,复位备份区域,开启外部低速振荡器??RCC-BDCR |= 116;//备份域软件复位??RCC-BDCR = ~(116);//备份域软件复位清,因为备份域软件复位要由软件清除,且不能一直复位。???RCC-BDCR |= 10;//外部低速时钟使能??while((!(RCC-BDCR0X02))temp250)//判断rtc外部低速振荡器是否就绪??{???temp++;???delay_ms(10);??}
??if(temp=250)return 1;//初始化失败,外部晶振有问题
??//4,选择RTC时钟源并使能??RCC-BDCR |= 18;//LSE振荡器作为rtc时钟??RCC-BDCR |= 115;//RTC时钟使能??while(!(RTC-CRL(15)));//等待rtc写操作完成??while(!(RTC-CRL(13)));//等待RTC寄存器和APB1接口同步??RTC-CRH |= 0x01;//允许秒中断??while(!(RTC-CRL(15)));//等待rtc写操作完成??RTC-CRL |= 14;//允许配置RTC寄存器
??RTC-PRLH = 0x0000;??RTC-PRLL |=32767;//设置RTC时钟频率为1hz??RTC-CNTL = 0x0005;??RTC-CNTH = 0X0000;??RTC-CRL = ~(14);//配置更新??while(!(RTC-CRL(15)));//等待rtc写操作完成??RTC-CRL = ~(15);//rtc操作关闭??BKP-DR1 = 0X5050;?}?else?{??while(!(RTC-CRL(13)));//等待RTC寄存器和APB1接口同步??RTC-CRH |= 0x01;//允许秒中断??while(!(RTC-CRL(15)));//等待rtc写操作完成???}?MY_NVIC_Init(0,0,RTC_IRQn,2);//设置中断?return 0;}
void RTC_IRQHandler(void){?if(RTC-CRL0X01)?{??tim_bz = 1;//进入中断标志,等下判断是否发生中断??RTC-CRL = ~(10);//清除秒标志??while(!(RTC-CRL(15)));//等待rtc写操作完成????}}
?
?
主函数代码
#include sys.h#include usart.h??#include delay.h?#include led.h#include beep.h???#include key.h???#include exti.h???#include wdg.h ?#include timer.h????#include tpad.h????#include lcd.h#include rtc.h????
int
显示全部