打印
[STM32F1]

STM32F103系列__HAL_AFIO_REMAP_I2C1_ENABLE()会导致调试口被禁用

[复制链接]
3508|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zwmasdf|  楼主 | 2017-12-21 14:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前提条件是使用JLINK的4线SWD模式(VCC,SWDIO,SWCLK,GND),不要连RESET
这个功能在STM32F103VE和STM32F103RC上面测试是有这样的问题,然而在STM32F103C8上面却安然无恙,不知道有人遇到过没
可以使用以下方式证实:
1.然后使用CUBEMX新建一个工程,SYS选择Serial Wire,IDE选择MDK,固件库选择Copy Only Necessary library files,其他不用选择,也不用写任何代码,直接生成工程
2.为了证实SWD功能能正常使用,烧录完后断开JLINK和单片机的连接,单片机断电重新上电,然后再次烧录,是能正常烧录的,说明生成的工程没有禁用SWD
3.然后在main.c的while(1)之前添加__HAL_AFIO_REMAP_I2C1_ENABLE(),再次烧录程序
4.烧录完成后,断开JLINK和单片机的连接,然后单片机断电重新上电,然后再次烧录,MDK烧录就失败了
5.在__HAL_AFIO_REMAP_I2C1_ENABLE()下方加上__HAL_AFIO_REMAP_SWJ_NOJTAG(),将RESET接到JLINK或BOOT0拉高,烧录程序,断开JLINK,单片机断电后重新上电,再次烧录,结果就成功了



沙发
zwmasdf|  楼主 | 2017-12-21 14:11 | 只看该作者
实际调试代码的时候程序执行到__HAL_AFIO_REMAP_I2C1_ENABLE()后就异常断开退出调试模式了

使用特权

评论回复
板凳
WXLmjr| | 2018-1-23 17:16 | 只看该作者
这个问题是STM32的一个芯片级BUG,下面的论坛有详细解释问题原因及解决办法。(去掉https中的123,没有发链接的权限)
http123s://electronics.stackexchange.com/questions/260757/timer1-remap-cause-debug-crash-on-stm32f103

使用特权

评论回复
地板
zwmasdf|  楼主 | 2018-1-26 16:07 | 只看该作者
WXLmjr 发表于 2018-1-23 17:16
这个问题是STM32的一个芯片级BUG,下面的论坛有详细解释问题原因及解决办法。(去掉https中的123,没有发链 ...

确实,SWJ_CFG[2]位是Write Only的
__HAL_AFIO_REMAP_I2C1_ENABLE()中会执行类似reg |= xxx_enable的操作
该操作会读寄存器,然后或上某个使能位
然而由于SWJ_CFG[2]位的Write Only特性,导致寄存器读出来后不是实际的值
原来如此,多谢提供信息

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

50

帖子

1

粉丝