找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2884|回复: 5
收起左侧

STM32 无法进入中断

[复制链接]
ID:367329 发表于 2018-7-8 15:04 | 显示全部楼层 |阅读模式
我想使用PB8引脚作为中断的输入口,但是初始化后死活进不去中断,求大神们指教。


void PB8_IrDA_Init(void)
{
        GPIO_InitTypeDef  GPIO_InitStructure;
        EXTI_InitTypeDef  EXTI_InitStructure;                                        // 定义一个EXTI结构体变量
        NVIC_InitTypeDef  NVIC_InitStructure;       
       
               
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOB, ENABLE);        // 使能IO复用功能,使用中断功能重要!!!
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;              //PB8为输入口
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;   //浮空输入
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;      //速度为50MHz
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
        GPIO_Init(GPIOB,&GPIO_InitStructure);

       
        EXTI_ClearITPendingBit(EXTI_Line8);
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource8);        //PB8为中断       
        EXTI_InitStructure.EXTI_Line = EXTI_Line8;
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                //中断模式为外部中断模式
        EXTI_InitStructure.EXTI_Trigger = EXTI_TriggerFalling;        //下降沿触
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;                                //使能中断线
        EXTI_Init( &EXTI_InitStructure);                                                //根据参数初始化中断寄存器
       
       
        //NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
        NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;                        //设定中断源为PB8
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;        //中断占优先级为1
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;                        //副优先级为3
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                //使能中断
        NVIC_Init( &NVIC_InitStructure);                                                        //根据参数初始化中断寄存器
       
       
       
}


//
//
//
void EXTI9_5_IRQHandler(void)        // IR引脚为PinB_8
{
        if (RESET != EXTI_GetITStatus(EXTI_Line8)  )         // 判断是否发生中断,发生则中断标志置1
        {
                IsEvnt_IrDA =TRUE;
                EXTI_ClearITPendingBit(EXTI_Line8);
        }
       
}

回复

使用道具 举报

ID:308437 发表于 2018-7-8 16:14 | 显示全部楼层
  EXTI_ClearITPendingBit(EXTI_Line8);
你把这句去掉,试试。我记得原子的历程是不用清除标志的,可以直接挂载(F103芯片)

评分

参与人数 1黑币 +40 收起 理由
admin + 40 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:367329 发表于 2018-7-8 16:59 | 显示全部楼层
yousunny 发表于 2018-7-8 16:14
EXTI_ClearITPendingBit(EXTI_Line8);
你把这句去掉,试试。我记得原子的历程是不用清除标志的,可以直 ...

去除了也不行啊,也不清楚是哪里出了问题
回复

使用道具 举报

ID:308437 发表于 2018-7-9 11:35 | 显示全部楼层
守望夜空的南瓜 发表于 2018-7-8 16:59
去除了也不行啊,也不清楚是哪里出了问题

额,你在看一下。照这样理论上是可以的
回复

使用道具 举报

ID:367842 发表于 2018-7-9 11:56 | 显示全部楼层
中断优先级分组,去掉了吗?
回复

使用道具 举报

ID:367329 发表于 2018-7-9 14:51 | 显示全部楼层
一念永恒 发表于 2018-7-9 11:56
中断优先级分组,去掉了吗?

很奇怪,我也觉得是可行的,但是就是进不去,而且这个IO口的状态我现在都读取不了
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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