新手入门
- 积分
- 4
- 金钱
- 4
- 注册时间
- 2023-6-12
- 在线时间
- 0 小时
|
#ifndef __EXTI_H
#define __EXTI_H
#include "./SYSTEM/sys/sys.h"
//引脚、中断服务函数定义和中断编号
#define KEY0_INT_GPIO_PORT GPIOE
#define KEY0_GPIO_PIN GPIO_PIN_4
//PE口时钟使能
#define KEY0_GPIO_CLK_ENABLE() do{__HAL_RCC_GPIOE_CLK_ENABLE();}while(0)
#define KEY0_INT_IRQN EXTI4_IRQn
#define KEY0_INT_IRQHandler EXTI4_IRQHander
#define KEY1_INT_GPIO_PORT GPIOE
#define KEY1_GPIO_PIN GPIO_PIN_3
//PE口时钟使能
#define KEY1_GPIO_CLK_ENABLE() do{__HAL_RCC_GPIOE_CLK_ENABLE();}while(0)
#define KEY1_INT_IRQN EXTI3_IRQn
#define KEY1_INT_IRQHandler EXTI3_IRQHander
#define KEYUP_INT_GPIO_PORT GPIOA
#define KEYUP_GPIO_PIN GPIO_PIN_0
//PA口时钟使能
#define KEYUP_GPIO_CLK_ENABLE() do{__HAL_RCC_GPIOA_CLK_ENABLE();}while(0)
#define KEYUP_INT_IRQN EXTI0_IRQn
#define KEYUP_INT_IRQHandler EXTI0_IRQHander
void exti_init();
#endif
#include "./BSP/EXTI/exti.h"
#include "./SYSTEM/delay/delay.h"
#include "./BSP/LED/led.h"
void exti_init()
{
GPIO_InitTypeDef gpio_init_struct;
//使能时钟
KEY0_GPIO_CLK_ENABLE();
KEY1_GPIO_CLK_ENABLE();
KEYUP_GPIO_CLK_ENABLE();
//key0对结构体内容初始化
gpio_init_struct.Pin=KEY0_GPIO_PIN;
gpio_init_struct.Mode=GPIO_MODE_IT_FALLING;
gpio_init_struct.Pull=GPIO_PULLUP;
HAL_GPIO_Init(KEY0_INT_GPIO_PORT,&gpio_init_struct);
//key1对结构体内容初始化
gpio_init_struct.Pin=KEY1_GPIO_PIN;
gpio_init_struct.Mode=GPIO_MODE_IT_FALLING;
gpio_init_struct.Pull=GPIO_PULLUP;
HAL_GPIO_Init(KEY1_INT_GPIO_PORT,&gpio_init_struct);
//keyup对结构体内容初始化
gpio_init_struct.Pin=KEYUP_GPIO_PIN;
gpio_init_struct.Mode=GPIO_MODE_IT_RISING;
gpio_init_struct.Pull=GPIO_PULLDOWN;
HAL_GPIO_Init(KEYUP_INT_GPIO_PORT,&gpio_init_struct);
HAL_NVIC_SetPriority(KEY0_INT_IRQN,0,2);
HAL_NVIC_EnableIRQ(KEY0_INT_IRQN);
HAL_NVIC_SetPriority(KEY1_INT_IRQN,1,2);
HAL_NVIC_EnableIRQ(KEY1_INT_IRQN);
HAL_NVIC_SetPriority(KEYUP_INT_IRQN,3,2);
HAL_NVIC_EnableIRQ(KEYUP_INT_IRQN);
}
//外部中断服务程序
void KEY0_INT_IRQHandler()
{
HAL_GPIO_EXTI_IRQHandler(KEY0_GPIO_PIN);//中断处理公用函数
__HAL_GPIO_EXTI_CLEAR_IT(KEY0_GPIO_PIN);
}
void KEY1_INT_IRQHandler()
{
HAL_GPIO_EXTI_IRQHandler(KEY1_GPIO_PIN);
__HAL_GPIO_EXTI_CLEAR_IT(KEY1_GPIO_PIN);
}
void KEYUP_INT_IRQHandler()
{
HAL_GPIO_EXTI_IRQHandler(KEYUP_GPIO_PIN);
__HAL_GPIO_EXTI_CLEAR_IT(KEYUP_GPIO_PIN);
}
//中断处理回调函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
delay_ms(20);
switch(GPIO_Pin)
{
case KEY0_GPIO_PIN:
if (HAL_GPIO_ReadPin(KEY0_INT_GPIO_PORT,KEY0_GPIO_PIN)==0)
{
LED0_TOGGLE();
LED1_TOGGLE();
}
break;
case KEY1_GPIO_PIN:
if (HAL_GPIO_ReadPin(KEY1_INT_GPIO_PORT,KEY1_GPIO_PIN)==0)
{
LED1_TOGGLE();
}
break;
case KEYUP_GPIO_PIN:
if (HAL_GPIO_ReadPin(KEYUP_INT_GPIO_PORT,KEYUP_GPIO_PIN))
{
LED1_TOGGLE();
}
break;
}
}
/**
****************************************************************************************************
* @file main.c
* @Author ÕýµãÔ­×ÓÍŶÓ(ALIENTEK)
* @version V1.0
* @date 2020-04-20
* @brief ÅÜÂíµÆ ʵÑé
* @license Copyright (c) 2020-2032, ¹ãÖÝÊÐÐÇÒíµç×ӿƼ¼ÓÐÏÞ¹«Ë¾
****************************************************************************************************
* @attention
*
* ʵÑéƽ̨:ÕýµãÔ­×Ó STM32F103¿ª·¢°å
* ÔÚÏßÊÓƵ:www.yuanzige.com
* ¼¼ÊõÂÛ̳:www.openedv.com
* ¹«Ë¾ÍøÖ·:www.alientek.com
* ¹ºÂòµØÖ·penedv.taobao.com
*
****************************************************************************************************
*/
#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/delay/delay.h"
#include "./SYSTEM/usart/usart.h"
#include "./BSP/LED/led.h"
#include "./BSP/EXTI/exti.h"
int main(void)
{
HAL_Init(); /* ³õʼ»¯HAL¿â */
sys_stm32_clock_init(RCC_PLL_MUL9); /* ÉèÖÃʱÖÓ,72M */
delay_init(72); /* ³õʼ»¯ÑÓʱº¯Êý */
led_init(); /* ³õʼ»¯LED */
exti_init();
//LED1(0);
while(1)
{
LED0(0); /* LED0 ÁÁ */
// LED1(1); /* LED1 Ãð */
delay_ms(500);
LED0(1); /* LED0 Ãð */
//LED1(0); /* LED1 ÁÁ */
delay_ms(500);
}
}
|
|