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

[复制链接]
7211|7
 楼主| GilbertWu 发表于 2015-6-3 17:30 | 显示全部楼层 |阅读模式
相关代码:
        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还是高电平啊,但是万用表实测确实是变成了低电平,请问大神这是为什么呀!?

单步调试图

单步调试图
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
捕获.JPG
戈卫东 发表于 2015-6-3 19:54 | 显示全部楼层
你既然选择了AF输出那么GPIO的寄存器就不会影响它的输出了
icecut 发表于 2015-6-3 20:35 | 显示全部楼层
同意楼上. af 已经接管了.你方法有误,应该配置复用功能默认是高电平
 楼主| GilbertWu 发表于 2015-6-4 10:54 | 显示全部楼层
感谢楼上几位好心人,已经解决问题了,设了复用功能后,ODR寄存器就不会控制引脚输出;在复用功能那里先设置相应的配置,然后再配置GPIO为AF_PP就不会出现电平的跳变了

评论

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

你好,请问复用功能的IO口怎么配置输出电平为高or低电平,我的微信是1092609022,盼复,急急急
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

28

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部