初级会员

- 积分
- 182
- 金钱
- 182
- 注册时间
- 2018-10-17
- 在线时间
- 54 小时
|
1金钱
#include "stm32f10x.h"
#include "delay.h"
#define LED0_ON() GPIO_ResetBits(GPIOB,GPIO_Pin_5)
#define LED0_OFF() GPIO_SetBits(GPIOB,GPIO_Pin_5)
#define LED1_ON() GPIO_ResetBits(GPIOB,GPIO_Pin_15)
#define LED1_OFF() GPIO_SetBits(GPIOB,GPIO_Pin_15)
void GPIO_Config(void);
void NVIC_Config(void);
void EXTI_Config(void);
void EXTI2_IRQHandler(void);
void EXTI3_IRQHandler(void);
u8 i = 0;
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
delay_init(72); //初始化时钟
GPIO_Config();
NVIC_Config();
EXTI_Config();
EXTI2_IRQHandler();
EXTI3_IRQHandler();
LED0_OFF();
LED1_OFF();
while(1)
{
}
}
void GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_Initstruction;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE,ENABLE);
/* LED0 LED1*/
GPIO_Initstruction.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_15;
GPIO_Initstruction.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Initstruction.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_Initstruction);
/* KEY2 KEY3 */
GPIO_Initstruction.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_3;
GPIO_Initstruction.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Initstruction.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOE, &GPIO_Initstruction);
}
void NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStruction;
NVIC_InitStruction.NVIC_IRQChannel=EXTI2_IRQn;
NVIC_InitStruction.NVIC_IRQChannelPreemptionPriority=0x01;
NVIC_InitStruction.NVIC_IRQChannelSubPriority=0x01;
NVIC_InitStruction.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStruction);
NVIC_InitStruction.NVIC_IRQChannel=EXTI3_IRQn;
NVIC_InitStruction.NVIC_IRQChannelPreemptionPriority=0x01;
NVIC_InitStruction.NVIC_IRQChannelSubPriority=0x03;
NVIC_InitStruction.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStruction);
}
void EXTI_Config(void)
{
EXTI_InitTypeDef EXTI_InitStruction;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource2);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource3);
EXTI_InitStruction.EXTI_Line=EXTI_Line2;
EXTI_InitStruction.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStruction.EXTI_Trigger=EXTI_Trigger_Falling;
EXTI_InitStruction.EXTI_LineCmd=ENABLE;
EXTI_Init(&EXTI_InitStruction);
EXTI_InitStruction.EXTI_Line=EXTI_Line3;
EXTI_InitStruction.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStruction.EXTI_Trigger=EXTI_Trigger_Falling;
EXTI_InitStruction.EXTI_LineCmd=ENABLE;
EXTI_Init(&EXTI_InitStruction);
}
void EXTI2_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line2)!= RESET)
{
for(i=0;i<10;i++)
{
LED0_ON();
delay_ms(500);
LED0_OFF();
delay_ms(500);
}
}
EXTI_ClearITPendingBit(EXTI_Line2);
}
void EXTI3_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line3)!= RESET)
{
for(i=0;i<10;i++)
{
LED1_ON();
delay_ms(1000);
LED1_OFF();
delay_ms(1000);
}
}
EXTI_ClearITPendingBit(EXTI_Line3);
}
配置没问题,是不是还缺少东西,怎么优先级就是实现不了
|
最佳答案
查看完整内容[请看2#楼]
具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套在低抢占式优先级的中断中。当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优 ...
|