[STM32F1] 强制输出低电平

[复制链接]
819|18
 楼主| renyaq 发表于 2020-1-18 13:41 | 显示全部楼层 |阅读模式
STM32 引脚设置了复用推挽后会强制输出低电平
xxmmi 发表于 2020-1-18 13:48 | 显示全部楼层

楼主详细说说怎么回事啊,这么说太笼统了
 楼主| renyaq 发表于 2020-1-18 13:51 | 显示全部楼层
相关代码:
        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立即变成低电平了。
llia 发表于 2020-1-18 13:55 | 显示全部楼层
但是我单步调试的时候,查看GPIOA->ODR,发现,对应的PA3还是高电平啊,但是万用表实测确实是变成了低电平,请问大神这是为什么呀!?
yufe 发表于 2020-1-18 13:57 | 显示全部楼层

什么意思?不是很明白你说的什么,能再解释一下这个现象吗
 楼主| renyaq 发表于 2020-1-18 14:01 | 显示全部楼层
gongche 发表于 2020-1-18 14:04 | 显示全部楼层
你第一句执行的时候,没有初始化IO;
那么调用库函数,第一句指令实际是没执行;
wangpe 发表于 2020-1-18 14:10 | 显示全部楼层

也就是无效;
当然输出0啊;GPIO_SetBits(GPIOA,GPIO_Pin_3);  
wuhany 发表于 2020-1-18 14:13 | 显示全部楼层
可以在初始化完后加:
zhuhuis 发表于 2020-1-18 14:16 | 显示全部楼层
你设置成复用功能后,引脚的实际输出就不受ODR寄存器影响了。
songqian17 发表于 2020-1-18 14:19 | 显示全部楼层
另外,你设置复用后,引脚输出低电平只是凑巧。实际输出是不确定的。
songqian17 发表于 2020-1-18 14:24 | 显示全部楼层
songqian17 发表于 2020-1-18 14:24 | 显示全部楼层
chuxh 发表于 2020-1-18 14:27 | 显示全部楼层
你既然选择了AF输出那么GPIO的寄存器就不会影响它的输出了
llljh 发表于 2020-1-18 14:33 | 显示全部楼层

同意楼上. af 已经接管了.你方法有误,应该配置复用功能默认是高电平
 楼主| renyaq 发表于 2020-1-18 14:36 | 显示全部楼层
感谢楼上几位好心人,已经解决问题了,设了复用功能后,ODR寄存器就不会控制引脚输出;在复用功能那里先设置相应的配置,然后再配置GPIO为AF_PP就不会出现电平的跳变了
jlyuan 发表于 2020-1-18 14:41 | 显示全部楼层
复用功能的IO口怎么配置输出电平为高or低电平
 楼主| renyaq 发表于 2020-1-18 14:45 | 显示全部楼层

明白了,多谢大家讨论这么多哈
晓伍 发表于 2020-2-5 11:35 | 显示全部楼层
是不是硬件连接有问题啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

700

主题

10138

帖子

4

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