harper2xs 发表于 2020-1-7 20:43:28

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口仍然无法正常使用,求问是什么原因?

radio2radio 发表于 2020-1-7 23:28:38

如果你的这一段代码,当使用其他普通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);。

mylovemcu 发表于 2020-1-8 08:44:53

PB3口比较特殊只有全部关闭调试口的时候才可以真正的普通只关闭JTAG时 还需要关闭异步跟踪

DBGMCU->CR &= ~((uint32_t)1<<5);
FIO->MAPR = (AFIO->MAPR & ~((uint32_t)0x7 << 24)) | (2 << 24);

把这个指令加上就没问题了

harper2xs 发表于 2020-1-8 09:05:45

mylovemcu 发表于 2020-1-8 08:44
PB3口比较特殊只有全部关闭调试口的时候才可以真正的普通只关闭JTAG时 还需要关闭异步跟踪

DBGMCU->CR ...

抱歉寄存器这块不太懂,请问这样设置是否关闭了SWD模式?

mylovemcu 发表于 2020-1-8 09:10:57

harper2xs 发表于 2020-1-8 09:05
抱歉寄存器这块不太懂,请问这样设置是否关闭了SWD模式?

没有关闭SWD

这是关闭IO口的异步跟踪SWD可以正常使用

harper2xs 发表于 2020-1-8 09:18:52

mylovemcu 发表于 2020-1-8 09:10
没有关闭SWD

这是关闭IO口的异步跟踪SWD可以正常使用


您好!加入之后报错是怎么回事?

mylovemcu 发表于 2020-1-8 09:20:21

harper2xs 发表于 2020-1-8 09:18
您好!加入之后报错是怎么回事?

写错了改成AFIO

harper2xs 发表于 2020-1-8 09:39:24

mylovemcu 发表于 2020-1-8 09:20
写错了改成AFIO

您好,按照您的方法加入后依旧无法触发中断:(

harper2xs 发表于 2020-1-8 10:06:58

radio2radio 发表于 2020-1-7 23:28
如果你的这一段代码,当使用其他普通GPIO时工作正常,只有换用JTAG口的GPIO时不行,就考虑放弃吧。

我曾经 ...

谢谢,这段代码用在其他IO口是正常的

mylovemcu 发表于 2020-1-8 10:55:05

harper2xs 发表于 2020-1-8 09:39
您好,按照您的方法加入后依旧无法触发中断

搞错了
写这个吧
DBGMCU->CR |= ((uint32_t)1<<5);

这样试一下
页: [1] 2
查看完整版本: STM32F103的JTAG关闭后,IO口配置成外部中断触发仍然无法使用