新手入门
- 积分
- 12
- 金钱
- 12
- 注册时间
- 2019-11-28
- 在线时间
- 2 小时
|
1金钱
自己写一个外部中断程序,只有PA0对应的中断有效,PE2-PE3对应的都无效,对着例程看了改了好久也没效果,求哪位大佬帮忙看看是哪里出了问题
#include "stm32f4xx.h"
#include "sys.h"
#include "misc.h"
#include "delay.h"
int main(void)
{
GPIO_InitTypeDef gpio;
EXTI_InitTypeDef exti;
NVIC_InitTypeDef nvic;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockLPModeCmd(RCC_APB2Periph_SYSCFG,ENABLE);
delay_init(168);
gpio.GPIO_Pin=GPIO_Pin_8;
gpio.GPIO_Mode=GPIO_Mode_OUT;
gpio.GPIO_OType=GPIO_OType_PP;
gpio.GPIO_Speed=GPIO_Fast_Speed;
gpio.GPIO_PuPd=GPIO_PuPd_DOWN;
GPIO_Init(GPIOF,&gpio);
GPIO_ResetBits(GPIOF,GPIO_Pin_8);
gpio.GPIO_Pin=GPIO_Pin_9;
gpio.GPIO_Mode=GPIO_Mode_OUT;
gpio.GPIO_OType=GPIO_OType_PP;
gpio.GPIO_Speed=GPIO_Fast_Speed;
gpio.GPIO_PuPd=GPIO_PuPd_UP;
GPIO_Init(GPIOF,&gpio);
GPIO_ResetBits(GPIOF,GPIO_Pin_9);
gpio.GPIO_Pin=GPIO_Pin_10;
gpio.GPIO_Mode=GPIO_Mode_OUT;
gpio.GPIO_OType=GPIO_OType_PP;
gpio.GPIO_Speed=GPIO_Fast_Speed;
gpio.GPIO_PuPd=GPIO_PuPd_UP;
GPIO_Init(GPIOF,&gpio);
GPIO_ResetBits(GPIOF,GPIO_Pin_10);
gpio.GPIO_Pin=GPIO_Pin_0;
gpio.GPIO_Mode=GPIO_Mode_IN;
gpio.GPIO_Speed=GPIO_Fast_Speed;
gpio.GPIO_PuPd=GPIO_PuPd_DOWN;
GPIO_Init(GPIOA,&gpio);
gpio.GPIO_Pin=GPIO_Pin_2;
gpio.GPIO_Mode=GPIO_Mode_IN;
gpio.GPIO_Speed=GPIO_Fast_Speed;
gpio.GPIO_PuPd=GPIO_PuPd_UP;
GPIO_Init(GPIOE,&gpio);
gpio.GPIO_Pin=GPIO_Pin_3;
gpio.GPIO_Mode=GPIO_Mode_IN;
gpio.GPIO_Speed=GPIO_Fast_Speed;
gpio.GPIO_PuPd=GPIO_PuPd_UP;
GPIO_Init(GPIOE,&gpio);
gpio.GPIO_Pin=GPIO_Pin_4;
gpio.GPIO_Mode=GPIO_Mode_IN;
gpio.GPIO_Speed=GPIO_Fast_Speed;
gpio.GPIO_PuPd=GPIO_PuPd_UP;
GPIO_Init(GPIOE,&gpio);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource0);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource2);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource3);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource4);
exti.EXTI_Line=EXTI_Line0;
exti.EXTI_LineCmd=ENABLE;
exti.EXTI_Mode=EXTI_Mode_Interrupt;
exti.EXTI_Trigger=EXTI_Trigger_Rising;
EXTI_Init(&exti);
exti.EXTI_Line=EXTI_Line2;
exti.EXTI_LineCmd=ENABLE;
exti.EXTI_Mode=EXTI_Mode_Interrupt;
exti.EXTI_Trigger=EXTI_Trigger_Falling;
EXTI_Init(&exti);
exti.EXTI_Line=EXTI_Line3;
exti.EXTI_LineCmd=ENABLE;
exti.EXTI_Mode=EXTI_Mode_Interrupt;
exti.EXTI_Trigger=EXTI_Trigger_Falling;
EXTI_Init(&exti);
exti.EXTI_Line=EXTI_Line4;
exti.EXTI_LineCmd=ENABLE;
exti.EXTI_Mode=EXTI_Mode_Interrupt;
exti.EXTI_Trigger=EXTI_Trigger_Falling;
EXTI_Init(&exti);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
nvic.NVIC_IRQChannel=EXTI0_IRQn;
nvic.NVIC_IRQChannelCmd=ENABLE;
nvic.NVIC_IRQChannelPreemptionPriority=0x00;
nvic.NVIC_IRQChannelSubPriority=0x02;
NVIC_Init(&nvic);
nvic.NVIC_IRQChannel=EXTI2_IRQn;
nvic.NVIC_IRQChannelCmd=ENABLE;
nvic.NVIC_IRQChannelPreemptionPriority=0x01;
nvic.NVIC_IRQChannelSubPriority=0x02;
NVIC_Init(&nvic);
nvic.NVIC_IRQChannel=EXTI3_IRQn;
nvic.NVIC_IRQChannelCmd=ENABLE;
nvic.NVIC_IRQChannelPreemptionPriority=0x02;
nvic.NVIC_IRQChannelSubPriority=0x02;
NVIC_Init(&nvic);
nvic.NVIC_IRQChannel=EXTI4_IRQn;
nvic.NVIC_IRQChannelCmd=ENABLE;
nvic.NVIC_IRQChannelPreemptionPriority=0x03;
nvic.NVIC_IRQChannelSubPriority=0x02;
NVIC_Init(&nvic);
for(;;);
}
void EXTI0_IRQHandler(void)
{
delay_ms(10);
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==1)
{
PFout(8)=!PFout(8);
}
EXTI_ClearITPendingBit(EXTI_Line0);
}
void EXTI2_IRQHandler(void)
{
delay_ms(10);
if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0)
{
PFout(9)=!PFout(9);
}
EXTI_ClearITPendingBit(EXTI_Line2);
}
void EXTI3_IRQHandler(void)
{
delay_ms(10);
if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)==0)
{
PFout(10)=!PFout(10);
}
EXTI_ClearITPendingBit(EXTI_Line3);
}
void EXTI4_IRQHandler(void)
{
delay_ms(10);
if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)==0)
{
PFout(9)=!PFout(9);
PFout(10)=!PFout(10);
}
EXTI_ClearITPendingBit(EXTI_Line4);
}
|
|