打印
[STM32F1]

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

[复制链接]
2867|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
云中怪|  楼主 | 2016-10-10 10:05 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 云中怪 于 2016-10-10 10:21 编辑

   小弟最近在一个项目中遇到一个问题,我出现问题的是如下代码
        __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不同时使用,分别使用的时候就不会出现问题。求大神们指教
沙发
云中怪|  楼主 | 2016-10-10 10:09 | 只看该作者
简而言之就是__HAL_AFIO_REMAP_I2C1_ENABLE()和__HAL_AFIO_REMAP_SWJ_NOJTAG()不能同时使用,否则就会出现芯片无法下载的问题。
然而在引脚上没有冲突,I2C1remap是PB6,7到PB8,9。  SWJremap是将原来不可用的PA15,PB3,PB4改成能当做普通IO口使用。
实在摸不着头脑

使用特权

评论回复
板凳
云中怪|  楼主 | 2016-10-10 11:30 | 只看该作者
为啥没人回我啊 好伤心

使用特权

评论回复
地板
mmuuss586| | 2016-10-10 11:44 | 只看该作者
复用是这样的,没啥办法了

使用特权

评论回复
5
云中怪|  楼主 | 2016-10-10 12:05 | 只看该作者
mmuuss586 发表于 2016-10-10 11:44
复用是这样的,没啥办法了

能在详细点说下嘛?  可是我看了 两个复用没有冲突的引脚啊,就是两种复用出现就死掉了。。。 看来我I2C只能用模拟了

使用特权

评论回复
6
mini1986| | 2016-10-10 12:55 | 只看该作者
下载的时候按着reset键,然后松手即可......

使用特权

评论回复
7
云中怪|  楼主 | 2016-10-10 13:01 | 只看该作者
mini1986 发表于 2016-10-10 12:55
下载的时候按着reset键,然后松手即可......

不是这个问题啊。。。。。是I2C和SWJ的引脚复用同时在程序里使用导致崩溃啊

使用特权

评论回复
8
w522930954| | 2016-10-10 13:43 | 只看该作者
那就不要用那几个管教。。。冲突是正常的。。。
设计的时候也尽量避开。。。

使用特权

评论回复
9
dzguang| | 2016-10-11 01:07 | 只看该作者
这个问题难解决在哪里我暂时没有看到,你的问题应该只是在线仿真实现困难。

使用特权

评论回复
10
亼亽| | 2016-10-11 08:48 | 只看该作者
【HAL库每天一例】第065例:以太网-W5500
https://bbs.21ic.com/forum.php?mod=viewthread&tid=1610526&fromuid=1735642
(出处: 21ic电子技术论坛)

我们的例程也是功能引脚与SWD接口冲突,照样使用st-link正常下载,
不过我们这里是使用SPI3的,不是I2C的,,当然有一个问题就是没办法在线仿真的

使用特权

评论回复
11
tomzbj| | 2016-10-11 09:01 | 只看该作者
云中怪 发表于 2016-10-10 13:01
不是这个问题啊。。。。。是I2C和SWJ的引脚复用同时在程序里使用导致崩溃啊 ...

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

使用特权

评论回复
12
airwill| | 2016-10-11 15:05 | 只看该作者
楼上的办法不错, 值得推荐.
现在, 你就先采用 6 楼的办法, 多试几次, 看看运气怎么样

使用特权

评论回复
13
xmshao| | 2016-10-11 17:27 | 只看该作者
__HAL_AFIO_REMAP_I2C1_ENABLE()和__HAL_AFIO_REMAP_SWJ_NOJTAG()

肯定可以用的。你的标题把人带到管脚复用冲突的沟里去了。

是别的原因,包括硬件方面的。

使用特权

评论回复
14
zwmasdf| | 2017-12-21 13:09 | 只看该作者
我也发现这个问题了,解决方法就是在__HAL_AFIO_REMAP_I2C1_ENABLE();后面强制加上 __HAL_AFIO_REMAP_SWJ_NOJTAG();

使用特权

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

本版积分规则

1

主题

6

帖子

0

粉丝