注册 登录
查看: 359|回复: 8

为什么山外K60FX用新版本5.2的写中断函数会这样

[复制链接]
发表于 2015-1-25 20:29:40 | 显示全部楼层 |阅读模式
例程也是这么写的,但是没问题,我写的这样,编译没有错,但下载后程序死在这里,而且K60FX上D2一直闪烁,山外哥,这是怎么回事,急求,已经检查好久都不知道错在哪里

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2015-1-25 20:50:18 | 显示全部楼层
既然例程没问题,那应该是你有些地方没设置好吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-25 21:04:45 | 显示全部楼层
仰逸致 发表于 2015-1-25 20:50
既然例程没问题,那应该是你有些地方没设置好吧

也没什么地方需要设置啊,我就是用的普通的定时中断,就pit_init_ms(PIT0,200);  
                                                                                      set_vector_handler(PIT0_VECTORn,PIT0_IRQHandler);   // 设置中断服务函数到中断向量表里
                                                                                       enable_irq(PIT0_IRQn);   编译没问题,下到单片机里串口就提示硬件错误,灯一直闪


回复 支持 反对

使用道具 举报

发表于 2015-1-25 21:09:36 | 显示全部楼层
Love_Ning 发表于 2015-1-25 21:04
也没什么地方需要设置啊,我就是用的普通的定时中断,就pit_init_ms(PIT0,200);  
                     ...

整个main函数都直接贴上来
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-25 22:29:02 | 显示全部楼层
山外メ雲ジ 发表于 2015-1-25 21:09
整个main函数都直接贴上来

就这些,用的普通的定时

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2015-1-25 22:52:47 | 显示全部楼层
Love_Ning 发表于 2015-1-25 22:29
就这些,用的普通的定时

你在线调试看看吧,截图一下调用栈
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-26 08:17:32 | 显示全部楼层
仰逸致 发表于 2015-1-25 22:52
你在线调试看看吧,截图一下调用栈

在线调试,程序就死在这里core_cm4文件里的__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn)
                                                                           {
                                                                              /*  NVIC->ISER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F));  enable interrupt */
                                                                                   NVIC->ISER[(uint32_t)((int32_t)IRQn) >> 5] = (uint32_t)(1 << ((uint32_t)((int32_t)IRQn) & (uint32_t)0x1F)); /* enable interrupt */
                                                                           }
然后串口提示****default_isr entered on vector 3*****
                      HardFault Interrupt

回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-26 08:28:34 | 显示全部楼层
山外メ雲ジ 发表于 2015-1-25 21:09
整个main函数都直接贴上来


主函数里就这些,然后在MK60_it.c里写的中断函数

/*************************************************************************
*  函数名称:PIT0_IRQHandler
*  功能说明:PIT0 定时中断服务函数
*
*  修改时间:2015-1-22   
*  备    注:
*************************************************************************/
void PIT0_IRQHandler(void)
{
   PIT_Flag_Clear(PIT0);
   ADC_Read();
   Date_analyse();
   printf("\n输出的电压值为:%f ",AD[5]]);
  }
在MK60_it,h里声明的extern void PIT0_IRQHandler(void);
工程编译没有错误,但下载后K60上的D2灯一直闪烁,串口输出
****default_isr entered on vector 3*****
  HardFault Interrupt
在线调试发现程序死在core.cm4里的
__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn)
{
/*  NVIC->ISER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F));  enable interrupt */
  NVIC->ISER[(uint32_t)((int32_t)IRQn) >> 5] = (uint32_t)(1 << ((uint32_t)((int32_t)IRQn) & (uint32_t)0x1F)); /* enable interrupt */
}
已经好长时间了,一直找不到原因,这是怎么回事啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-26 08:29:55 | 显示全部楼层
Love_Ning 发表于 2015-1-26 08:28
主函数里就这些,然后在MK60_it.c里写的中断函数

/********************************************** ...

主函数
#include "common.h"
#include "include.h"
void main()
{
    ADC_Init();
    //LCD_Init();
    pit_init_ms(PIT0,200);  
    set_vector_handler(PIT0_VECTORn,PIT0_IRQHandler);   // 设置中断服务函数到中断向量表里
    enable_irq(PIT0_IRQn);                         // 使能PIT中断
    while(1)
    {
    }
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回列表 返回顶部