打印

stm32f103_CB中的jtag引脚做普通io使用疑惑

[复制链接]
6667|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 ADaiPlay 于 2012-6-19 12:33 编辑

我想知道,我是不是犯了一个原则性错误。

芯片手册上说JTAG引脚复位后是这样的状态:

由于CB的引脚数量比较少,所以我想将这些引脚做普通io用,如下图:

我的理解是,虽然我的程序会改变这些引脚的功能,但是每次复位后还是会默认恢复到JTAG状态的,故不会影响JTAG使用。
但是现在的问题是我将这些引脚初始化为普通的GPIO,测试发现,一直是高电平,也就是还维持这JTAG的功能状态,为什么呢,无法设置为gpio使用吗?有人试过将之做普通io使用吗?

没有看到这里,需要配置:

那么程序里需要关闭JTAG功能才能后续初试哈,在关闭之前加上一段延时,是不是还是有可能使用JTAG的?

我的JTAG接口有10k的上拉电阻:

5.png (7.79 KB )

5.png
沙发
lai832| | 2012-6-19 11:28 | 只看该作者
没弄过,
提醒:
不过试过想打开JTAG所在的SPI时,弄坏了个JLINK.
就直接选用其它SPI了.小心别接着JTAG改脚,特别是改为输出...

使用特权

评论回复
板凳
ADaiPlay|  楼主 | 2012-6-19 11:39 | 只看该作者
这么郁闷啊?还会把JLink烧坏?我是这么想的,在修改之前添加几秒的延时,烧写完程序以后,把JLink拔下来。这样试试,再等等,看还有没有人弄过,学习点经验,没有的话,我就尝试一下。
谢谢哦 2# lai832

使用特权

评论回复
地板
netvideo| | 2012-6-19 12:04 | 只看该作者
调用GPIO_PinRemapConfig( GPIO_Remap_SWJ_Disable , ENABLE );

使用特权

评论回复
5
香水城| | 2012-6-19 12:08 | 只看该作者
你在担心什么?

使用特权

评论回复
6
ADaiPlay|  楼主 | 2012-6-19 12:11 | 只看该作者
香版主都来了,我担心重映射以后Jlink无法连接到板子了,或者像二楼,将Jlink烧坏。 5# 香水城

使用特权

评论回复
7
ADaiPlay|  楼主 | 2012-6-19 12:44 | 只看该作者
我试了,把JTAG功能关掉:        AFIO->MAPR |= (0x4<<24);         
然后测量IO输出实际是0->2.5V,1->2.8V左右
其他io输出0->0V,1->3.3V左右

推挽输出方式。。。。

求解释。

使用特权

评论回复
8
ADaiPlay|  楼主 | 2012-6-19 13:35 | 只看该作者
AFIO的时钟没打开,打开以后可以了,没把Jlink连在上面。
默认时钟都关闭着,功耗是下来了,但是稍不留神就会**呢

使用特权

评论回复
9
lai832| | 2012-6-19 13:40 | 只看该作者

..

本帖最后由 lai832 于 2012-6-19 13:42 编辑
香版主都来了,我担心重映射以后Jlink无法连接到板子了,或者像二楼,将Jlink烧坏。 5# 香水城
ADaiPlay 发表于 2012-6-19 12:11


其实你主意的话不会的,

烧东西进去,你拨了JTAG再运行就行了.

烧东西进去,是停在那,程序不会跑的.

但如果你没拨JTAG,就复位等,麻烦就来了,

我就是之前没调JTAG时习惯了烧进去,不拨就直接跑,习惯了,
后来改JTAG脚的作用时,忘了,才烧的.
再者担心生产时不注意,所以才不与JTAG共用的.

使用特权

评论回复
10
ADaiPlay|  楼主 | 2012-6-19 17:59 | 只看该作者
恩,我已经试过了,做个总结吧:
首先:JTAG引脚做普通io口使用需要更改AFIO_MAPR中的相应标志,在此之前需要打开AFIO的时钟才行。
其次:当JLink连接在板子上时,可以运行程序,但是更改功能后,Jlink会连接失败,道理很简单,Jlink是检测rst的电压来确定连接的,该引脚被改变状态了,连接失败是当然的,我的做法是在程序起始添加延时,这样重启程序后,有时间去给Jlink连接板子,做烧写操作。(如果上电直接把JTAG关掉,估计就连不上了)
最后:JLink连接着板子时,其io输出电压不能达到预计值,大概只有2.5V吧,估计和上拉电阻有关,拔掉以后就不会影响了。
完毕。
10# lai832

使用特权

评论回复
11
nuncle.lee| | 2013-1-10 16:57 | 只看该作者
:victory:
在STM32F2 上,好像改进了, 不用那么麻烦,直接配置这几个脚做普通IO即可。
/* Enable GPIOA and GPIOB clocks */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA , ENABLE);

/* Configure PA.13 (JTMS/SWDIO), PA.14 (JTCK/SWCLK) and PA.15 (JTDI) as
output push-pull */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA, &GPIO_InitStructure);

使用特权

评论回复
12
明月小厨| | 2013-1-10 19:52 | 只看该作者
楼上有位兄弟讲的很明白了;
1)看数据手册,上电后对应的引脚是JTAG,这个无法改变;
2)上电后你的程序运行,先设置好IO的配置;
3)然后禁止JTAG功能,此时的IO设置才有效;

估计你和我一样都是菜鸟,我就多说几句;
引脚名称表最右边的一栏,如果使能这些功能,还需要重新映射它们;remap;

使用特权

评论回复
13
ADaiPlay|  楼主 | 2013-1-17 20:04 | 只看该作者
明月小厨 发表于 2013-1-10 19:52
楼上有位兄弟讲的很明白了;
1)看数据手册,上电后对应的引脚是JTAG,这个无法改变;
2)上电后你的程序运行,先 ...


12楼已经作了总结,谢谢。

使用特权

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

本版积分规则

个人签名:老实做人,塌心做事——为理想挥汗 网站:www.edreamtek.com 文章:http://blog.csdn.net/adaiplay

23

主题

626

帖子

6

粉丝