OpenEdv-开源电子网

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

使用到PB3|PB4|PA13|PA14|PB15端口做普通IO时,需禁止JTAG!

[复制链接]

4

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2014-1-17
在线时间
0 小时
发表于 2014-1-19 13:34:57 | 显示全部楼层 |阅读模式

 GPIO_InitTypeDef GPIO_InitStructure;
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);
 
 /**********************
 1.执行端口重映射时,复用功能时钟得使能:RCC_APB2Periph_AFIO
 
 2.  &1.GPIO_Remap_SWJ_Disable: !< Full SWJ Disabled (JTAG-DP + SW-DP)
      此时PA13|PA14|PA15|PB3|PB4都可作为普通IO用了
 
 为了保存某些调试端口,GPIO_Remap_SWJ_Disable也可选择为下面两种模式:
  
     &2.GPIO_Remap_SWJ_JTAGDisable: !< JTAG-DP Disabled and SW-DP Enabled
     此时PA15|PB3|PB4可作为普通IO用了
  
     &3.GPIO_Remap_SWJ_NoJTRST: !< Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRST
     此时只有PB4可作为普通IO用了 
 **********************/
 
 GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE);  //使能禁止JTAG

 //初始化GPIOB  推挽输出
 GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_3|GPIO_Pin_4);
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 
 GPIO_Init(GPIOB, &GPIO_InitStructure);
 GPIO_SetBits(GPIOB, GPIO_Pin_3|GPIO_Pin_4);
 //初始化GPIOA  推挽输出
 GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15); 
 GPIO_Init(GPIOA, &GPIO_InitStructure);
 GPIO_SetBits(GPIOA, GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);

 

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-1-19 17:20:52 | 显示全部楼层
回复【楼主位】open_llw:
---------------------------------
呵呵,谢谢分享。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

14

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
144
金钱
144
注册时间
2014-9-3
在线时间
4 小时
发表于 2014-9-21 19:02:28 | 显示全部楼层
貌似没用啊!
回复 支持 反对

使用道具 举报

5

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
181
金钱
181
注册时间
2014-11-18
在线时间
17 小时
发表于 2014-12-13 13:39:49 | 显示全部楼层
谢谢分享!正好用到
http://happygenius.taobao.com
回复 支持 反对

使用道具 举报

62

主题

275

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1155
金钱
1155
注册时间
2012-3-4
在线时间
80 小时
发表于 2015-1-21 09:00:16 | 显示全部楼层
昨天我用这个实验控制屏幕,才开始PB0-PB5,结果不行,一度认为屏幕坏了,结果发现PB2是boot,后来换了PB3-PB8,还是不行,换成51,结果可以了,一直想不通,现在看来就是楼主说的啊,中午回去实验实验
回复 支持 反对

使用道具 举报

13

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2015-1-26
在线时间
0 小时
发表于 2015-1-26 14:09:19 | 显示全部楼层
RCC->APB2ENR |= 1 |  (1<<3);  /*AFIO/ GPIOB*/ 
DBGMCU->CR = DBGMCU->CR & ~((uint32_t)1<<5); 
AFIO->MAPR |= (AFIO->MAPR & ~((uint32_t)0x7 << 24)) | (2 << 24); //SW模式 

确实可以实现PB3当作普通IO来用,可是我碰到的问题是PB3拉高时,输出电压是2.83v。这是怎么回事,我要的是3.3V。这怎么办?
回复 支持 反对

使用道具 举报

12

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
232
金钱
232
注册时间
2014-8-6
在线时间
8 小时
发表于 2015-3-10 15:40:33 | 显示全部楼层
谢谢楼主!额外增加了5根GPIO口线。
当在PA13|PA14|PA15|PB3|PB4都可作为普通IO使用时,建议在程序的开头延时2秒钟左右,再执行GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE) 。否则再次仿真时,仿真器无法连接到MCU了。
回复 支持 反对

使用道具 举报

12

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
232
金钱
232
注册时间
2014-8-6
在线时间
8 小时
发表于 2015-3-10 15:42:06 | 显示全部楼层
回复【6楼】daliangcao:
---------------------------------
是不是仿真器的影响?拔掉仿真器试试看。
回复 支持 反对

使用道具 举报

13

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2015-1-26
在线时间
0 小时
发表于 2015-3-11 10:57:07 | 显示全部楼层
回复【7楼】jnfxt95:
---------------------------------
这个时候把BOOT0拉高,就可以了。
回复 支持 反对

使用道具 举报

12

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
232
金钱
232
注册时间
2014-8-6
在线时间
8 小时
发表于 2015-3-11 16:46:15 | 显示全部楼层
回复【9楼】daliangcao:
---------------------------------
试验了一下,确实好用。谢谢!
回复 支持 反对

使用道具 举报

4

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2014-1-17
在线时间
0 小时
 楼主| 发表于 2015-3-19 19:37:51 | 显示全部楼层
现在开始玩STM32F4系列的芯片了,对于禁用JTAG也找了相关的资料(^~^本人使用的是SW接口);
发现STM32F4库函数中,已经取消了GPIO_PinRemapConfig()函数,对于复用功能使用GPIO_PinAFConfig()函数了!
但是在GPIO_PinAFConfig()函数已经没有禁止JTAG/SW等选项了,而是复用到AF0~AF15线上,其中AF0是系统功能(也是复位初始功能)。
其中调试接口就是系统功能,这样需要禁用JTAG功能只需把引脚复用到AF1~AF15中的一个就行了。

但自己不懂的时候,发现了一个很好的工具,使用STM32CubeMx软件自动生成一下就行了~_~

亲测直接复用就可使用相应的复用功能,不用想着失能JTAG了。

可是问题就来了,那么如果我只想把失能的JTAG的作为普通IO,那我改怎么做?照例说,GPIO功能应该是映射到AF0的啊。
求大神指导。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-3-19 22:14:45 | 显示全部楼层
回复【11楼】open_llw:
---------------------------------
直接不用AFIO就可以了
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2014-1-17
在线时间
0 小时
 楼主| 发表于 2015-3-20 12:28:45 | 显示全部楼层
回复【12楼】正点原子:
---------------------------------
哦,你是说在使用GPIO_Init()函数中的GPIO_Mode选择成GPIO_Mode_IN || GPIO_Mode_OUT就行了?
有点道理,谢谢了(^_!~看来觉悟很重要)
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-3-20 23:14:01 | 显示全部楼层
回复【13楼】open_llw:
---------------------------------
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

15

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2011-6-2
在线时间
0 小时
发表于 2015-6-18 11:29:02 | 显示全部楼层
谢谢楼主的帖.
回复 支持 反对

使用道具 举报

9

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2015-4-22
在线时间
0 小时
发表于 2015-8-25 10:47:42 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子老师  ,我今天早上做工程也遇到这个问题,急需帮助。
我今天早上想使用PA , B口的时候发现PB3,PB4和PA13|14|15不能使用,我用上边的代码,吧PB3|4配置好了,可是PA13|14|15怎样配置为普通输出高低电平的IO?
我的代码是 GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE);  //使能禁止JTAG
 //初始化GPIOB  推挽输出
 GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_3|GPIO_Pin_4);
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  
 GPIO_Init(GPIOB, &GPIO_InitStructure); 
 //GPIO_SetBits(GPIOB, GPIO_Pin_3|GPIO_Pin_4);
 //初始化GPIOA  推挽输出
 GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);  
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
 GPIO_Init(GPIOA, &GPIO_InitStructure); 
 //GPIO_SetBits(GPIOA, GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
,,
原子老师,帮帮,非常感谢。
回复 支持 反对

使用道具 举报

9

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2015-4-22
在线时间
0 小时
发表于 2015-8-25 11:29:07 | 显示全部楼层
回复【14楼】正点原子:
---------------------------------
我用的是GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);  //使能禁止JTAG
也就是#define GPIO_Remap_SWJ_Disable      ((uint32_t)0x00300400)  /*!< Full SWJ Disabled (JTAG-DP + SW-DP) */
为什么PA13|14|15还是不能用?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-8-27 23:56:35 | 显示全部楼层
回复【17楼】小白110:
---------------------------------
应该可以
不能,就说明你代码其它地方还有问题。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

9

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2015-4-22
在线时间
0 小时
发表于 2015-9-6 17:13:07 | 显示全部楼层
回复【18楼】正点原子:
---------------------------------
 GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);  //使能禁止JTAG
原子哥,我用这句话把板子的盤A13|PA14|PA15|PB3|PB4都给配置成普通IO了,现在无法找到JTAG和SW设备,板子下不进去程序。这是不是芯片锁住了,有没有办法让板子还能使用?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-9-7 22:26:56 | 显示全部楼层
回复【19楼】小白110:
---------------------------------
B0接3.3V就可以了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

3

帖子

0

精华

新手入门

积分
31
金钱
31
注册时间
2015-9-7
在线时间
0 小时
发表于 2015-10-19 15:21:41 | 显示全部楼层
有效,多谢了
回复 支持 反对

使用道具 举报

74

主题

334

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
436
金钱
436
注册时间
2015-5-28
在线时间
144 小时
发表于 2015-10-31 16:42:24 | 显示全部楼层
谢谢啦ggggggg
最近爱上了stm32
回复 支持 反对

使用道具 举报

21

主题

57

帖子

0

精华

高级会员

Rank: 4

积分
532
金钱
532
注册时间
2015-5-31
在线时间
115 小时
发表于 2016-5-10 16:31:42 | 显示全部楼层
本帖最后由 lwj199302 于 2016-5-10 16:40 编辑

RCC_APB2PeriphClockCmd( SPI_FLASH_GPIO_CLK | SPI_FLASH_CS_GPIO_CLK|RCC_APB2Periph_AFIO, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 ,ENABLE);

GPIO_PinRemapConfig(GPIO_Remap_SPI1, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);

GPIO_InitStructure.GPIO_Pin = SPI_FLASH_PIN_SCK  | SPI_FLASH_PIN_MOSI;   
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   
GPIO_Init(SPI_FLASH_GPIO, &GPIO_InitStructure);
GPIO_SetBits(SPI_FLASH_GPIO, SPI_FLASH_PIN_SCK  | SPI_FLASH_PIN_MOSI);   

GPIO_InitStructure.GPIO_Pin = SPI_FLASH_PIN_MISO;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(SPI_FLASH_GPIO, &GPIO_InitStructure);
GPIO_SetBits(SPI_FLASH_GPIO, SPI_FLASH_PIN_MISO);     

GPIO_InitStructure.GPIO_Pin = SPI_FLASH_CS;   
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(SPI_FLASH_CS_GPIO, &GPIO_InitStructure);
GPIO_SetBits(SPI_FLASH_CS_GPIO, SPI_FLASH_CS);     

PB3、PB4和PB5口是W25Q32的IO口,映射到SPI1的时候flash可以调通。可是为什么下面用SPI3的时候却挂在了SPI_FLASH_SendByte()函数里面呢???????????????????

RCC_APB2PeriphClockCmd( SPI_FLASH_GPIO_CLK | SPI_FLASH_CS_GPIO_CLK|RCC_APB2Periph_AFIO, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3 ,ENABLE);

//GPIO_PinRemapConfig(GPIO_Remap_SPI1, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);

GPIO_InitStructure.GPIO_Pin = SPI_FLASH_PIN_SCK  | SPI_FLASH_PIN_MOSI;   
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   
GPIO_Init(SPI_FLASH_GPIO, &GPIO_InitStructure);
GPIO_SetBits(SPI_FLASH_GPIO, SPI_FLASH_PIN_SCK  | SPI_FLASH_PIN_MOSI);   

GPIO_InitStructure.GPIO_Pin = SPI_FLASH_PIN_MISO;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(SPI_FLASH_GPIO, &GPIO_InitStructure);
GPIO_SetBits(SPI_FLASH_GPIO, SPI_FLASH_PIN_MISO);     

GPIO_InitStructure.GPIO_Pin = SPI_FLASH_CS;   
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(SPI_FLASH_CS_GPIO, &GPIO_InitStructure);
GPIO_SetBits(SPI_FLASH_CS_GPIO, SPI_FLASH_CS);   

回复 支持 反对

使用道具 举报

8

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2016-4-26
在线时间
15 小时
发表于 2016-6-14 14:42:13 | 显示全部楼层
谢谢 分享, 着实帮了一把
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2016-5-13
在线时间
4 小时
发表于 2016-8-3 10:30:30 | 显示全部楼层
正点原子 发表于 2015-3-19 22:14
回复【11楼】open_llw:
---------------------------------
直接不用AFIO就可以了

意思是关闭JTAG,使用PB3|PB4|PA13|PA14|PB15端口做普通IO时,是不需要使能AFIO吗??
回复 支持 反对

使用道具 举报

4

主题

21

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
372
金钱
372
注册时间
2015-11-12
在线时间
83 小时
发表于 2017-7-24 22:34:24 | 显示全部楼层
正点原子 发表于 2015-3-20 23:14
回复【13楼】open_llw:
---------------------------------

还有这种操作!
回复 支持 反对

使用道具 举报

2

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2018-4-11
在线时间
16 小时
发表于 2018-4-11 18:19:54 | 显示全部楼层
楼主 我用TIM2_CH2的PA1做为捕获输入不行 可以映射到TIM5_CH2的PB3吗?求告知,非常感谢
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2018-1-17
在线时间
1 小时
发表于 2018-8-14 09:50:33 | 显示全部楼层
正点原子 发表于 2014-1-19 17:20
回复【楼主位】open_llw:
---------------------------------
呵呵,谢谢分享。

急急急,原子老师想问下那个stm32F767IG 怎么把PB3配置为普通GPIO,F7的PB3脚默认用于JTAG的功能怎么正确关闭
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-18 08:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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