查看: 6071|回复: 3

gpio 中断,一按就死机,求大佬帮忙

[复制链接]

41

主题

59

帖子

489

积分

高级工程师

Rank: 3Rank: 3

积分
489
发表于 2021-3-23 15:51:04 | 显示全部楼层 |阅读模式
本帖最后由 wangcharley 于 2021-3-23 16:39 编辑

下面的代码,定义两个按键,一个用查询的方法,一个用中断的方法,复位后查询那个正常,一按中断那个,两个按键就都不管用了,大佬帮看看是哪里有问题啊!

  1. #include "fm33lc0xx.h"
  2. #include "fm33lc0xx_fl_gpio.h"
  3. #include "fm33lc0xx_fl_rcc.h"
  4. void led1Init()
  5. {
  6.     FL_GPIO_InitTypeDef GPIO_InitStruct;
  7.    
  8.     GPIO_InitStruct.pin = FL_GPIO_PIN_0 | FL_GPIO_PIN_1;
  9.     GPIO_InitStruct.mode = FL_GPIO_MODE_OUTPUT;
  10.     GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
  11.     GPIO_InitStruct.pull = DISABLE;
  12.     GPIO_InitStruct.remapPin = DISABLE;
  13.    
  14.     FL_GPIO_Init(GPIOC,&GPIO_InitStruct);
  15.    
  16.     GPIO_InitStruct.pin = FL_GPIO_PIN_10 | FL_GPIO_PIN_9;
  17.    
  18.     FL_GPIO_Init(GPIOB,&GPIO_InitStruct);
  19.    
  20.     FL_GPIO_SetOutputPin(GPIOC,FL_GPIO_PIN_0);
  21.     FL_GPIO_SetOutputPin(GPIOC,FL_GPIO_PIN_1);
  22.     FL_GPIO_SetOutputPin(GPIOB,FL_GPIO_PIN_10);
  23.     FL_GPIO_SetOutputPin(GPIOB,FL_GPIO_PIN_9);
  24.         
  25. }

  26. void extiPC6Init()
  27. {
  28.     FL_GPIO_InitTypeDef PC6_GPIO_InitStruct;
  29.    
  30.     FL_RCC_EnableGroup1OperationClock(FL_RCC_GROUP1_OPCLK_EXTI);
  31.    
  32.     PC6_GPIO_InitStruct.pin = FL_GPIO_PIN_6;
  33.     PC6_GPIO_InitStruct.mode = FL_GPIO_MODE_INPUT;
  34.     PC6_GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
  35.     PC6_GPIO_InitStruct.pull = DISABLE;
  36.     PC6_GPIO_InitStruct.remapPin = DISABLE;
  37.     FL_GPIO_Init(GPIOC,&PC6_GPIO_InitStruct);
  38.    
  39.     PC6_GPIO_InitStruct.pin = FL_GPIO_PIN_10;
  40.     FL_GPIO_Init(GPIOA,&PC6_GPIO_InitStruct);
  41.    
  42.     FL_GPIO_SetTriggerEdge(GPIO,FL_GPIO_EXTI_LINE_9,FL_GPIO_EXTI_TRIGGER_EDGE_DISABLE);
  43.     FL_GPIO_SetExtiLine9(GPIO,FL_GPIO_EXTI_LINE_9_PC6);
  44.     FL_GPIO_EnableDigitalFilter(GPIO,FL_GPIO_EXTI_LINE_9);
  45.     FL_GPIO_SetTriggerEdge(GPIO,FL_GPIO_EXTI_LINE_9,FL_GPIO_EXTI_TRIGGER_EDGE_FALLING);
  46.     FL_GPIO_ClearFlag_EXTI(GPIO,FL_GPIO_EXTI_LINE_9);
  47.    
  48.    
  49.     NVIC_DisableIRQ(GPIO_IRQn);
  50.     NVIC_SetPriority(GPIO_IRQn,2);
  51.     NVIC_EnableIRQ(GPIO_IRQn);  
  52. }

  53. int main(void)
  54. {
  55.     SystemInit();
  56.     SysTick_Config(8000000);      
  57.     Do_DelayStart()
  58.     While_DelayMsEnd(300);
  59.     led1Init();
  60.     extiPC6Init();
  61.     while(1)
  62.     {
  63.         if(FL_GPIO_GetInputPin(GPIOC,FL_GPIO_PIN_6)==0)
  64.         {
  65.             FL_GPIO_ResetOutputPin(GPIOC,FL_GPIO_PIN_0);
  66.         }
  67.         else
  68.         {
  69.             FL_GPIO_SetOutputPin(GPIOC,FL_GPIO_PIN_0);
  70.         }
  71.         if(FL_GPIO_GetInputPin(GPIOA,FL_GPIO_PIN_10)==0)
  72.         {
  73.             FL_GPIO_ResetOutputPin(GPIOC,FL_GPIO_PIN_1);
  74.         }
  75.         else
  76.         {
  77.             FL_GPIO_SetOutputPin(GPIOC,FL_GPIO_PIN_1);
  78.         }
  79.     }
  80.    
  81.    
  82. }
  83. void GPIO_IRQHandle(void)
  84. {
  85.     if(FL_GPIO_IsActiveFlag_EXTI(GPIO,FL_GPIO_EXTI_LINE_9))
  86.     {
  87.         FL_GPIO_ToggleOutputPin(GPIOC,FL_GPIO_PIN_0);
  88.         FL_GPIO_ToggleOutputPin(GPIOC,FL_GPIO_PIN_1);
  89.         FL_GPIO_ToggleOutputPin(GPIOB,FL_GPIO_PIN_10);
  90.         FL_GPIO_ToggleOutputPin(GPIOB,FL_GPIO_PIN_9);
  91.         FL_GPIO_ClearFlag_EXTI(GPIO,FL_GPIO_EXTI_LINE_9);
  92.     }
  93. }

复制代码


回复

使用道具 举报

155

主题

847

帖子

4701

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4701
发表于 2021-3-24 08:58:43 | 显示全部楼层
断点设在中断,看进了没
回复

使用道具 举报

155

主题

847

帖子

4701

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4701
发表于 2021-3-24 09:10:05 | 显示全部楼层
请参考例程 《pmu_deepsleep_gpio唤醒》
回复

使用道具 举报

41

主题

59

帖子

489

积分

高级工程师

Rank: 3Rank: 3

积分
489
 楼主| 发表于 2021-4-15 11:41:14 | 显示全部楼层
原来是是中断函数名写错 了
回复

使用道具 举报

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

本版积分规则

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