急!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口使用。