弄了一下午还是没有解决,请各位帮忙看看
问题描述:PB1和PC13的中断只能进去一个,取决于最先触发的哪个哪个就能进去,如果接着触发另一个是没反应的,而且会导致第一个正常的也无法进入中断了。
(用PWM控制LED灯,当led0pwmvalx = 10 灯是亮的,led0pwmvalx = 899 灯是灭的 )
主函数
[mw_shl_code=c,true]#include "stm32f10x.h"
#include"led.h"
#include"exti.h"
#include "pwm.h"
#include "sys.h"
#include"exti_PB1.h"
#include"exti_PC13.h"
#include"ADC.h"
#include "delay.h"
#include"LED_Control_algorithm.h"
int main(void)
{
delay_init(); //延时初始化
TIM1_PWM_Init(899,0); //PWM开启
NVIC_Configuration_sys(); //中断分组
EXTI_PB1_Config(); //PB1中断初始化
EXTI_PC13_Config();//PC13中断初始化
led0pwmval1=led0pwmval2=10;
while(1)
{
TIM_SetCompare1(TIM1,led0pwmval1);
TIM_SetCompare4(TIM1,led0pwmval2);
}
}
[/mw_shl_code]
[mw_shl_code=c,true]#include"exti_PB1.h"
void EXTI_PB1_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
/*外设时钟+AFIO时钟 使能*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
NVIC_Configuration();
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource1);
EXTI_InitStructure.EXTI_Line = EXTI_Line1;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling ;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
}
static void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
// NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //中断优先级分配方式
/*配置中断源*/
NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
[/mw_shl_code]
[mw_shl_code=c,true]#include"exti_PC13.h"
void EXTI_PC13_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
/*外设时钟+AFIO时钟 使能*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE);
NVIC_Configuration();
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13);
EXTI_InitStructure.EXTI_Line = EXTI_Line13 | EXTI1_IRQn;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling ;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
}
static void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
//NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //中断优先级分配方式
/*配置中断源*/
NVIC_InitStructure.NVIC_IRQChannel =EXTI15_10_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
[/mw_shl_code]
中断函数
[mw_shl_code=c,true]void EXTI1_IRQHandler()//1?LED?????
{
delay_ms(10); //??
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1) == 0)
{
if(EXTI_GetITStatus(EXTI_Line1)!=RESET)
{
if(led0pwmval2==10)
led0pwmval2=899;
else led0pwmval2=10;
EXTI_ClearITPendingBit(EXTI_Line1);
}
}
}
void EXTI15_10_IRQHandler()//1?LED?????
{
delay_ms(10); //??
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13) == 0)
{
if(EXTI_GetITStatus(EXTI_Line13)!=RESET)
{
if(led0pwmval1==10)
led0pwmval1=899;
else led0pwmval1=10;
EXTI_ClearITPendingBit(EXTI_Line13);
}
}
}[/mw_shl_code]
|