1、stm32 在 SRAM 中调试部分中断不响应的问题因为 stm32 在 flash 区擦写的次数有限,所以我选择在 sram 中调试,SRAM 擦除次数无限次,不过掉电代码就消失。代码放在 SRAM 中,对于我们调试是非常有帮助的。(我用的是原子的开发板)最近这几天发现,在 SRAM 中调试,部分中断不响应的问题,比如 RTC 秒中断,明明使能了秒中断,可是总是卡在某个地方不动,然后怎么也进入不了中断。下面是我的代码。结合代码说明问题吧。rtc.h 文件中代码#ifndef _RTC_H#define _RTC_Htypedef structu8 m;u8 h;u8 s;calendar;e
2、xtern calendar rl;extern u8 tim_bz;u8 RTC_Init(void);#endifrtc.c 文件中代码#include “sys.h“#include “delay.h“#include “rtc.h“u8 tim_bz=0;calendar rl;u8 RTC_Init(void)u8 temp = 0;if(BKP-DR1 != 0X5050)/检测是不是第一次配置,后面会有向 BKP-DR1 写数据的语句/1,使能电源时钟和备份区域时钟RCC-APB1ENR |= 1APB1ENR |= 1CR |= 1BDCR |= 1BDCR /初始化失败,外部
3、晶振有问题/4,选择 RTC 时钟源并使能RCC-BDCR |= 1BDCR |= 1CRL/允许秒中断while(!(RTC-CRLRTC-PRLL |=32767;/设置 RTC 时钟频率为 1hzRTC-CNTL = 0x0005;RTC-CNTH = 0X0000;RTC-CRL elsewhile(!(RTC-CRL/允许秒中断while(!(RTC-CRL/进入中断标志,等下判断是否发生中断RTC-CRL TimeData CNTL;rl.h =TimeData/3600;rl.m =(TimeData600)/60;rl.s =TimeData;LCD_ShowNum(60,162,rl.h,2,16);LCD_ShowNum(84,162,rl.m,2,16);LCD_ShowNum(108,162,rl.s,2,16);LED0 = LED0; 在 SRAM 当中调试代码,标志位始终没有为 1,这就说明没有进入中断函数。问题在哪?嘿嘿,查阅资料发现,原子哥的中断向量配置需要修改一下。在 sys.h 文件中有个 MYRCC_DeInit()函数,修成这样,也就是把中断向量表映射到 SRAM 区。这样的话就所有的中断响应都没问题了。原因很简单,代码在哪里,你的中断向量表就映射到哪个区去。更多 stm32 交流,请进入博客:http:/