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

[复制链接]
7200|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

这样的函数用起来是自注释的
 楼主| 程序匠人 发表于 2011-12-9 08:38 | 显示全部楼层
直接写MAPR就行吧?不直观,但是很直接的.
AFIO->MAPR &= 0xfaffffff;//----------------重映射JTAG的JTDO,JNTRST
xhtxzxw 发表于 2011-12-9 01:27


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

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

我的问题是,按照大多数人建议的那样做了,却无法使用这几个口。很奇怪。
lxyppc 发表于 2011-12-9 08:50 | 显示全部楼层
贴出来的代码看不出来什么问题
我用的是STM32F103C8T6,初始化代码和你一样,可以正常使用
amonghappy 发表于 2011-12-9 09:57 | 显示全部楼层
这样子写挺标准的,我测试过,一旦关闭JTAG,使能SWD,PB3,PB4和PA15是可以使用的。
匠人的程序没有问题。
lxyppc 发表于 2011-12-9 10:09 | 显示全部楼层
看看是不是别的什么地方改动了设置
xhtxzxw 发表于 2011-12-9 11:34 | 显示全部楼层
我的意思是说,不妨先用直接写寄存器的方式试试,如果还有问题,也许是别的地方又重重影射了?
huanben 发表于 2011-12-9 11:52 | 显示全部楼层
提问帖?
新鲜哦:)

这个得标记下。
chhaich 发表于 2011-12-9 17:23 | 显示全部楼层
像这个库的函数我一般都自己写一个宏或者子程序去转换一下,自己看着也舒心一点。。。
 楼主| 程序匠人 发表于 2011-12-10 19:21 | 显示全部楼层
这两天忙着调试,没有及时来顾这个帖子。
问题已经解决了,是硬件的问题,与程序和芯片无关。

结贴。给所有答复者散分。谢谢大家。
pkat 发表于 2011-12-10 19:22 | 显示全部楼层
:lol我是来学习的
无冕之王 发表于 2011-12-10 19:28 | 显示全部楼层
匠人遇到的问题都是有难度的
qwert1213131 发表于 2012-11-15 00:07 | 显示全部楼层
12# 程序匠人
您好,我的可以看到寄存器里面PB3的ODR都是正常的,但是引脚上只有低电平,
请问您的硬件是什么问题
12345wuxiang 发表于 2012-12-6 12:44 | 显示全部楼层
老大解决了没?我也出现这样的情况,用了GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);
为什么还是不行呢?help  help...
njchenmin 发表于 2012-12-7 06:46 | 显示全部楼层
这几个口从来不复用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

734

主题

11156

帖子

682

粉丝
快速回复 在线客服 返回列表 返回顶部