打印
[STM32F1]

STM32 引脚设置了复用推挽后会强制输出低电平??

[复制链接]
6816|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
相关代码:
        GPIO_SetBits(GPIOA,GPIO_Pin_3);     //预先把PA3置高
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA,&GPIO_InitStructure);

执行完上面的代码后,PA3立即变成低电平了。
但是我单步调试的时候,查看GPIOA->ODR,发现,对应的PA3还是高电平啊,但是万用表实测确实是变成了低电平,请问大神这是为什么呀!?

调试图.PNG (51.85 KB )

单步调试图

单步调试图
沙发
mmuuss586| | 2015-6-3 19:02 | 只看该作者
你第一句执行的时候,没有初始化IO;
那么调用库函数,第一句指令实际是没执行;

也就是无效;
当然输出0啊;GPIO_SetBits(GPIOA,GPIO_Pin_3);   

可以在初始化完后加:

使用特权

评论回复
板凳
diweo| | 2015-6-3 19:35 | 只看该作者
本帖最后由 diweo 于 2015-6-3 19:38 编辑

你设置成复用功能后,引脚的实际输出就不受ODR寄存器影响了。
另外,你设置复用后,引脚输出低电平只是凑巧。实际输出是不确定的。

捕获.JPG (136.93 KB )

捕获.JPG

捕获.JPG (265.93 KB )

捕获.JPG

使用特权

评论回复
地板
戈卫东| | 2015-6-3 19:54 | 只看该作者
你既然选择了AF输出那么GPIO的寄存器就不会影响它的输出了

使用特权

评论回复
5
icecut| | 2015-6-3 20:35 | 只看该作者
同意楼上. af 已经接管了.你方法有误,应该配置复用功能默认是高电平

使用特权

评论回复
6
GilbertWu|  楼主 | 2015-6-4 10:54 | 只看该作者
感谢楼上几位好心人,已经解决问题了,设了复用功能后,ODR寄存器就不会控制引脚输出;在复用功能那里先设置相应的配置,然后再配置GPIO为AF_PP就不会出现电平的跳变了

使用特权

评论回复
评论
274632473 2018-7-4 14:36 回复TA
楼主这个结尾很给力,当出现抖动时就先配置复用的功能,完了在开启GPIO的复用功能,问题完美解决。 
7
田雪超txc| | 2017-10-17 17:09 | 只看该作者
GilbertWu 发表于 2015-6-4 10:54
感谢楼上几位好心人,已经解决问题了,设了复用功能后,ODR寄存器就不会控制引脚输出;在复用功能那里先设 ...

你好,请问复用功能的IO口怎么配置输出电平为高or低电平,我的微信是1092609022,盼复,急急急

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

28

帖子

1

粉丝