分享经验:使用PB3作为普通的IO口,比如用来读电平,但是读出来一直是低电平

2019-07-21 04:02发布

我用的是STM32F103VET6,在使用PB3作为普通的IO口,比如用来读电平的时候,读出来一直是低电平,引脚的电平是有变化的,但是程序中检测出来的一直是低电平,后来终于发现这个问题,还真是个特例啊,这么多引脚我就用了PB3.。。。解决的方法:STM32没有彻底释放PB3作为普通IO口使用,切换到SW调试可释放PB3PB4PA15,将它们做为普通IO口使用。用额外增加以下的代码才行:#define DBGMCU_CR  (*((volatile unsigned long *)0xE0042004))RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);DBGMCU_CR &=0xFFFFFFDF;  //这句话很重要,如果没有这段代码,PB3就会一直是低电平    按官方文档的说法是不需要DBGMCU_CR&= 0xFFFFFFDF这段代码,可能由于D版Keil或者JLINK的原因出现了BUG,使得STM32打开了异步跟踪,占用PB3,将异步跟踪关掉就行了。哈哈,新手菜鸟的新发现
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
八度空间
1楼-- · 2019-07-21 04:13
谢谢分享,不错
Man Dsan
2楼-- · 2019-07-21 05:25
这个问题曾困扰我好久,原来缺这句话DBGMCU_CR &=0xFFFFFFDF;
受教了,谢谢楼主
Jason_02
3楼-- · 2019-07-21 08:00
 精彩回答 2  元偷偷看……
愛無痕
4楼-- · 2019-07-21 13:01
这个放在什么位置,楼主
Jason_02
5楼-- · 2019-07-21 17:35
愛無痕 发表于 2016-4-11 12:18
这个放在什么位置,楼主

这几句话放在你初始化引脚的那个文件就行了,比如我用led灯的,就放在led.c这个文件里面
夏义道
6楼-- · 2019-07-21 22:58
谢谢楼主分享!!!!!!

一周热门 更多>