为什么我复位后自动进入中断了?

[复制链接]
1251|7
 楼主| monkeypony 发表于 2015-7-14 16:55 | 显示全部楼层 |阅读模式
pi, IO, TI, gp, GPIO
本来是想利用外部中断来翻转IO的,结果复位后调试发现,自动进入中断了,参考的官方的例程代码
  1. /**
  2.   ******************************************************************************
  3.   * [url=home.php?mod=space&uid=288409]@file[/url]    EXTI/EXTI_demo/main.c
  4.   * [url=home.php?mod=space&uid=187600]@author[/url]  MCU SD
  5.   * [url=home.php?mod=space&uid=895143]@version[/url] V1.0
  6.   * [url=home.php?mod=space&uid=212281]@date[/url]    26-DEC-2014
  7.   * [url=home.php?mod=space&uid=247401]@brief[/url]   Main program body..
  8.   ******************************************************************************
  9.   */

  10. /* Includes ------------------------------------------------------------------*/
  11. #include "gd32f10x.h"

  12. /* Private variables ---------------------------------------------------------*/
  13. GPIO_InitPara GPIO_InitStructure;
  14. EXTI_InitPara EXTI_InitStructure;
  15. NVIC_InitPara NVIC_InitStructure;

  16. /* Private function prototypes -----------------------------------------------*/
  17. void EXTI0_Config(void);
  18. void EXTI14_Config(void);

  19. /* Private functions ---------------------------------------------------------*/
  20. /**
  21.   * @brief  Main program.
  22.   * @param  None
  23.   * @retval None
  24.   */
  25. int main(void)
  26. {
  27.     /* Enable GPIOC clock */
  28.     RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_GPIOC, ENABLE);
  29.    
  30.     /* Configure the LED2 and LED3 GPIO */
  31.     GPIO_InitStructure.GPIO_Pin = GPIO_PIN_0 | GPIO_PIN_2;
  32.     GPIO_InitStructure.GPIO_Mode = GPIO_MODE_OUT_PP;
  33.     GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ;
  34.     GPIO_Init(GPIOC, &GPIO_InitStructure);
  35.    
  36.     /* Turn on LED2 and LED3 */
  37.     GPIO_SetBits(GPIOC, GPIO_PIN_0);
  38.     GPIO_SetBits(GPIOC, GPIO_PIN_2);
  39.    
  40.     /* Configure the EXTI line0 and EXTI line14 */
  41.     EXTI_DeInit(&EXTI_InitStructure);
  42.     EXTI0_Config();
  43.     EXTI14_Config();
  44.    
  45.     EXTI_SWINT_Enable(EXTI_LINE0);
  46.    
  47.     while(1)
  48.     {
  49.     }                                    
  50. }

  51. /**
  52.   * @brief  Configure the EXTI line0.
  53.   * @param  None
  54.   * @retval None
  55.   */
  56. void EXTI0_Config(void)
  57. {
  58.     /* Enable GPIOC and AFIO clock */
  59.     RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_GPIOA |
  60.                                RCC_APB2PERIPH_AF, ENABLE);

  61.     /* Configure PA0 pin */
  62.     GPIO_InitStructure.GPIO_Pin = GPIO_PIN_0;
  63.     GPIO_InitStructure.GPIO_Mode = GPIO_MODE_IN_FLOATING;
  64.     GPIO_Init(GPIOA, &GPIO_InitStructure);
  65.    
  66.     /* Connect EXTI Line0 to PA0 pin */
  67.     GPIO_EXTILineConfig(GPIO_PORT_SOURCE_GPIOA, GPIO_PINSOURCE0);

  68.     /* Configure EXTI Line0 and its interrupt to the lowest priority*/
  69.     EXTI_InitStructure.EXTI_LINE = EXTI_LINE0;
  70.     EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  71.     EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
  72.     EXTI_InitStructure.EXTI_LINEEnable = ENABLE;
  73.     EXTI_Init(&EXTI_InitStructure);
  74.    
  75.     NVIC_InitStructure.NVIC_IRQ = EXTI0_IRQn;
  76.     NVIC_InitStructure.NVIC_IRQPreemptPriority = 0x0F;
  77.     NVIC_InitStructure.NVIC_IRQSubPriority = 0x0F;
  78.     NVIC_InitStructure.NVIC_IRQEnable = ENABLE;
  79.     NVIC_Init(&NVIC_InitStructure);
  80. }

  81. /**
  82.   * @brief  Configure the EXTI line14.
  83.   * @param  None
  84.   * @retval None
  85.   */
  86. void EXTI14_Config(void)
  87. {
  88.     /* Enable GPIOB and AFIO clock */
  89.     RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_GPIOB |
  90.                                RCC_APB2PERIPH_AF, ENABLE);
  91.    
  92.     /* Configure PB14 pin */
  93.     GPIO_InitStructure.GPIO_Pin = GPIO_PIN_14;
  94.     GPIO_InitStructure.GPIO_Mode = GPIO_MODE_IN_FLOATING;
  95.     GPIO_Init(GPIOB, &GPIO_InitStructure);

  96.     /* Connect EXTI Line14 to PB14 pin */
  97.     GPIO_EXTILineConfig(GPIO_PORT_SOURCE_GPIOB, GPIO_PINSOURCE14);

  98.     /* Configure EXTI Line14 and its interrupt to the lowest priority*/
  99.     EXTI_InitStructure.EXTI_LINE = EXTI_LINE14;
  100.     EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  101.     EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  102.     EXTI_InitStructure.EXTI_LINEEnable = ENABLE;
  103.     EXTI_Init(&EXTI_InitStructure);
  104.    
  105.     NVIC_InitStructure.NVIC_IRQ = EXTI15_10_IRQn;
  106.     NVIC_InitStructure.NVIC_IRQPreemptPriority = 0x0F;
  107.     NVIC_InitStructure.NVIC_IRQSubPriority = 0x0F;
  108.     NVIC_InitStructure.NVIC_IRQEnable = ENABLE;
  109.     NVIC_Init(&NVIC_InitStructure);
  110. }

  111. /******************* (C) COPYRIGHT 2014 GIGADEVICE *****END OF FILE****/




long009 发表于 2015-7-15 10:47 | 显示全部楼层
EXTI_SWINT_Enable(EXTI_LINE0);
你仔细看看这个函数,他会人为的进去中断的。
 楼主| monkeypony 发表于 2015-7-16 11:21 | 显示全部楼层
long009 发表于 2015-7-15 10:47
EXTI_SWINT_Enable(EXTI_LINE0);
你仔细看看这个函数,他会人为的进去中断的。

我看了看,果然是这个函数的原因,去掉就好了。
 楼主| monkeypony 发表于 2015-7-16 11:23 | 显示全部楼层
long009 发表于 2015-7-15 10:47
EXTI_SWINT_Enable(EXTI_LINE0);
你仔细看看这个函数,他会人为的进去中断的。

我以为这个是开启中断的函数,那么久有个疑问,每个中断莫非是不需要开启的么?
王大熊 发表于 2015-7-17 09:32 | 显示全部楼层
monkeypony 发表于 2015-7-16 11:23
我以为这个是开启中断的函数,那么久有个疑问,每个中断莫非是不需要开启的么? ...

好像只有开全局中断的函数。单独的中断没有这个函数
王大熊 发表于 2015-7-17 09:32 | 显示全部楼层
EXTI_SWINT_Enable(EXTI_LINE0);//SWINT是软件中断的意思,就是软件开启中断,software
 楼主| monkeypony 发表于 2015-7-24 07:51 | 显示全部楼层
王大熊 发表于 2015-7-17 09:32
EXTI_SWINT_Enable(EXTI_LINE0);//SWINT是软件中断的意思,就是软件开启中断,software

学习了,原来是我理解错啦。
long009 发表于 2015-7-29 17:29 | 显示全部楼层
monkeypony 发表于 2015-7-24 07:51
学习了,原来是我理解错啦。

这个在调试的时候用得着,一般不用的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

133

主题

715

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部