我的按键写了中断但是没有用
想请各位帮我看看是什么原因
Key.c
#include "stm32f10x.h"
#include "LED.h"
#define KEY1_INT_GPIO_PORT GPIOB//组 PB
#define KEY1_INT_GPIO_CLK (RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO)//时钟需要开启AFIO 配置中断 APB2
#define KEY1_INT_GPIO_PIN GPIO_Pin_10//引脚
#define KEY1_INT_EXTI_PORTSOURCE GPIO_PortSourceGPIOB//端口
#define KEY1_INT_EXTI_PINSOURCE GPIO_PinSource10//引脚
#define KEY1_INT_EXTI_LINE EXTI_Line10//中断线
#define KEY1_INT_EXTI_IRQ EXTI0_IRQn//中断源中断/事件
#define KEY1_IRQHandler EXTI0_IRQHandler//中断服务函数
static void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
/*优先级选择,组1 */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
/* 中断源 */
NVIC_InitStructure.NVIC_IRQChannel = KEY1_INT_EXTI_IRQ;
/* 主优先级*/
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
/*子优先级*/
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
/*使能中断*/
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
//初始化
NVIC_Init(&NVIC_InitStructure);
}
void EXTI_Key_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
/*时钟设置*/
RCC_APB2PeriphClockCmd(KEY1_INT_GPIO_CLK,ENABLE);
/* NVIC中断*/
NVIC_Configuration();
/*按键使用的GPIO*/
GPIO_InitStructure.GPIO_Pin = KEY1_INT_GPIO_PIN;
/* 浮空 */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(KEY1_INT_GPIO_PORT, &GPIO_InitStructure);
/* 选择EXTI信号源 Selects the GPIO pin used as EXTI Line */
GPIO_EXTILineConfig(KEY1_INT_EXTI_PORTSOURCE, KEY1_INT_EXTI_PINSOURCE);
/*中断事件*/
EXTI_InitStructure.EXTI_Line = KEY1_INT_EXTI_LINE;
/* 中断模式*/
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
/* 触发模式,上升沿*/
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
/* 使能 */
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
}
Key.h
#ifndef __KEY_H
#define __KEY_H
#define KEY1_INT_GPIO_PORT GPIOB//组 PB
#define KEY1_INT_GPIO_CLK (RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO)//时钟需要开启AFIO 配置中断 APB2
#define KEY1_INT_GPIO_PIN GPIO_Pin_10//引脚
#define KEY1_INT_EXTI_PORTSOURCE GPIO_PortSourceGPIOB//端口
#define KEY1_INT_EXTI_PINSOURCE GPIO_PinSource10//引脚
#define KEY1_INT_EXTI_LINE EXTI_Line10//中断线
#define KEY1_INT_EXTI_IRQ EXTI0_IRQn//中断源中断/事件
#define KEY1_IRQHandler EXTI0_IRQHandler//中断服务函数
static void NVIC_Configuration(void);
void EXTI_Key_Config(void);
void KEY1_IRQHandler(void);
#endif
main.c
#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "LED.h"
#include "Key.h"
#include "PWM.h"
#define KEY1_INT_GPIO_PORT GPIOB//组 PB
#define KEY1_INT_GPIO_CLK (RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO)//时钟需要开启AFIO 配置中断 APB2
#define KEY1_INT_GPIO_PIN GPIO_Pin_10//引脚
#define KEY1_INT_EXTI_PORTSOURCE GPIO_PortSourceGPIOB//端口
#define KEY1_INT_EXTI_PINSOURCE GPIO_PinSource10//引脚
#define KEY1_INT_EXTI_LINE EXTI_Line10//中断线
#define KEY1_INT_EXTI_IRQ EXTI0_IRQn//中断源中断/事件
#define KEY1_IRQHandler EXTI0_IRQHandler//中断服务函数
uint8_t KeyNum;
int j=500;
//流水灯点亮(从中间向两边)
//显示指定次数的呼吸灯
void led_breath_show(uint8_t num_times)
{
for (uint8_t i = 0; i < num_times; ++i)
{
for (uint16_t i = 0; i <= 100; ++i)
{
PWM_SetCompare3(i);
Delay_ms(10);
}
for (uint16_t i = 0; i <= 100; ++i)
{
PWM_SetCompare3(100 - i);
Delay_ms(10);
}
}
}
void led_waterfall_up(void)
{
static const uint16_t waterfall_sequence[] = {~0x18, ~0x3C, ~0x7E, ~0xFF};
for (uint8_t i = 0; i < sizeof(waterfall_sequence) / sizeof(waterfall_sequence[0]); ++i)
{
GPIO_Write(GPIOA, waterfall_sequence[i]);
Delay_ms(500+j);
}
}
void led_waterfall_down(void)
{
static const uint16_t waterfall_sequence[] = {~0x7E, ~0x3C, ~0x18, ~0x00};
for (uint8_t i = 0; i < sizeof(waterfall_sequence) / sizeof(waterfall_sequence[0]); ++i)
{
GPIO_Write(GPIOA, waterfall_sequence[i]);
Delay_ms(500+j);
}
}
void KEY1_IRQHandler(void)
{
//获取中断线EXTI line状态
if(EXTI_GetITStatus(KEY1_INT_EXTI_LINE) != RESET)
{
//翻转LED灯
void LED1_Turn(void);
EXTI_ClearITPendingBit(KEY1_INT_EXTI_LINE);
}
}
int main(void)
{
PWM_Init();
//Key_Init();
KEY1_IRQHandler();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
while (1)
{
//KeyNum = Key_GetNum();
led_waterfall_up();
led_breath_show(5);
led_waterfall_down();
led_breath_show(6);
}