zoukankan      html  css  js  c++  java
  • HAL库实现按键中断

    key_exti.h

    #ifndef _KEY_EXTI_H
    #define _KEY_EXTI_H
    #include "stm32f4xx.h"
    #include "sys.h"
    
    #define KEY_UP_GPIO_PORT GPIOA
    #define KEY_UP_GPIO_PIN  GPIO_PIN_0
    
    #define KEY0_GPIO_PORT   GPIOH
    #define KEY0_GPIO_PIN    GPIO_PIN_3
    
    #define KEY1_GPIO_PORT   GPIOH
    #define KEY1_GPIO_PIN    GPIO_PIN_2
    
    #define KEY2_GPIO_PORT   GPIOC
    #define KEY2_GPIO_PIN    GPIO_PIN_13
    
    #define KEY_UP HAL_GPIO_ReadPin(KEY_UP_GPIO_PORT,KEY_UP_GPIO_PIN)
    #define KEY0   HAL_GPIO_ReadPin(KEY0_GPIO_PORT,KEY0_GPIO_PIN)
    #define KEY1   HAL_GPIO_ReadPin(KEY1_GPIO_PORT,KEY1_GPIO_PIN)
    #define KEY2   HAL_GPIO_ReadPin(KEY2_GPIO_PORT,KEY2_GPIO_PIN)
    
    #define KEY_UP_PRE 0X01
    #define KEY0_PRE   0x02
    #define KEY1_PRE   0x03
    #define KEY2_PRE   0x04
    
    void KEY_EXTI_Init(void);
    
    #endif

     key_exti.h

    #include "key_exti.h"
    #include "delay.h"
    #include "led.h"
    
    void KEY_EXTI_Init()
    {
        GPIO_InitTypeDef KEY_EXTI_InitStruction;
        
        __HAL_RCC_GPIOA_CLK_ENABLE();
        __HAL_RCC_GPIOC_CLK_ENABLE();
        __HAL_RCC_GPIOH_CLK_ENABLE();
        
        //KEY_UP
        KEY_EXTI_InitStruction.Pin=KEY_UP_GPIO_PIN;
        KEY_EXTI_InitStruction.Mode=GPIO_MODE_IT_RISING;
        KEY_EXTI_InitStruction.Pull=GPIO_PULLDOWN;
        KEY_EXTI_InitStruction.Speed=GPIO_SPEED_FREQ_VERY_HIGH;
        HAL_GPIO_Init(KEY_UP_GPIO_PORT,&KEY_EXTI_InitStruction);
        //KEY0
        KEY_EXTI_InitStruction.Pin=KEY0_GPIO_PIN;
        KEY_EXTI_InitStruction.Mode=GPIO_MODE_IT_FALLING;
        KEY_EXTI_InitStruction.Pull=GPIO_PULLUP;
        HAL_GPIO_Init(KEY0_GPIO_PORT,&KEY_EXTI_InitStruction);
        //KEY1
        KEY_EXTI_InitStruction.Pin=KEY0_GPIO_PIN;
        HAL_GPIO_Init(KEY0_GPIO_PORT,&KEY_EXTI_InitStruction);
        //KEY2
        KEY_EXTI_InitStruction.Pin=KEY0_GPIO_PIN;
        HAL_GPIO_Init(KEY2_GPIO_PORT,&KEY_EXTI_InitStruction);
        
        HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2);
        
        //KEY_UP
        HAL_NVIC_SetPriority(EXTI0_IRQn, 2, 0);
        HAL_NVIC_EnableIRQ(EXTI0_IRQn);
        //KEY0
        HAL_NVIC_SetPriority(EXTI3_IRQn, 2, 1);
        HAL_NVIC_EnableIRQ(EXTI3_IRQn);
        //KEY1
        HAL_NVIC_SetPriority(EXTI2_IRQn, 2, 2);
        HAL_NVIC_EnableIRQ(EXTI2_IRQn);
        //KEY2
        HAL_NVIC_SetPriority(EXTI15_10_IRQn, 2, 3);
        HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
    }
    
    //KEY_UP
    void EXTI0_IRQHander()
    {
        HAL_GPIO_EXTI_Callback(KEY_UP_GPIO_PIN);
    }
    //KEY0
    void EXTI1_IRQHander()
    {
        HAL_GPIO_EXTI_Callback(KEY0_GPIO_PIN);
    }
    //KEY1
    void EXTI2_IRQHander()
    {
        HAL_GPIO_EXTI_Callback(KEY1_GPIO_PIN);
    }
    //KEY2
    void EXTI15_10_IRQHander()
    {
        HAL_GPIO_EXTI_Callback(KEY2_GPIO_PIN);
    }
    
    void HAL_GPIO_EXTI_Callback(uint16_t GPIO_PIN)
    {
        delay_ms(10);
        switch(GPIO_PIN)
        {
            case KEY_UP_GPIO_PIN: LED_RED_ON;    break; 
            case KEY0_GPIO_PIN:   LED_RED_OFF;   break; 
            case KEY1_GPIO_PIN:   LED_GREEN_ON;  break; 
            case KEY2_GPIO_PIN:   LED_GREEN_OFF; break; 
        }
    }

    main

     

    #include "sys.h"
    #include "delay.h"
    #include "usart.h"
    #include "led.h"
    //#include "key.h"
    #include "key_exti.h"
    
    int main(void)
    {
        HAL_Init();                    
        Stm32_Clock_Init(360,25,2,8);  
        delay_init(180);         
        LED_Init();                  
        KEY_EXTI_Init();
        
        
        while(1)
        {
            
        }
        
    }
  • 相关阅读:
    catalina.sh详解
    jenkins环境变量问题
    张量或维度表示数学理解思路
    YOLO v3重点理解、单元格坐标系、偏移量以及放缩、置信度
    YOLO v3重点理解、单元格坐标系、偏移量以及放缩、置信度
    yolo v3好的想法和一些很好的见解
    损失函数的选择,交叉熵函数的分类以及为什么使用这种损失函数可以提升效果,为什么划分格子grid大小最后是变化的,不是固定的。
    多维python切片,和yolo最后结构1,3,16,16,85的理解
    进度条
    .argmax(-1)理解
  • 原文地址:https://www.cnblogs.com/CaiFengYuanXing/p/13624040.html
Copyright © 2011-2022 走看看