stm32f103zet红牛开发板STMcubeMX hal库版:04旺宝-红牛-按键中断 EXIT

实验目的:给按键的下降沿设置中断事件来控制led、

实验现象:程序运行后,按下USER1,LED1亮,再按USER1,LED1灭.

在针脚上选exit

 

选下降沿中断

 

不修改优先级

 

在main.c里加入回调函数。这个函数会覆盖库里边的同名空函数

/**
  * 函数功能: 按键外部中断服务函数
  * 输入参数: GPIO_Pin:中断引脚
  * 返 回 值: 无
  * 说    明: 无
  */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  if(GPIO_Pin==USER1_Pin)
  {
     HAL_Delay(20);//使用这个必须降低EXIT的中断抢先级别
     //for(int i=0; i<100000;i++){}
     if (HAL_GPIO_ReadPin(USER1_GPIO_Port,USER1_Pin)==0) {
          LED_Toggle(1);

        }
      

    
    __HAL_GPIO_EXTI_CLEAR_IT(USER1_Pin);
  }
  
}

 

 发现使用hal-delay会卡死程序。原因hal-delay用的是systemtic的中断。这里俩中断优先顺序一样了、并且cubeMX并不会自动生成它的优先级代码。默认就是最高级别0

解决办法 1  使用空循环延时

2 把exit的中断级别往下降。

 

posted @ 2022-09-06 00:26  kyo413  阅读(53)  评论(0编辑  收藏  举报