[STM32F0]

stm32f0编译通过,仿真进入启动文件出不来了,重新发

[复制链接]
1404|4
手机看帖
扫描二维码
随时随地手机跟帖
zhu51231|  楼主 | 2017-6-18 11:30 | 显示全部楼层 |阅读模式
原来用MDK5.11没有遇到类似的问题,最近升级到5.22版本出现了莫名其妙的问题,程序编译通过,仿真的时候进入启动文件startup_stm32f030x6s:
200   TIM1_BRK_UP_TRG_COM_IRQHandler
201   TIM1_CC_IRQHandler
202   TIM3_IRQHandler
203   TIM14_IRQHandler
204   TIM16_IRQHandler
205   TIM17_IRQHandler
206   I2C1_IRQHandler
207   SPI1_IRQHandler
208   USART1_IRQHandler
209                   B       .
210                  ENDP
211                  ALIGN
212  
停在210行,就不动了,求高手解决。
戈卫东| | 2017-6-18 14:14 | 显示全部楼层
从你给出的信息看,似乎是触发了一个中断,但你没有提供中断服务程序。

使用特权

评论回复
zhu51231|  楼主 | 2017-6-18 16:16 | 显示全部楼层
我在仔细测试一下,程序在5.11版本是可以跑起来的。能是什么中断呢?

使用特权

评论回复
zhu51231|  楼主 | 2017-6-19 08:53 | 显示全部楼层
我仔细的测试了一下,可能不是中断造成的,我是这样测试的:不知道为什么,我的软件不能调出view下面的喂wtach1,同时,pripherals下面的system viewer也是空白的,无法查看变量和寄存器的状态。我就把启动文件里面列出的中断全部列出来,并在里面放了一个死循环进行拦截,
void NMI_Handler(void)
{
        while (1)
  {
  }
}


void HardFault_Handler(void)
{

  while (1)
  {
  }
}


void SVC_Handler(void)
{
        while (1)
  {
  }
}


void PendSV_Handler(void)
{
        while (1)
  {
  }
}
               
void SysTick_Handler(void)
{

        if(td>=1)
                td--;               
}


void RTC_IRQHandler(void)
{
  if(RTC_GetITStatus(RTC_IT_ALRA) != RESET)
  {
    RTC_ClearITPendingBit(RTC_IT_ALRA);
    EXTI_ClearITPendingBit(EXTI_Line17);
  }
}


void        WWDG_IRQHandler(void)
{
        while (1)
  {
  }
}

void        FLASH_IRQHandler(void)
{
        while (1)
  {
  }
}
void        RCC_IRQHandler(void)
{
        while (1)
  {
  }
}
void        EXTI0_1_IRQHandler(void)
{
        while (1)
  {
  }
}
void        EXTI2_3_IRQHandler(void)
{
        while (1)
  {
  }
}


void        DMA1_Channel2_3_IRQHandler(void)
{
        while (1)
  {
  }
}
void        DMA1_Channel4_5_IRQHandler(void)
{
        while (1)
  {
  }
}

void        TIM1_BRK_UP_TRG_COM_IRQHandler(void)
{
        while (1)
  {
  }
}
void        TIM1_CC_IRQHandler(void)
{
        while (1)
  {
  }
}

void        TIM14_IRQHandler(void)
{
        while (1)
  {
  }
}
void        TIM16_IRQHandler(void)
{
        while (1)
  {
  }
}
void        TIM17_IRQHandler(void)
{
        while (1)
  {
  }
}
void        I2C1_IRQHandler(void)
{
        while (1)
  {
  }
}
void        SPI1_IRQHandler(void)
{
        while (1)
  {
  }
}
结果还是没有拦住,请大神在帮我看看

使用特权

评论回复
zhu51231|  楼主 | 2017-6-21 15:47 | 显示全部楼层
进过仔细检查故障范围找到了,我把ad模块取消,就能够正常运行了,然后下叉相关的地方,发现只要不开中断就可以运行,一开adc的中断就进入启动文件,开中断的程序就这么几句:
NVIC_InitStructure.NVIC_IRQChannel = ADC1_COMP_IRQn;                  //外部中断通道选择
NVIC_InitStructure.NVIC_IRQChannelPriority = 1; //优先级选择
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;           // 中断使能
NVIC_Init(&NVIC_InitStructure);      //  初始化
吧这几句注释掉就可以运行,求大神帮我看看这里有什么问题,优先级我试了0123,  
我是有adc的中断程序的,如下:
void ADC1_COMP_IRQHandler(void)
{
        //         if((ADC1->ISR&(0X04)))
   if(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) != RESET)
    {
      adcmul[d]=ADC1->DR;
        d++;       
        if(d>=5)
        d=0;      
     ADC1->ISR |= 0x04;
    }
ADC_ClearFlag(ADC1, ADC_ISR_EOSEQ);
}
看看问题出在哪里,我都抓狂了

使用特权

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

本版积分规则

18

主题

117

帖子

1

粉丝