打印
[STM32F1]

在解除pb3的JTAG调试后设置STM32F103C8T6的PB3作为外部中断一直失败,无法进入3中断一直进入15中断的原因?

[复制链接]
188|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
laocuo1142|  楼主 | 2024-3-14 11:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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);        }}

使用特权

评论回复
沙发
夜阑风雨| | 2024-4-20 10:35 | 只看该作者
在解除 PB3 的 JTAG 调试后,需要将 PB3 配置为外部中断输入模式。

使用特权

评论回复
板凳
光辉梦境| | 2024-4-20 13:00 | 只看该作者
建议确保正确配置了 PB3 的复用功能和外部中断触发条件。

使用特权

评论回复
地板
暖了夏天蓝了海| | 2024-4-20 15:00 | 只看该作者
最好需要使用 GPIO_Init() 函数来配置 PB3 为外部中断输入模式,并设置触发条件(上升沿、下降沿等)。

使用特权

评论回复
5
冰春彩落下| | 2024-4-20 17:00 | 只看该作者
在 STM32 中,中断优先级需要正确设置才能确保正确的中断触发顺序。检查 3 号和 15 号中断的优先级设置,确保 3 号中断的优先级高于15号中断。可以使用 NVIC_SetPriority() 函数来设置中断优先级

使用特权

评论回复
6
别乱了阵脚| | 2024-4-20 19:00 | 只看该作者
在配置外部中断时,需要注意其他中断的屏蔽设置。确保没有屏蔽掉 3 号中断,同时也没有使能 15 号中断。

使用特权

评论回复
7
江河千里| | 2024-4-20 23:00 | 只看该作者
检查外部中断的硬件连接和触发条件。确保外部触发条件(如按键按下、电平变化等)能够正确触发 PB3 的外部中断

使用特权

评论回复
8
一秒落纱| | 2024-4-21 02:00 | 只看该作者
检查其他相关的配置,如时钟设置、GPIO配置等,确保没有其他配置冲突导致无法正确触发外部中断

使用特权

评论回复
9
淡漠安然| | 2024-4-21 04:00 | 只看该作者
你还是换个IO试试吧,感觉是你配置的问题

使用特权

评论回复
10
三生万物| | 2024-4-21 10:00 | 只看该作者
用cubemx直接搞个多好,cubemx配置最快了

使用特权

评论回复
11
远山寻你| | 2024-4-21 13:00 | 只看该作者
一般应该能进去啊,你用示波器看看这个IO是否有输入状态呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

980

主题

4028

帖子

10

粉丝