本帖最后由 zwmasdf 于 2017-12-21 13:28 编辑
问题找到了
__HAL_RCC_I2C1_CLK_ENABLE();会导致SWD功能被禁,不信各位可以试试,注释该语句,SWD不会被禁,一旦启用该语句,SWD自动禁止
解决方法就是在该语句后面强制开启SWD调试功能__HAL_AFIO_REMAP_SWJ_NOJTAG();,如果是用JTAG的用相应的启用语句
使用CUBEMX开发,当开启FSMC的LCD功能和I2C1功能时,I2C1无法工作。经查询I2C1和FSMC的NADV管脚发生冲突,导致I2C无法工作。查阅最新版的Errata Sheet
可以得知解决方法是将I2C1管脚重映射到PB8和PB9上去
当时采用2种方案去解决这个问题
方案1. 将AFIO_MAPR2的FSMC_NADV位设为禁止NADV输出,参考依据为最新版的参考手册
因为CUBEMX没有报管脚冲突,于是查看了一下代码,发现CUBEMX自动将该功能禁止了
结合中文版的参考手册发现没有MAPR2寄存器,可见该功能是ST后来添加上去的,而我的芯片(买来不超过1年)应该是N年前的库存货,方案1无法使用
方案2. 使用CUBEMX将管脚映射到PB8和PB9上去,但是烧录完后就无法继续烧录,用的是JLINK的4线制SWD(VCC,SWDIO,SWCLK,GND),必须将RESET引脚连到JLINK上才能正常烧录,请问是怎么回事,求助一下,
这个工程用CUBEMX生成,没有一句自己的代码,但是烧录完后再烧录就不行了
问题应该不在FSMC,而是I2C1上,我重新建了个工程,仅仅使能I2C1,但是还是这样,我先把CUBEMX工程上传吧
test.rar
(444.6 KB)
|