搜索
bottom↓
回复: 16

stm32在IAR调试怎样进入中断函数?

[复制链接]

出0入0汤圆

发表于 2010-1-11 10:29:51 | 显示全部楼层 |阅读模式
现在在学STM32的EXTI中断,用的是中断函数的例程,编译也通过了!但在IAR软件模拟调试中,不能进入中断函数,是怎么回事?

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2010-1-11 17:47:08 | 显示全部楼层
上程序...说话...

出0入0汤圆

 楼主| 发表于 2010-1-12 08:32:24 | 显示全部楼层
EXTI的里中断例程啊!上程序了!
*************************************
此函数是中断函数中.
**************************************/
void EXTI4_IRQHandler(void)
{
    if(EXTI_GetITStatus(EXTI_Line4) != RESET)
  {
    /* Toggle PC6 pin */
    GPIO_WriteBit(GPIOC, GPIO_Pin_6, (BitAction)((1-GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_6))));

    /* Clear the EXTI line 9 pending bit */
    // Clear the EXTI line 4 pending bit for EKSTM32F instead
    EXTI_ClearITPendingBit(EXTI_Line4);
  }
}
/************************************************/

#include "stm32f10x_lib.h"

EXTI_InitTypeDef EXTI_InitStructure;
ErrorStatus HSEStartUpStatus;

/* Private function prototypes ---------------*/
void RCC_Configuration(void);
void GPIO_Configuration(void);
void NVIC_Configuration(void);


int main(void)
{
#ifdef DEBUG
  debug();
#endif
  
  /* System Clocks Configuration */
  RCC_Configuration();
      
  /* NVIC configuration */
  NVIC_Configuration();
   
  /* Configure the GPIO ports */
  GPIO_Configuration();
  
  /* Connect EXTI Line9 to PB.09 */
  // For EKSTM32F use EXTI Line4 to PD.04  
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource4);

  /* Configure EXTI Line9 to generate an interrupt on falling edge */
  // Configure EXTI Line4 instead of EXTI Line9 for EKSTM32F  
  EXTI_InitStructure.EXTI_Line = EXTI_Line4;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);

  /* Generate software interrupt: simulate a falling edge applied on EXTI line 9 */
  // Configure EXTI Line4 instead of EXTI Line9
  EXTI_GenerateSWInterrupt(EXTI_Line4);
        
  while (1)
  {
  }
}

/*****************************************************************************/
void RCC_Configuration(void)
{
  /* RCC system reset(for debug purpose) */
  RCC_DeInit();

  /* Enable HSE */
  RCC_HSEConfig(RCC_HSE_ON);

  /* Wait till HSE is ready */
  HSEStartUpStatus = RCC_WaitForHSEStartUp();

  if(HSEStartUpStatus == SUCCESS)
  {
    /* Enable Prefetch Buffer */
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

    /* Flash 2 wait state */
    FLASH_SetLatency(FLASH_Latency_2);

    /* HCLK = SYSCLK */
    RCC_HCLKConfig(RCC_SYSCLK_Div1);
  
    /* PCLK2 = HCLK */
    RCC_PCLK2Config(RCC_HCLK_Div1);

    /* PCLK1 = HCLK/2 */
    RCC_PCLK1Config(RCC_HCLK_Div2);

    /* PLLCLK = 8MHz * 9 = 72 MHz */
    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);

    /* Enable PLL */
    RCC_PLLCmd(ENABLE);

    /* Wait till PLL is ready */
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
    {
    }

    /* Select PLL as system clock source */
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

    /* Wait till PLL is used as system clock source */
    while(RCC_GetSYSCLKSource() != 0x08)
    {
    }
  }
   
  /* Enable GPIOB, GPIOC and AFIO clock */
  // For EKSTM32F enable GPIOD instead of GPIOB
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOC
                         | RCC_APB2Periph_AFIO, ENABLE);
}

/*****************************************************************/
void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  /* Configure PC.06 as Output push-pull */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
   
  /* Configure PB.09 as input floating (EXTI Line 9) */
  // For EKSTM32F use PD.04 as Push Botton 1 is connected on it
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
}

/*****************************************************************/
void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;
  
#ifdef  VECT_TAB_RAM  
  /* Set the Vector Table base location at 0x20000000 */
  NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else  /* VECT_TAB_FLASH  */
  /* Set the Vector Table base location at 0x08000000 */
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);   
#endif

  /* Configure one bit for preemption priority */
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  
  /* Enable the EXTI9_5 Interrupt */
  // Enable the EXTI4 Interrupt instead for EKSTM32F
  NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}

出0入0汤圆

发表于 2010-1-12 11:50:53 | 显示全部楼层
什么意思,设置个断点不就进去了吗?

出0入0汤圆

 楼主| 发表于 2010-1-12 13:40:05 | 显示全部楼层
我的意思是想让程序进入stm32f10x_it.c这个中断函数中的void EXTI4_IRQHandler(void)之中。我记得在C51中,想进入相应的中断函数,设置中断使能后,把相应的中断标志勾上,就可以进中断函数了。

出0入0汤圆

 楼主| 发表于 2010-1-12 17:07:06 | 显示全部楼层
对了,我的开发板是万利199那款,用的例程是__STM32__提供的啊(stm32all),应该不会有问题的啊!怎么在IAR调试的时候进不了中断函数呢?
晚上把程序直接下载到开发板试试。

出0入0汤圆

 楼主| 发表于 2010-1-12 23:09:04 | 显示全部楼层
把程序直接下载到万利开发板试了,是OK的!但不明白为何在IAR中单步调试的时候,进不了中断?

出0入0汤圆

 楼主| 发表于 2010-1-13 15:56:16 | 显示全部楼层
没有人知道吗?难道就我一个人遇到这个问题?

出0入0汤圆

 楼主| 发表于 2010-4-9 11:17:08 | 显示全部楼层
有一段时间没来了,传点好资料上来!点击此处下载 ourdev_544718.pdf(文件大小:4.91M) (原文件名:Source+Insight+3.5+用户手册.pdf)

出0入0汤圆

 楼主| 发表于 2010-4-9 11:33:59 | 显示全部楼层
上传source insight软件。点击此处下载 ourdev_544722.rar(文件大小:3.09M) (原文件名:Si3558Setup.rar)

出0入0汤圆

 楼主| 发表于 2010-4-25 23:13:57 | 显示全部楼层
点击此处下载 ourdev_549229.rar(文件大小:285K) (原文件名:LED.rar)

出0入0汤圆

 楼主| 发表于 2010-4-27 20:14:31 | 显示全部楼层
点击此处下载 ourdev_549746.rar(文件大小:18K) (原文件名:Light.rar)

出0入0汤圆

发表于 2010-4-27 22:11:19 | 显示全部楼层
可以的啊,你设置一个断点在中断服务程序中,然后单步执行并且触发中断,如按键触发外部中断,就进到服务程序中了,注:我用的IAR是5.40版本的

出0入0汤圆

发表于 2010-5-7 17:13:39 | 显示全部楼层
在RAM方式下,我也一样,没法进中断!

出0入0汤圆

发表于 2010-5-25 21:26:17 | 显示全部楼层
好像是的,单步运行也不容易进入中断

出0入0汤圆

发表于 2012-5-18 17:08:52 | 显示全部楼层
我用IAR1.1for stm8、stm8s discovery 。单步仿真的时候也没有进中断。但是结果是正确的。不知道为何这样。

出0入0汤圆

发表于 2019-5-13 11:20:18 | 显示全部楼层
同样问题,带着开发板debug模式是可以进入中断的,但是simulate debug模式就不能进中断,估计是IAR哪个地方的设置不对
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-22 00:36

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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