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

stm32f103zet6的PA4怎么不能做普通IO口用呢? - STM32/STM8技术论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
stm32f103zet6的PA4怎么不能做普通IO口用呢?
14:04:52  
stm32f103zet6的PA4怎么不能做普通IO口用呢?我测试了一下除了用作JTAG的PA13\14\15及PB3\4所有的都应该能用作普通IO的啊~~可是PA4为什么不行呢?
助理工程师
15:56:10  
回帖奖励 +1
PA4是 可以直接当做 普通IO端口使用的, 复位后就直接可以使用.....
你是怎么判断不能使用的呢, 还有你代码段写了多大, 会不会在其他地方不经意配置错了呢。。。。。。。建议仔细检查一下代码,&&另外,PA13,PA14那些jtag用到的端口,也不是绝对不可以当做普通io端口使用,只要不工作在jtag模式,就可以通过软件禁止jtag模式, 使其恢复至 普通io作用。。。
17:58:07  
yatoo 发表于
PA4是 可以直接当做 普通IO端口使用的, 复位后就直接可以使用.....
你是怎么判断不能使用的呢, 还有你 ...
我写了一个用PA4点亮led的程序,试过了所有的IO,就只有PA4\13\14\15以及PB3\4不能用,昨天才到的开发板,我真不知道是怎么回事,新手。程序附上:
#include&stm32f10x.h&
#include&delay.h&
void GPIO_Config(void)
GPIO_InitTypeDef GPIO_InitS
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ALL,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
&&GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
& &GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
& & GPIO_Init(GPIOA, &GPIO_InitStructure);
int main(void)
& & SystemInit(); //Setup STM32 system (clock, PLL and Flash configuration)
GPIO_Config();
GPIO_SetBits(GPIOA,GPIO_Pin_4);
& & while (1)
&&GPIO_ResetBits(GPIOA,GPIO_Pin_4);
&&delay_ms(1000);
&&GPIO_SetBits(GPIOA,GPIO_Pin_4);
&&delay_ms(1000);
助理工程师
21:25:57  
程序没有问题, 那几个脚是因为主复位是处于jtag模式,而你恰好又使用的是jtag 调试,所以不能软件禁止。。。。。。。。
个人觉得你现在可以:
1、看一下开发板的电路图, 看一下pa4是否在理论上连接到插针上,还要看是否在那儿硬件拉低了。。。这一步排除理论上的因素
2.&&检查一下 插针到 stm32f103单片机引脚的电路是否导通, 可以用万用表测试,&&还应该检测一下是否能被正确的拉高 或者拉低。。。。。
02:02:58  
感觉就是有利必有弊
13:04:02  
复位期间和刚复位后,复用功能未开启,I/O端口被配置成浮空输入模式(CNFx[1:0]=01b,
MODE[1:0]=00b)。
复位后,JTAG引脚被置于输入上拉或下拉模式:
& & & & ─ & & & & PA15:JTDI置于上拉模式
& & & & ─ & & & & PA14:JTCK置于下拉模式
& & & & ─ & & & & PA13:JTMS置于上拉模式
& & & & ─ & & & & PB4:&&JNTRST置于上拉模式
助理工程师
18:41:38  
感谢楼主的分享!!!!!!!!!!!!!!!!!!!
19:51:58  
HQchip华强芯城--工程师的元器件商城
《孙立波1小时征服STM8》
Powered by求助stm32103c8的PB4脚问题。 - STM32/STM8技术论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
求助stm32103c8的PB4脚问题。
助理工程师
20:32:18  
在学习PWM是用的TIM3的部分重映射到PB4通道1.发现不起作用。。其他通道可用。有测试下PB4点亮二极管,发现也不行。但测得该管脚与排针是通的。求解释原因。下附点亮二极管程序。
int main(void)
& &RCC_Configuration();& & & & //?u???±????? 1/4 >>?
& &GPIO_Configuration();//??????? 1/4 >>?
& & & & while(1)
& & & & & & & & GPIO_SetBits(GPIOB,GPIO_Pin_5);
& & & & & & & & delay(6000000);//0.5s
& & & & & & & & GPIO_ResetBits(GPIOB,GPIO_Pin_5);
& & & & & & & & delay(6000000);//0.5s
& & & & & & & & GPIO_SetBits(GPIOB,GPIO_Pin_4);
& & & & & & & & delay(6000000);//0.5s
& & & & & & & & GPIO_ResetBits(GPIOB,GPIO_Pin_4);
& & & & & & & & delay(6000000);//0.5s
void RCC_Configuration(void)
& & SystemInit();
& & & & RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
& & & & //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
void GPIO_Configuration(void)
& & GPIO_InitTypeDef GPIO_InitS& & & &
& & & & GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_4;
& & & & GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
& & & & GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
& & & & GPIO_Init(GPIOB,&GPIO_InitStructure);
PB4是JTAG的复位引脚吧
使用之前先关掉其JTAG功能
类似于一下操作,AFIO时钟一定要打开,否则无效
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE) ; 关闭JTAG,保留SW做调试用
助理工程师
20:32:19  
PB4是JTAG的复位引脚吧
使用之前先关掉其JTAG功能
类似于一下操作,AFIO时钟一定要打开,否则无效
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE) ; 关闭JTAG,保留SW做调试用
01:25:19  
当年试过,就是用传感器,怎么也读不了值,就是用的pb4,现在想起来,可能是同样的原因吧,有可能软件设置的问题吧。。
助理工程师
11:16:37  
PB4是JTAG的复位引脚吧
使用之前先关掉其JTAG功能
类似于一下操作,AFIO时钟一定要打开,否则无效
非常感谢,如你所说的,问题解决了
助理工程师
11:27:19  
当年试过,就是用传感器,怎么也读不了值,就是用的pb4,现在想起来,可能是同样的原因吧,有可能软件设置的问题吧。。
非常感谢,楼下正解
17:24:06  
因为STM32F10x系列的MCU复位后,PA13/14/15 & PB3/4默认配置为JTAG功能
1、禁用PB4复用功能
& & GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);
& & 或者GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);
& & 用这两天其中一条,完全禁用JTAG+SW-DP或者屏蔽JTAG-DP,用来释放各个io。
注意:还是用以下这条来释放PB4吧,因为上面两条会禁用SW和JTAG,造成无法调试
& && &&&GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE);
2、正常配置IO
& && &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_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13;
&&GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
&&GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
&&GPIO_Init(GPIOA, &GPIO_InitStructure);& &&&
3、注意:不要忘记在RCC_Configuration()中开启AFIO时钟,
&&//AFIO时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
使PB4口作为正常IO 方法
{& &1 GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);
& & 或者GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);
2 在RCC_Configuration()中开启AFIO时钟,
&&//AFIO时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
注:stm32L1系列的低功耗单片机,直接用正常配置io的方法就可以了,不行再用GPIO_PinRemapConfig。
另外:当使用PB4 /PB3之后,JTAG不能使用,可以用SW来下载程序,只需在下载软件里选择SW接口就可以了(用的是j-link V8)
23:41:04  
非常感谢,如你所说的,问题解决了
谢!{:12:}
助理工程师
08:12:32  
因为STM32F10x系列的MCU复位后,PA13/14/15 & PB3/4默认配置为JTAG功能
1、禁用PB4复用功能
非常感谢,讲的很详细,因为没有用仿真器,没接触到那几个引脚,又涨知识了,哈哈再次感谢
Powered by21ic官方微信
后使用快捷导航没有帐号?
查看: 10951|回复: 8
how to: 将STM32 的 PB3 当作GPIO
&&已结帖(0)
主题帖子积分
助理工程师, 积分 1108, 距离下一级还需 892 积分
助理工程师, 积分 1108, 距离下一级还需 892 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
助理工程师, 积分 1108, 距离下一级还需 892 积分
助理工程师, 积分 1108, 距离下一级还需 892 积分
STM32F103&的&JTAG,&默认状态是Full&SWJ。The&default&state&after&reset&is&“000”&(whole&pins&assigned&for&a&full&JTAG-DP&connection).PB3作为JDO,被JTAG占用。在&TRACE&Asynchronous&mode,PB3还是TRACESWO。若系统不需要JTAG,将PB3当作GPIO,需要如下设置:&&RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO&|&RCC_APB2Periph_GPIOB&,&ENABLE);&&GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);第一句中的&RCC_APB2Periph_AFIO&设置&AFIOEN(如果没有这一句,后面两句失效)。如果一个模块的clock&DISABLE,那么,寄存器的值也无法读写。有了上面两句,就可以进一步对PB3进行操作了。例如&&GPIO_InitStructure.GPIO_Pin&=&GPIO_Pin_3&|&GPIO_Pin_4&|&GPIO_Pin_5&|&GPIO_Pin_6;&&GPIO_InitStructure.GPIO_Speed&=&GPIO_Speed_2MHz;&&GPIO_InitStructure.GPIO_Mode&=&GPIO_Mode_Out_PP;&&GPIO_Init(GPIOB,&&GPIO_InitStructure);&&GPIOB-&gtODR&=&0x08;
主题帖子积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
提示: 作者被禁止或删除 内容自动屏蔽
主题帖子积分
主题帖子积分
专家等级:结帖率:37%打赏:0.00受赏:9.00
主题帖子积分
哈哈,功能很强大!
请参考STM32技术参考手册的第7.3.4节(JTAG/SWD&alternate&function&remapping),下面第一个语句可以释放PB3、PB4和PA15做普通I/O口,下面的第二个语句可以进一步释放PA13和PA14做普通I/O口;如果只需要使用PB3做普通I/O口,只使用第一个语句即可,第二个语句多余了。GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);
主题帖子积分
助理工程师, 积分 1108, 距离下一级还需 892 积分
助理工程师, 积分 1108, 距离下一级还需 892 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
助理工程师, 积分 1108, 距离下一级还需 892 积分
助理工程师, 积分 1108, 距离下一级还需 892 积分
连JTAG都用了,当然是用光了IO
所以,第二个语句并没有&多余。呵呵PB3作为JDO,被JTAG占用。在&TRACE&Asynchronous&mode,PB3还是TRACESWO。TRACESWO&if&async&trace&&is&enabled&&&&&&PB3所以,连&SWJ&也&Disable
主题帖子积分
主题帖子积分
专家等级:结帖率:37%打赏:0.00受赏:9.00
主题帖子积分
哈哈,如果第二个语句不多余,第一个语句就是多余的啦
主题帖子积分
主题帖子积分
专家等级:结帖率:14%打赏:0.00受赏:40.00
主题帖子积分
GPIO_Remap_SWJ_JTAGDisable&是使能SWJ,禁用JTAGGPIO_Remap_SWJ_Disable&是全部禁用
主题帖子积分
助理工程师, 积分 1459, 距离下一级还需 541 积分
助理工程师, 积分 1459, 距离下一级还需 541 积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:7.00
主题帖子积分
助理工程师, 积分 1459, 距离下一级还需 541 积分
助理工程师, 积分 1459, 距离下一级还需 541 积分
专业燃气泄漏、一氧化碳检测;厨房安全小助手
送礼当然送“安全”,您还在愁送朋友什么好吗?不妨进来看看吧!
/index.htm?spm
主题帖子积分
初级技术员, 积分 78, 距离下一级还需 22 积分
初级技术员, 积分 78, 距离下一级还需 22 积分
主题帖子积分
专家等级:结帖率:50%
主题帖子积分
初级技术员, 积分 78, 距离下一级还需 22 积分
初级技术员, 积分 78, 距离下一级还需 22 积分
主题帖子积分
实习生, 积分 12, 距离下一级还需 38 积分
实习生, 积分 12, 距离下一级还需 38 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
实习生, 积分 12, 距离下一级还需 38 积分
实习生, 积分 12, 距离下一级还需 38 积分
刚刚试过了配置好了之后,要拔掉仿真器重新上电不然PB3一直是低电平。
荣誉元老奖章
等级类勋章
坚毅之洋流
发帖类勋章
时间类勋章
技术领袖奖章
人才类勋章
精英会员奖章
等级类勋章
奔腾之江水
发帖类勋章
技术奇才奖章
人才类勋章
时间类勋章
欢快之小溪
发帖类勋章
社区建设奖章
等级类勋章
技术新星奖章
人才类勋章
时间类勋章stm32 PB3 端口读入数据一直为零的问题? - STM32 - 意法半导体STM32/STM8技术社区
后使用快捷导航没有帐号?
查看: 311|回复: 8
stm32 PB3 端口读入数据一直为零的问题?
主题帖子威望
中级会员, 积分 311, 距离下一级还需 189 积分
中级会员, 积分 311, 距离下一级还需 189 积分
本帖最后由 wn1900 于
15:54 编辑
使用芯片:STM32F103RCT
开发环境:MDK5.1.2
调试方法:JTAG+SWD
遇到问题:PB3端口作为输入,一直读取到的是低电平,不管外部输入是不是高电平,都一直读取到的是低电平。
问题原因:
因为在使用SWD调试的时候要取消trace跟踪调试,Pb3端口还是没法正常读取到数据。
查找资料发现,别人发贴说是以为默认使用的JTAG调试方式或者是SWD方式占用了PB3端口,所以
没办法使用。类似的问题在其他论坛出现过:。
最后发现解决办法就是:
在程序初始化的时候要加上这两句话来让PB3 PA15 PB3 能正常使用。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);& && && && &&&
DBGMCU-&CR&&&= ~((uint32_t)1&&5);& &
AFIO-&MAPR = (AFIO-&MAPR & ~((uint32_t)0x7 && 24)) | (2 && 24);& &&&/*&&PA15 PB3 PB4 */
加上这两句话之后,PB3作为IO口输入数据就正常。
主题帖子威望
中级会员, 积分 311, 距离下一级还需 189 积分
中级会员, 积分 311, 距离下一级还需 189 积分
调试了好久才发现是这个问题,希望看到这个帖子的童鞋能少走点弯路
主题帖子威望
初级会员, 积分 181, 距离下一级还需 19 积分
初级会员, 积分 181, 距离下一级还需 19 积分
学习了,,多谢分享,,,,
主题帖子威望
金牌会员, 积分 1642, 距离下一级还需 1358 积分
金牌会员, 积分 1642, 距离下一级还需 1358 积分
14.gif (1.62 KB, 下载次数: 0)
18:28 上传
主题帖子威望
论坛元老, 积分 3763, 距离下一级还需 9996236 积分
论坛元老, 积分 3763, 距离下一级还需 9996236 积分
主题帖子威望
高级会员, 积分 972, 距离下一级还需 28 积分
高级会员, 积分 972, 距离下一级还需 28 积分
遇到问题:PB3端口作为输入,一直读取到的是低电平,不管外部输入是不是高电平,都一直读取到的是低电平。
主题帖子威望
金牌会员, 积分 2993, 距离下一级还需 7 积分
金牌会员, 积分 2993, 距离下一级还需 7 积分
学习一下!
主题帖子威望
中级会员, 积分 311, 距离下一级还需 189 积分
中级会员, 积分 311, 距离下一级还需 189 积分
遇到问题:PB3端口作为输入,一直读取到的是低电平,不管外部输入是不是高电平,都一直读取到的是低电平。
不带这样复制的吧
主题帖子威望
高级会员, 积分 972, 距离下一级还需 28 积分
高级会员, 积分 972, 距离下一级还需 28 积分
不带这样复制的吧
哦,记录一下这问题怎么解决的
站长推荐 /1
即日起报名参加STM32研讨会有机会获得STM32开发板和千元实物大奖!现场直播研讨会的网友还能获得ST定制大礼,更有终极神秘事揭晓!>>报名参加
Tel: 3-8056
备案号: 苏ICP备号-2
Powered by爹们,花一分钟帮我看一下STM32 LED 的问题(代码如下,但是只有PB5闪烁,PB3,PB4没反应)_百度知道
爹们,花一分钟帮我看一下STM32 LED 的问题(代码如下,但是只有PB5闪烁,PB3,PB4没反应)
GPIO_InitStructure。;
}}void delay_ms(void){
delay_ms(), GPIO_Pin_4).GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5.GPIO_Speed = GPIO_Speed_50MHz;void RCC_Configuration(void), GPIO_Pin_4);
GPIO_SetBits( GPIOB; GPIO_Configuration();
GPIO_Init(GPIOB, GPIO_Pin_3)#include &void delay_ms(void), GPIO_Pin_5);
delay_ms();}void GPIO_Configuration(void){
GPIO_InitTypeDef GPIO_InitS
GPIO_SetBits( GPIOB;}void RCC_Configuration(void){
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |
RCC_APB2Periph_GPIOB。;
GPIO_ResetBits( GPIOB;stm32f10x_ for(i=0, GPIO_Pin_5), &GPIO_InitStructure);
GPIO_InitS
GPIO_ResetBits( GPIOB;
GPIO_ResetBits( GPIOB;int main(void){
RCC_Configuration();
GPIO_InitSi++) ; }把同样PB的设置换成PA口也不行, ENABLE).GPIO_Mode = GPIO_Mode_Out_PP;while (1)
GPIO_SetBits( GPIOB;void GPIO_Configuration(void);i&600000.h&quot, GPIO_Pin_3)
提问者采纳
ENDP中间那个SystemInit不是所有的库函数版本都有的你用的库版本是多少的。具体方法, =SystemInit
R0。2?如果是比3..5早的版本的话;/ Reset handlerReset_Handler
Reset_Handler
SystemInit
R0,是不会自动添加 初始化函数到启动文件的:1,你的也许不是这个名字,当然启动文件不尽相同.、打开startup_stm32f10x_md.。所以你得在main函数开始的地方int main(void) { SystemInit().s;添加这个、找到.,所以你自己要打开启动文件看看main函数那里有没有添加.;&#47
提问者评价
这两个IO默认是JTAG,关掉就可以了,还是多谢了
其他类似问题
为您推荐:
您可能关注的推广
stm32的相关知识
其他1条回答
不会是io口烧坏了把
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 stm32f103 pb3 pb4 的文章

 

随机推荐