zwmasdf 发表于 2017-12-21 10:39:00

关于STM32F103的I2C1引脚Remap后导致SWD无法复位单片机的问题


使用CUBEMX开发,当使能I2C1并且将引脚重映射至PB8和PB9后,使用JLINK的SWD4线(VDD,SWDIO,SWCLK,GND)将程序烧进去后想要再烧一遍发现JLINK无法烧录了,提示复位CPU失败。一句自己的代码也没有时钟用的是8M的HSE,其他设置没动过。奇怪的是把I2C改为默认的PB5和PB6或者是将RESET脚接到JLINK上,又可以实现正常烧录了,请问,这是为什么

adlu 发表于 2017-12-22 11:58:17

居然有这种事?
没遇到过,帮顶一下

maxtch 发表于 2017-12-23 01:02:21

J-Link 上的复位线接了没?(这个问题我见的太多了……)

浪花雷雨 发表于 2017-12-25 09:03:31

帮顶

zwmasdf 发表于 2017-12-26 08:24:52

maxtch 发表于 2017-12-23 01:02
J-Link 上的复位线接了没?(这个问题我见的太多了……)

复位不是必须接的,如果SWD复用的话复位必须接,我没复用,
问题我是找到了__HAL_RCC_I2C1_CLK_ENABLE();这句话会导致SWD被禁用,不信你可以试试

maxtch 发表于 2017-12-26 12:06:48

zwmasdf 发表于 2017-12-26 08:24
复位不是必须接的,如果SWD复用的话复位必须接,我没复用,
问题我是找到了__HAL_RCC_I2C1_CLK_ENABLE(); ...

那就是 HAL 的暗病咯。我反正不用 HAL,不会遇到这种问题。

zwmasdf 发表于 2017-12-27 12:30:03

maxtch 发表于 2017-12-26 12:06
那就是 HAL 的暗病咯。我反正不用 HAL,不会遇到这种问题。

不是,你直接寄存器操作也是这样的情况,__HAL_RCC_I2C1_CLK_ENABLE()最终的操作就是寄存器的相关位设置

maxtch 发表于 2017-12-27 19:53:38

zwmasdf 发表于 2017-12-27 12:30
不是,你直接寄存器操作也是这样的情况,__HAL_RCC_I2C1_CLK_ENABLE()最终的操作就是寄存器的相关位设置 ...

我从没遇到过这种情况。理论上说不接 RESET 应该可以用 SWD,但实际上不接 RESET 的 SWD 我遇到过太多问题了(NXP、ST 和 Microchip 的都有)。我是疲于追根究底,索性就直接记住不论用什么调试口都要接复位线了。

zwmasdf 发表于 2017-12-29 08:08:35

maxtch 发表于 2017-12-27 19:53
我从没遇到过这种情况。理论上说不接 RESET 应该可以用 SWD,但实际上不接 RESET 的 SWD 我遇到过太多问 ...

我从不接RESET,做过这么多项目第一次遇到这样的问题

maxtch 发表于 2017-12-29 11:48:02

zwmasdf 发表于 2017-12-29 08:08
我从不接RESET,做过这么多项目第一次遇到这样的问题

ST 可以不接 RESET,不过我用过的某厂家把 SWD 设计成了必须接 RESET 才能用,习惯了。另外,ST 某些芯片从空白状态编程必须接 RESET。
页: [1]
查看完整版本: 关于STM32F103的I2C1引脚Remap后导致SWD无法复位单片机的问题