你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

在解除pb3的JTAG调试后设置STM32F103C8T6的PB3作为外部中断一直失败,无法进入3中断一直进入15中断,请各位大佬帮忙解答疑惑

[复制链接]
cy1370 提问时间:2023-12-3 17:49 / 已解决
void Encoder_Init(void)
{

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

        GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

        GPIO_InitTypeDef GPIO_InitStructure;

        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);




        EXTI_InitTypeDef EXTI_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;

        GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource15);
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource3);

        EXTI_InitStructure.EXTI_Line =EXTI_Line4 | EXTI_Line15;
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
        EXTI_Init(&EXTI_InitStructure);

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

        NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
        NVIC_Init(&NVIC_InitStructure);




        NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
        NVIC_Init(&NVIC_InitStructure);

}
void EXTI15_10_IRQHandler(void)
{
        if (EXTI_GetITStatus(EXTI_Line15) == SET)
        {
                /*如果出现数据乱跳的现象,可再次判断引脚电平,以避免抖动*/
                if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_15) == 0)
                {
                        if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_3) == 0)
                        {
                                Encoder_Count --;
                        }
                }
                EXTI_ClearITPendingBit(EXTI_Line15);
        }
}

void EXTI3_IRQHandler(void)
{
        if (EXTI_GetITStatus(EXTI_Line3) == SET)
        {
                /*如果出现数据乱跳的现象,可再次判断引脚电平,以避免抖动*/
                if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_3) == 0)
                {
                        if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_15) == 0)
                        {
                                Encoder_Count ++;
                        }
                }
                EXTI_ClearITPendingBit(EXTI_Line3);
        }
}
收藏 评论5 发布时间:2023-12-3 17:49

举报

5个回答
cy1370 回答时间:2023-12-3 19:55:19

PB4是可以设置成外部中断的,PB3设置不了中断,也没有办法作为一般io使用

butterflyspring 回答时间:2023-12-4 10:18:53
初步看了一下,楼主的代码中似乎连接了PB3的中断,但是却初始化了外部中断线4.

看看是不是这个原因导致外部中断3没有响应。
星海灿烂 回答时间:2023-12-4 10:28:52

配置问题

image.png

废鱼 回答时间:2023-12-4 20:59:07

楼主,您好。您这个配置中没有3的中断,是4的中断。

cy1370 回答时间:2024-1-7 05:09:03

cy1370 发表于 2023-12-3 19:55
PB4是可以设置成外部中断的,PB3设置不了中断,也没有办法作为一般io使用
...

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);

开始需要按照这样开启时钟顺序,必须先启用引脚重定义afio,再关闭SWD调试,就不会出现类似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版