OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3933|回复: 3

新手请教,写了一个外部中断的按键程序,按下去以后中断服务程序不执行

[复制链接]

6

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2017-3-22
在线时间
8 小时
发表于 2017-3-22 12:56:23 | 显示全部楼层 |阅读模式
#include "stm32f10x.h"
#include "delay.h"

//#define KEY0  PEin(4)
#define KEY0 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)
#define LEDO PBout(5)
#define LED1 PEout(5)

int main(void)
{
        EXTI_InitTypeDef EXTI_Initstrue;
        NVIC_InitTypeDef NVIC_Initstrue;
        GPIO_InitTypeDef GPIO_Initstruct;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOB,ENABLE);//使能PE PB时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//配置外部EXTI4时钟
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource4);//映射GPIO->外部中断
       
        GPIO_Initstruct.GPIO_Pin=GPIO_Pin_4;
        GPIO_Initstruct.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Initstruct.GPIO_Mode=GPIO_Mode_IPU;
        GPIO_Init(GPIOE,&GPIO_Initstruct);//配置KEY0(PE.4)上拉输入
        GPIO_SetBits(GPIOE,GPIO_Pin_4);
       
        GPIO_Initstruct.GPIO_Pin=GPIO_Pin_5;
        GPIO_Initstruct.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Initstruct.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_Init(GPIOE,&GPIO_Initstruct);//配置LED1(PE.5)推挽输出
        GPIO_Init(GPIOB,&GPIO_Initstruct);//配置LED0(PB.5)推挽输出
        GPIO_SetBits(GPIOB,GPIO_Pin_5);
        GPIO_SetBits(GPIOE,GPIO_Pin_5);

        EXTI_Initstrue.EXTI_Line=EXTI_Line4;
        EXTI_Initstrue.EXTI_LineCmd=ENABLE;
        EXTI_Initstrue.EXTI_Mode=EXTI_Mode_Interrupt;
        EXTI_Initstrue.EXTI_Trigger=EXTI_Trigger_Falling;
        EXTI_Init(&EXTI_Initstrue);                                                        //外部中断初始化

        NVIC_Initstrue.NVIC_IRQChannel=EXTI4_IRQn;
        NVIC_Initstrue.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Initstrue.NVIC_IRQChannelPreemptionPriority=2;
        NVIC_Initstrue.NVIC_IRQChannelSubPriority=2;
        NVIC_Init(&NVIC_Initstrue);
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);                //中断优先级分组
       
        while(1)
        {
                LEDO=1;
                LED1=0;
        }
}

void EXTI4_IRQHandler()
{
        delay_ms(10);
        if(KEY0==0)
        {
                LEDO=0  //点亮LED0;
                LED1=1;
        }
        EXTI_ClearITPendingBit(EXTI_Line4);
}
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

28

主题

93

帖子

0

精华

高级会员

Rank: 4

积分
572
金钱
572
注册时间
2015-8-3
在线时间
113 小时
发表于 2017-3-22 13:16:21 | 显示全部楼层
你测试过中断服务函数吗?你这个程序单步调试很简单嘛,这种问题应该自己先查下原因,
回复 支持 反对

使用道具 举报

6

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2017-3-22
在线时间
8 小时
 楼主| 发表于 2017-3-22 13:54:36 | 显示全部楼层
影__ 发表于 2017-3-22 13:16
你测试过中断服务函数吗?你这个程序单步调试很简单嘛,这种问题应该自己先查下原因,

给了延时也不行呀
回复 支持 反对

使用道具 举报

10

主题

98

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
319
金钱
319
注册时间
2017-1-20
在线时间
51 小时
发表于 2017-4-18 11:38:34 | 显示全部楼层
是 EXTI4_IRQHandler 不执行么?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-22 01:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表