分享经验:使用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条回答
Jower
1楼-- · 2019-07-22 00:34
谢谢分享
LTY
2楼-- · 2019-07-22 01:14
 精彩回答 2  元偷偷看……
不死鸟
3楼-- · 2019-07-22 01:23
楼主很棒!
Conan2lan2
4楼-- · 2019-07-22 06:37
 精彩回答 2  元偷偷看……
江南孤舟
5楼-- · 2019-07-22 07:03
请教下楼主,我调试发现RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);这个才是必须的。DBGMCU_CR &=0xFFFFFFDF;  //这句话很重要,如果没有这段代码,PB3就会一直是低电平    这句可以不用啊。
xzh5508
6楼-- · 2019-07-22 12:25
谢谢分享!

一周热门 更多>