OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4794|回复: 15

STM32F103 URAT1引脚重映射与调试端口复用冲突问题

[复制链接]

2

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2015-7-23
在线时间
9 小时
发表于 2017-11-28 16:46:25 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 longfeixue 于 2017-11-28 16:58 编辑

最近做了一个电路板,使用STM32F103芯片,URAT1引脚需要进行重映射,另外电路中占用了部分JTAG端口,因此程序中需要关闭JTAG端口,打开SWD接口。但是这样设置后当执行到UART1初始化函数的硬件重映射语句后,突然出现调试端口连接失效的问题,仿真器无法再识别MCU,测试电源电流突然增大了50mA。测试硬件电路没有问题,实在查找不出来原因,我怀疑是MCU的一个bug,不知道哪位朋友遇到过类似问题,该如何解决呢?
QQ图片20171128164631.png
QQ图片20171128164638.png
QQ图片20171128164816.png
QQ图片20171128164841.png

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

96

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
297
金钱
297
注册时间
2017-10-12
在线时间
83 小时
发表于 2017-11-28 18:56:48 | 显示全部楼层
PB6和PB7与JTAG无关。当配置PB6和PB7时调试飞掉应检查硬件,特别是PB6、PB7直接以TTL方式直接与其它芯片的TX和RX连接时。
回复

使用道具 举报

0

主题

96

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
297
金钱
297
注册时间
2017-10-12
在线时间
83 小时
发表于 2017-11-28 18:59:39 | 显示全部楼层
并且你的程序121行才开AFIO,122行也只Remap了USART1,没有看到有禁用JTAG的地方。
回复

使用道具 举报

2

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2015-7-23
在线时间
9 小时
 楼主| 发表于 2017-11-28 19:58:55 | 显示全部楼层
谢谢 cxf0153 的关注!
JTAG禁用,SWD使能,是在main()函数开头初始化的,这里摘录的是UART1初始化函数中引脚重映射部分。
为了排除其他硬件模块的影响,我在一个新电路板上只焊接了MCU、晶振电路、复位电路,退耦电容,接上电源,按上述方式进行测试,仍然出现仿真失效的问题。
反之,在一个焊接完整的电路板上,注释掉使 JTAG禁用,SWD使能 的函数,然后测试UART1程序,数据发送时正常的。MCU引脚是以TTL电平与CH340G芯片连接(采用5V供电)。
回复

使用道具 举报

2

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2015-7-23
在线时间
9 小时
 楼主| 发表于 2017-11-28 20:00:10 | 显示全部楼层
先开启辅助时钟,再执行重映射语句,就可以了吧,还有其他顺序要求吗
回复

使用道具 举报

0

主题

96

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
297
金钱
297
注册时间
2017-10-12
在线时间
83 小时
发表于 2017-11-29 11:13:57 | 显示全部楼层
longfeixue 发表于 2017-11-28 19:58
谢谢 cxf0153 的关注!
JTAG禁用,SWD使能,是在main()函数开头初始化的,这里摘录的是UART1初始化函数中 ...

建议你再检查一下调试的设置,确定使用了SW模式进行调试,类似下图:
jtagsw.jpg
回复

使用道具 举报

2

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2015-7-23
在线时间
9 小时
 楼主| 发表于 2017-11-29 11:34:41 | 显示全部楼层
cxf0153 发表于 2017-11-29 11:13
建议你再检查一下调试的设置,确定使用了SW模式进行调试,类似下图:

是的,就是采用的SWD调试方式。我在电路板上只留了4线的SWD仿真接口,所以只能采用这种调试方式。MCU复位后默认JTAG+SWD方式同时有效,所以采用SWD方式调试正常。但一旦执行了上述存在异常的程序,SWD调试接口就失效了。我如果想再次烧写程序,就只能先阻止异常程序的执行,此时SWD仿真接口有效,可以再次烧写程序。
回复

使用道具 举报

2

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2015-7-23
在线时间
9 小时
 楼主| 发表于 2017-11-29 11:37:14 | 显示全部楼层
阻止程序运行有两种简便的方法,1、在上电之前用镊子将复位电容短路,阻止芯片正常复位,此时程序无法运行,在这个期间烧写正常的程序;2、在上电之前用镊子将晶振引脚短路,此时程序无法运行,在这个期间烧写正常的程序;
回复

使用道具 举报

2

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2015-7-23
在线时间
9 小时
 楼主| 发表于 2017-11-29 11:38:59 | 显示全部楼层
我现在真是没办法了,70%确定是MCU自身的故障。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-11-30 01:06:46 | 显示全部楼层
串口1 的部分重映射, 和SW无关的。不应该影响到。
回复

使用道具 举报

2

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2015-7-23
在线时间
9 小时
 楼主| 发表于 2017-11-30 08:42:22 | 显示全部楼层
正点原子 发表于 2017-11-30 01:06
串口1 的部分重映射, 和SW无关的。不应该影响到。

谢谢原子哥关注,从手册资料上查看是没有发现两者之间有关联冲突,但实测情况确实存在干涉,尤其是只汗了最小系统测试仍然如此,让我无法解释,找不到理由。如果有谁愿意可以验证一下这个问题
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-12-1 00:46:27 | 显示全部楼层
longfeixue 发表于 2017-11-30 08:42
谢谢原子哥关注,从手册资料上查看是没有发现两者之间有关联冲突,但实测情况确实存在干涉,尤其是只汗了 ...

有时间我再看看吧,暂时没这么用
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2015-7-23
在线时间
9 小时
 楼主| 发表于 2017-12-1 09:51:21 | 显示全部楼层
正点原子 发表于 2017-12-1 00:46
有时间我再看看吧,暂时没这么用

好的,谢谢
回复

使用道具 举报

2

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2015-7-23
在线时间
9 小时
 楼主| 发表于 2018-1-16 20:22:26 | 显示全部楼层
一个半月前,发帖求助的这个问题,现在自己找到结果。这个项目12月份已完成,这一版程序中暂时没有用到串口通信的功能,为了赶项目时间,就越过这个问题了。
今天有时间又测试了这个问题。把原来的情况重复测试一遍,问题依旧!!
无奈中偶然想到改变一下程序执行顺序测试一下,原来顺序是:
先执行   JTAG_Set(SWD_ENABLE); // 使能SWD端口,关闭JTAG端口。
再执行   uart1_init( F_PCLK2_HZ, 9600 ); //初始化UART1
现在把顺序颠倒一下,奇迹出现了,程序执行正常了,而且SWD调试功能正常!
返回原来的执行顺序,问题又依旧!!顺序颠倒,又正常。
没想到之前困扰了好几天的问题,就是这个原因导致的,有点不可思议,但是以上测试结果千真万确!
谁能解释一下??
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-1-17 01:01:27 | 显示全部楼层
longfeixue 发表于 2018-1-16 20:22
一个半月前,发帖求助的这个问题,现在自己找到结果。这个项目12月份已完成,这一版程序中暂时没有用到串口 ...

我们的mini板,也有禁止JTAG和用串口,运行良好哦
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2015-7-23
在线时间
9 小时
 楼主| 发表于 2018-1-17 09:10:36 | 显示全部楼层
正点原子 发表于 2018-1-17 01:01
我们的mini板,也有禁止JTAG和用串口,运行良好哦

谢谢原子哥关注。我这边学生有一个你的战舰开发板,在上边测试UART1引脚复用功能正常,但我的情况就是不正常。我用的F103VC芯片。原因不明。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 16:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表