打印

禁用了JTAG,PB3\PB4\PB6\PA3当输入口,为什么仍旧无效?

[复制链接]
6306|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
程序匠人|  楼主 | 2011-12-8 21:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
禁用了JTAG,PB3\PB4\PB6\PA3当输入口,为什么仍旧无效?
芯片:STM32F100
程序如下:
  ……
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);         // 启动 GPIOA 时钟
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);         // 启动 GPIOB 时钟
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);         // 启动 GPIOC 时钟
  ……
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);      // 启动 AFIO 时钟
  ……
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);    // 改变指定管脚的映射,JTAG-DP禁用,SW-DP使能
  ……
GPIO_InitTypeDef GPIO_InitStructure;                         //定义结构
//====按键输入口配置成带上拉输入模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 ; //选择IO口
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ;        //设置模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ;      //设置速度
GPIO_Init(GPIOB, &GPIO_InitStructure);              //初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 ;          //选择IO口
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ;        //设置模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ;      //设置速度
GPIO_Init(GPIOA, &GPIO_InitStructure);              //初始化
  ……
请问是否还缺少什么?
沙发
xhtxzxw| | 2011-12-9 01:27 | 只看该作者
直接写MAPR就行吧?不直观,但是很直接的.
AFIO->MAPR &= 0xfaffffff;//----------------重映射JTAG的JTDO,JNTRST

使用特权

评论回复
板凳
xhtxzxw| | 2011-12-9 01:30 | 只看该作者
GPIO_PinRemapConfig(........)
这个函数的代码,看起来太难受了(类似的,还有很多这种"风格"的函数),还不如直接写相关的寄存器.

使用特权

评论回复
地板
lxyppc| | 2011-12-9 08:33 | 只看该作者
GPIO_PinRemapConfig(........)
这个函数的代码,看起来太难受了(类似的,还有很多这种"风格"的函数),还不如直接写相关的寄存器.
xhtxzxw 发表于 2011-12-9 01:30

这样的函数用起来是自注释的

使用特权

评论回复
5
程序匠人|  楼主 | 2011-12-9 08:38 | 只看该作者
直接写MAPR就行吧?不直观,但是很直接的.
AFIO->MAPR &= 0xfaffffff;//----------------重映射JTAG的JTDO,JNTRST
xhtxzxw 发表于 2011-12-9 01:27


我用的是3.5的固件库。引用的也是标准的函数。

关于ST函数库的优劣问题,应该另说。

我的问题是,按照大多数人建议的那样做了,却无法使用这几个口。很奇怪。

使用特权

评论回复
6
lxyppc| | 2011-12-9 08:50 | 只看该作者
贴出来的代码看不出来什么问题
我用的是STM32F103C8T6,初始化代码和你一样,可以正常使用

使用特权

评论回复
7
amonghappy| | 2011-12-9 09:57 | 只看该作者
这样子写挺标准的,我测试过,一旦关闭JTAG,使能SWD,PB3,PB4和PA15是可以使用的。
匠人的程序没有问题。

使用特权

评论回复
8
lxyppc| | 2011-12-9 10:09 | 只看该作者
看看是不是别的什么地方改动了设置

使用特权

评论回复
9
xhtxzxw| | 2011-12-9 11:34 | 只看该作者
我的意思是说,不妨先用直接写寄存器的方式试试,如果还有问题,也许是别的地方又重重影射了?

使用特权

评论回复
10
huanben| | 2011-12-9 11:52 | 只看该作者
提问帖?
新鲜哦:)

这个得标记下。

使用特权

评论回复
11
chhaich| | 2011-12-9 17:23 | 只看该作者
像这个库的函数我一般都自己写一个宏或者子程序去转换一下,自己看着也舒心一点。。。

使用特权

评论回复
12
程序匠人|  楼主 | 2011-12-10 19:21 | 只看该作者
这两天忙着调试,没有及时来顾这个帖子。
问题已经解决了,是硬件的问题,与程序和芯片无关。

结贴。给所有答复者散分。谢谢大家。

使用特权

评论回复
13
pkat| | 2011-12-10 19:22 | 只看该作者
:lol我是来学习的

使用特权

评论回复
14
无冕之王| | 2011-12-10 19:28 | 只看该作者
匠人遇到的问题都是有难度的

使用特权

评论回复
15
qwert1213131| | 2012-11-15 00:07 | 只看该作者
12# 程序匠人
您好,我的可以看到寄存器里面PB3的ODR都是正常的,但是引脚上只有低电平,
请问您的硬件是什么问题

使用特权

评论回复
16
12345wuxiang| | 2012-12-6 12:44 | 只看该作者
老大解决了没?我也出现这样的情况,用了GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);
为什么还是不行呢?help  help...

使用特权

评论回复
17
njchenmin| | 2012-12-7 06:46 | 只看该作者
这几个口从来不复用。

使用特权

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

本版积分规则

个人签名: 《匠人手记》第二版已经上市,各大网络书店和实体书店有售! 匠人手机——手机中的颤抖机!欧耶! 匠人手记——手记中的战斗记!欧耶!

734

主题

11156

帖子

676

粉丝