金牌会员
 
- 积分
- 1403
- 金钱
- 1403
- 注册时间
- 2021-4-28
- 在线时间
- 525 小时
|

楼主 |
发表于 2021-5-30 21:37:46
|
显示全部楼层
本帖最后由 CJC529 于 2021-5-31 12:14 编辑
#include <stm32f10x.h>
#include <led.h>
#include <sys.h>
#include <beep.h>
#include <delay.h>
#include <key.h>
void exio_Init()
{
EXTI_InitTypeDef EXTI_InitStruct;
NVIC_InitTypeDef NVIC_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //使能复用时钟
key_init();
LED_Init();
//外部中断3
GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource3); //设置IO口与中断线的映射关系
EXTI_InitStruct.EXTI_Line=EXTI_Line3;
EXTI_InitStruct.EXTI_LineCmd=ENABLE;
EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStruct.EXTI_Trigger= EXTI_Trigger_Falling;
EXTI_Init(&EXTI_InitStruct);
//外部中断0
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);
EXTI_InitStruct.EXTI_Line=EXTI_Line0;
EXTI_InitStruct.EXTI_LineCmd=ENABLE;
EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStruct.EXTI_Trigger= EXTI_Trigger_Rising;
EXTI_Init(&EXTI_InitStruct);
//设置外部中断0的中断优先级 为抢占优先级为2 响应优先级为2
NVIC_InitStruct.NVIC_IRQChannel=EXTI0_IRQn;
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0x02;
NVIC_InitStruct.NVIC_IRQChannelSubPriority=0x01;
NVIC_Init(&NVIC_InitStruct);
//设置外部中断3的中断优先级 为抢占优先级为3 响应优先级为2
NVIC_InitStruct.NVIC_IRQChannel=EXTI3_IRQn;
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0x03;
NVIC_InitStruct.NVIC_IRQChannelSubPriority=0x02;
NVIC_Init(&NVIC_InitStruct);
}
void EXTI0_IRQHandler(void) //WK_UP外部中断0的中断优先级 为抢占优先级为2 响应优先级为2
{
delay_ms(50);
if(WK_UP==1)
{
LED0=0;
LED1=0;
BEEP=0;
}
EXTI_ClearITPendingBit(EXTI_Line0);
}
void EXTI3_IRQHandler(void) // KEY1设置外部中断4的中断优先级 为抢占优先级为3 响应优先级为2
{
delay_ms(50);
if(KEY1==0)
{ LED0=1;
LED1=1;
while(1)
{
BEEP=1;
EXTI_ClearITPendingBit(EXTI_Line3);
}
}
}
结果是WK_UP按键无法打断 KEY1中的死循环
|
|