为什么我的stm32中断处理程序没有响应?
2019-03-23 20:29发布
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
- 为什么我的stm32中断处理程序没有响应?
PA1->LED1 PA2->LED2
PC0->KEY1 PC1->KEY2
主程序
#include "stm32f10x.h"
#include "stm32f10x_conf.h"
extern void Delay(vu32 nCount);
void RCC_Config(void);
void GPIO_Config(void);
void EXTI_Config(void);
void NVIC_Config(void);
int main(void)
{
//SystemInit();
RCC_Config();
GPIO_Config();
EXTI_Config();
NVIC_Config();
while (1)
{
}
}
void RCC_Config(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);
/*开时钟*/
}
void GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_1|GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0|GPIO_Pin_1;//KEY
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
void EXTI_Config(void)
{
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource0);
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_InitStructure.EXTI_Line = EXTI_Line0;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿
EXTI_InitStructure.EXTI_LineCmd = ENABLE;//中断使能
EXTI_Init(&EXTI_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, 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);
}
void NVIC_Config(void)//中断嵌套优先级设置
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//1组
/* Enable the EXTI0_IRQn Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;//0
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
/* Enable the EXTI1 Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;//1
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
中断处理程序
void EXTI0_IRQHandler(void)
{
int i;
if(EXTI_GetITStatus(EXTI_Line0) != RESET)
{
/* Clear the Key Button EXTI line pending bit */
EXTI_ClearITPendingBit(EXTI_Line0);//清中断标志位
for(i=0;i<2;i++)
{
GPIO_SetBits(GPIOA, GPIO_Pin_1);//GPIOB.5=1
Delay(0xfffff);
GPIO_SetBits(GPIOA, GPIO_Pin_2);//GPIOB.6=1
Delay(0xfffff);
GPIO_ResetBits(GPIOA, GPIO_Pin_1);//GPIOB.5=0
Delay(0xfffff);
GPIO_ResetBits(GPIOA, GPIO_Pin_2);//GPIOB.6=0
Delay(0xfffff);
}
}
}
void EXTI1_IRQHandler(void)
{
int i;
if(EXTI_GetITStatus(EXTI_Line1) != RESET)
{
/* Clear the Key Button EXTI line pending bit */
EXTI_ClearITPendingBit(EXTI_Line1);//清中断标志位
for(i=0;i<2;i++)
{
GPIO_SetBits(GPIOA, GPIO_Pin_1);//GPIOB.7=1
Delay(0xfffff);
GPIO_SetBits(GPIOA, GPIO_Pin_2);//GPIOC.8=1
Delay(0xfffff);
GPIO_ResetBits(GPIOA, GPIO_Pin_1);//GPIOB.7=0
Delay(0xfffff);
GPIO_ResetBits(GPIOA, GPIO_Pin_2);//GPIOB.8=0
Delay(0xfffff);
}
}
}
extern void Delay(vu32 nCount) //简单的长时间延时函数
{
int i; //声明内部递减变量
for(; nCount!= 0; nCount--) //递减变量计数
{
for (i=0; i<0xffff; i++);
}
}
复制代码
此帖出自
小平头技术问答
一周热门 更多>