STM32103VE在I2C和SWJ引脚复用共同使用时芯片无法下载

急!STM32103VE在I2C和SWJ引脚复用共同使用时导致芯片无法下载...

小弟最近在一个项目中遇到一个问题,我出现问题的是如下代码
        __HAL_RCC_AFIO_CLK_ENABLE();
        __HAL_AFIO_REMAP_I2C1_ENABLE();        
        __HAL_RCC_GPIOB_CLK_ENABLE();   
        __HAL_RCC_I2C1_CLK_ENABLE();    
        __HAL_AFIO_REMAP_SWJ_NOJTAG();

BSP_OSTickInit();  在之前的初始化里已经使用。为了排除其他因素干扰,我在主任务里只写了这一段I2C硬件的一部分初始化。(我的主任务只有打印时间一个事情)。仿真运行开始后可以运行,然后退回到main再运行,就直接导致芯片reset了,下不进程序了,需要把BOOT0 和BOOT1一起接地,用JFLASH重新擦除才能再次下载。
我的硬件I2C需要的引脚是PB8 PB9(remap之前默认PB6,PB7) 而我使用__HAL_AFIO_REMAP_SWJ_NOJTAG();的原因是因为PA15 和PA4我需要使用(在使用SPI时候需要)所以,关闭JTAG,打开SWD。但是问题就是在这儿,我使用了SWJremap就出现了芯片锁死无法下载程序的问题,但是I2C硬件引脚remap和这个SWJ引脚REMAP不同时使用,分别使用的时候就不会出现问题。

简而言之就是__HAL_AFIO_REMAP_I2C1_ENABLE()和__HAL_AFIO_REMAP_SWJ_NOJTAG()不能同时使用,否则就会出现芯片无法下载的问题。
然而在引脚上没有冲突,I2C1remap是PB6,7到PB8,9。  SWJremap是将原来不可用的PA15,PB3,PB4改成能当做普通IO口使用。

永不止步步 发表于10-11 10:21 浏览65535次
分享到:

已有1条评论

  • EEskill
    EEskill 10-11 10:41

    类似问题的解决办法都一样, 初始化这些外设前先延时个0.5s左右
    然后每次下载前先reset, 然后马上下载, 就可以了

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67410个|学分:307967个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号