STM32F103的JTAG关闭后,IO口配置成外部中断触发仍然无法使用
程序如下:EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
GPIO_InitStructure.GPIO_Pin= GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource3);
EXTI_InitStructure.EXTI_Line=EXTI_Line3;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
将PB3设置成外部中断下降沿触发,关闭JTAG,在调试中发现IO口仍然无法正常使用,求问是什么原因?
如果你的这一段代码,当使用其他普通GPIO时工作正常,只有换用JTAG口的GPIO时不行,就考虑放弃吧。
我曾经用F103的JTAG/SWJ的PB13/PB14改GPIO用,我发现每一次置0/置1使用之前,都要运行一次GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); 不能仅仅在初始化的时候执行一次就以为永远有效。您可以试一试每当等待中断的时候就执行一次GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);。 PB3口比较特殊只有全部关闭调试口的时候才可以真正的普通只关闭JTAG时 还需要关闭异步跟踪
DBGMCU->CR &= ~((uint32_t)1<<5);
FIO->MAPR = (AFIO->MAPR & ~((uint32_t)0x7 << 24)) | (2 << 24);
把这个指令加上就没问题了
mylovemcu 发表于 2020-1-8 08:44
PB3口比较特殊只有全部关闭调试口的时候才可以真正的普通只关闭JTAG时 还需要关闭异步跟踪
DBGMCU->CR ...
抱歉寄存器这块不太懂,请问这样设置是否关闭了SWD模式? harper2xs 发表于 2020-1-8 09:05
抱歉寄存器这块不太懂,请问这样设置是否关闭了SWD模式?
没有关闭SWD
这是关闭IO口的异步跟踪SWD可以正常使用 mylovemcu 发表于 2020-1-8 09:10
没有关闭SWD
这是关闭IO口的异步跟踪SWD可以正常使用
您好!加入之后报错是怎么回事?
harper2xs 发表于 2020-1-8 09:18
您好!加入之后报错是怎么回事?
写错了改成AFIO mylovemcu 发表于 2020-1-8 09:20
写错了改成AFIO
您好,按照您的方法加入后依旧无法触发中断:( radio2radio 发表于 2020-1-7 23:28
如果你的这一段代码,当使用其他普通GPIO时工作正常,只有换用JTAG口的GPIO时不行,就考虑放弃吧。
我曾经 ...
谢谢,这段代码用在其他IO口是正常的 harper2xs 发表于 2020-1-8 09:39
您好,按照您的方法加入后依旧无法触发中断
搞错了
写这个吧
DBGMCU->CR |= ((uint32_t)1<<5);
这样试一下
页:
[1]
2