STM32/STM8技术论坛
直播中

戚歆敦

7年用户 880经验值
私信 关注
[问答]

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

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);        }}


回帖(1)

张国厚

2024-3-8 10:57:37
PB4是可以设置成外部中断的,PB3设置不了中断,也没有办法作为一般io使用
举报

更多回帖

发帖
×
20
完善资料,
赚取积分