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)
        {
            
        }
        
    }
  • 相关阅读:
    iPhone控件之UIWebView2
    Xcode 4.1/4.2 免证书(iDP)开发+真机调试
    iPhone控件之UIToolbar
    POJ 2472 ||SDUT 2358 106 miles to Chicago(Dijkstra算法变形)
    POJ 2418 Hardwood Species(二叉排序树)
    POJ 2513 Colored Sticks(字典树 + 并查集 + 欧拉回路)
    HDU 4033 Regular Polygon(几何 + 二分)
    POJ 3191 The Moronic Cowmpouter(二进制的变形)
    POJ 2442 Sequence(堆的应用)
    HDU 4036 Rolling Hongshu(数学+物理应用)
  • 原文地址:https://www.cnblogs.com/CaiFengYuanXing/p/13624040.html
Copyright © 2011-2022 走看看