打印
[技术问答]

PA0设置为准双向模式做按键,为什么不行?

[复制链接]
1297|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
duo点|  楼主 | 2025-2-24 13:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
NUC472芯片,想用PA0做一个按键。
省掉了不相关的部分,程序如下:
SYS_UnlockReg();
..............................................................
SYS->GPA_MFPL    =    (SYS->GPA_MFPL & (~SYS_GPA_MFPL_PA0MFP_Msk) ) | SYS_GPA_MFPL_PA0MFP_GPIO  ;   
..................................................
SYS_LockReg();
..........................................................

GPIO_SetMode(PA,BIT0,GPIO_MODE_QUASI);
    PA0 = 1;
     if(PA0 == 0)
    {
        if(PA0 == 0)
        {
        SPIflshUpload();
        }
    }
按钮一直没有做用,就用示波器看了一下,结果发现不管我的按钮按不按下去PA0都是低电平的(另一个按键PI3口相同设置一直都是高电平)
如果用GPIO_SetMode(PA,BIT0,GPIO_MODE_OUTPUT)A0上才会有一个上升到芯片供电电压一半的短脉冲。
后来加了一个10K的上接电阻,按键才算正常了。是我漏掉了什么设置吗?请高手指教。

使用特权

评论回复
沙发
gra22ce| | 2025-4-8 12:41 | 只看该作者
你已经在代码中将PA0配置为GPIO模式,并且设置为准双向模式(GPIO_MODE_QUASI)。这个配置是正确的,但需要注意准双向模式:在这种模式下,引脚既可以作为输入也可以作为输出。当作为输入时,引脚内部有一个弱上拉电阻。如果外部电路没有上拉电阻,可能会导致引脚电平不稳定。

使用特权

评论回复
板凳
清芯芯清| | 2025-4-8 14:12 | 只看该作者
虽然准双向模式内部有弱上拉电阻,但这个电阻的阻值可能较大(通常在几十kΩ到几百kΩ之间),不足以抵抗外部干扰或漏电流。

使用特权

评论回复
地板
twinkhahale| | 2025-4-8 15:24 | 只看该作者
如果你没有在外部电路中加入上拉电阻,按键按下时引脚会被拉低,但按键未按下时引脚可能会因为内部上拉电阻较弱而无法稳定保持高电平。

使用特权

评论回复
5
suiziq| | 2025-4-8 16:39 | 只看该作者
你已经通过添加一个10kΩ的上拉电阻解决了问题,这是正确的做法

使用特权

评论回复
6
一切D都好| | 2025-4-8 17:35 | 只看该作者
在按键电路中,通常需要在按键和地之间加入一个上拉电阻(通常为4.7kΩ到10kΩ)。这样,当按键未按下时,引脚会被上拉电阻拉至高电平;当按键按下时,引脚会被拉低至地电平

使用特权

评论回复
7
星星点点didi| | 2025-4-8 22:14 | 只看该作者
如果你希望引脚在没有外部上拉电阻的情况下也能正常工作,可以考虑使用输入模式(GPIO_MODE_INPUT)并启用内部上拉电阻(如果芯片支持)。

使用特权

评论回复
8
canfeil| | 2025-4-9 08:52 | 只看该作者
你可以优化一下代码,确保在按键检测时加入去抖动处理,以避免误触发

使用特权

评论回复
9
miltk| | 2025-4-9 12:30 | 只看该作者
你遇到的问题主要是由于PA0引脚在没有外部上拉电阻的情况下无法稳定保持高电平。通过添加外部上拉电阻,你已经解决了这个问题。如果你希望进一步优化设计,可以考虑使用内部上拉电阻或加入去抖动处理

使用特权

评论回复
10
wamed| | 2025-4-9 15:57 | 只看该作者
其实估计是你的IO没配置或者不支持配置上下拉的状态吧

使用特权

评论回复
11
teaccch| | 2025-4-9 19:12 | 只看该作者
一般都是外置上下拉,其实也是对的

使用特权

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

本版积分规则

460

主题

1780

帖子

1

粉丝