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

STM32F103的JTAG关闭后,IO口配置成外部中断触发仍然无法使用

[复制链接]
harper2xs 提问时间:2020-1-7 20:43 /
悬赏10ST金币未解决
程序如下:
        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口仍然无法正常使用,求问是什么原因?

收藏 评论13 发布时间:2020-1-7 20:43

举报

13个回答
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);。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

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

把这个指令加上就没问题了 200108.png
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可以正常使用

TIM截图20200108091722.png
您好!加入之后报错是怎么回事?
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);

这样试一下
harper2xs 回答时间:2020-1-8 15:07:56
mylovemcu 发表于 2020-1-8 10:55
搞错了  
写这个吧
DBGMCU->CR |= ((uint32_t)1

感谢!但是依旧不行
harper2xs 回答时间:2020-1-9 15:17:54
顶一下。。。
harper2xs 回答时间:2020-1-9 16:27:04
mylovemcu 发表于 2020-1-8 10:55
搞错了  
写这个吧
DBGMCU->CR |= ((uint32_t)1

RCC->APB2ENR |= 1 |  (1<<3);  /*AFIO/ GPIOB*/
DBGMCU->CR = DBGMCU->CR & ~((uint32_t)1<<5);
AFIO->MAPR |= (AFIO->MAPR & ~((uint32_t)0x7 << 24)) | (2 << 24); //SW模式
请问这样写是否可以?不知道这样写会不会关闭SW模式,所以暂时没敢下载调试
mylovemcu 回答时间:2020-1-9 16:47:41
harper2xs 发表于 2020-1-9 16:27
RCC->APB2ENR |= 1 |  (1CR & ~((uint32_t)1MAPR & ~((uint32_t)0x7

DBGMCU->CR = (DBGMCU->CR | ((uint32_t)1<<5));

这个相与换成相或  第五位需要置位  相与之后清零了  

单独加这一句就够了  其他的保留你原理的库函数设置

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版