打印

程序初始化进入HardFault_Handler

[复制链接]
6397|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lgcuishuang|  楼主 | 2009-12-1 23:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题:IAR+Jlink,SWD方式调试,芯片型号为STM32F101CBT6,仿真运行,执行到函数TIM2_Configuration中的TIM_Cmd(TIM2, ENABLE);就进入到HardFault_Handler,如果复位后重新运行则执行到NVIC_Configuration中的NVIC_Init(&NVIC_InitStructure);就进入到HardFault_Handler,找了好久没有找到原因,请香主帮忙分析,谢谢!
代码:
void NVIC_Configuration(void)
{
    NVIC_InitTypeDef NVIC_InitStructure;
    #ifdef VECT_TAB_RAM
        NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
    #else
        NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
    #endif
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); // Configure the NVIC Preemption Priority Bits
    //NVIC_InitStructure.NVIC_IRQChannel            = USART1_IRQn;
    //NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
    //NVIC_InitStructure.NVIC_IRQChannelCmd         = ENABLE;
    //NVIC_Init(&NVIC_InitStructure);
    //Enable the TIM2 global Interrupt
    NVIC_InitStructure.NVIC_IRQChannel            = TIM2_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
    NVIC_InitStructure.NVIC_IRQChannelCmd         = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
   
    //使能EXTI 12通道
    //NVIC_InitStructure.NVIC_IRQChannel            = EXTI15_10_IRQn;
    //NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    //NVIC_InitStructure.NVIC_IRQChannelCmd         = ENABLE;
    //NVIC_Init(&NVIC_InitStructure);
}

void TIM2_Configuration(void)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
   
    TIM_TimeBaseStructure.TIM_Period        = 5625;                 
    TIM_TimeBaseStructure.TIM_Prescaler     = 64;                  
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;      
    TIM_TimeBaseStructure.TIM_CounterMode   = TIM_CounterMode_Down;

    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);               
    TIM_ARRPreloadConfig(TIM2, ENABLE);                          
    TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
    TIM_Cmd(TIM2, ENABLE);
}

另外进入到HardFault_Handler后观察到LR=0xFFFFFFF1
沙发
xiaoerge| | 2009-12-2 09:06 | 只看该作者
可以看一下堆栈,异常之前栈顶的一些数据可能有用
另外NVIC的寄存器也可以看一下,有一个寄存器指示当前服务的ISR序号,
看一下是否当前处理的ISR是否就是异常,

我碰到一个奇异的问题就是,并不是真正的异常,而是别的中断导致的

使用特权

评论回复
板凳
dfsa| | 2009-12-2 09:57 | 只看该作者
那要看你开了哪几个中断,而且高低优先级是否配置的合理

使用特权

评论回复
地板
ma1986| | 2009-12-2 10:25 | 只看该作者
是伪中断吗?如果除了这个异常,还进入还进入其他异常的话,可能是数组越界了。。

使用特权

评论回复
5
ST_ARM| | 2009-12-2 10:29 | 只看该作者
贴出你的初始化的流程代码。

使用特权

评论回复
6
lgcuishuang|  楼主 | 2009-12-2 10:49 | 只看该作者
回LS,我只设置了这一个中断,其他的都屏蔽了,出现我描述的现象!

使用特权

评论回复
7
lgcuishuang|  楼主 | 2009-12-2 10:53 | 只看该作者
刚才是回3楼的,呵呵!回5楼,程序不在单位电脑里,晚上贴出,你的意思是和初始化的先后顺序有关?

使用特权

评论回复
8
ST_ARM| | 2009-12-2 10:58 | 只看该作者
仿真时不排除这种可能

使用特权

评论回复
9
lgcuishuang|  楼主 | 2009-12-2 19:23 | 只看该作者
初始化流程:
RCC_Configuration();
GPIO_Configuration();
NVIC_Configuration();
I2C2_Configuration();
TIM2_Configuration();
SPI2_Configuration();

使用特权

评论回复
10
lgcuishuang|  楼主 | 2009-12-2 21:42 | 只看该作者
问题找到了,是IAR工程建的有问题,刚刚用IAR5.30,并且将固件库升级到3.1.0,不太熟悉,呵呵,谢谢大家帮忙分析!

使用特权

评论回复
11
aaa2742| | 2011-4-10 13:52 | 只看该作者
乱七八糟的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

26

帖子

0

粉丝