OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3892|回复: 5

关于IO口控制的问题,求助

[复制链接]

9

主题

35

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2021-11-10
在线时间
32 小时
发表于 2021-12-24 17:43:07 | 显示全部楼层 |阅读模式
5金钱
我写了一个按键控制继电器的程序,IO口默认下拉。
现在不管是什么信号,甚至我用一截线或者用手摸内个IO口,IO口都会触发,继电器会吸合,这是啥原因啊?

附上程序:
初始化
    GPIO_Initure.Pin=GPIO_PIN_0;           //PB0
    GPIO_Initure.Mode=GPIO_MODE_INPUT;      //输入
    GPIO_Initure.Pull=GPIO_PULLDOWN;          //下拉
    GPIO_Initure.Speed=GPIO_SPEED_HIGH;     //高速
    HAL_GPIO_Init(GPIOB,&GPIO_Initure);
定义  
#define INPUT1_RCC_CLK_ENABLE           __HAL_RCC_GPIOB_CLK_ENABLE
#define INPUT1_GPIO                     GPIOB
#define INPUT1_GPIO_PIN                 GPIO_PIN_0


继电器
    GPIO_InitTypeDef GPIO_Initure;


    __HAL_RCC_GPIOB_CLK_ENABLE();                   //开启GPIOB时钟
    __HAL_RCC_GPIOE_CLK_ENABLE();                   //开启GPIOE时钟

    GPIO_Initure.Pin=GPIO_PIN_5;                                
    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;          //推挽输出
    GPIO_Initure.Pull=GPIO_PULLUP;                  //上拉
    GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;    //高速
    HAL_GPIO_Init(GPIOE,&GPIO_Initure);
       
    GPIO_Initure.Pin=GPIO_PIN_5;                                 //PB5
    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;          //推挽输出
    GPIO_Initure.Pull=GPIO_PULLUP;                  //上拉
    GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;    //高速
    HAL_GPIO_Init(GPIOB,&GPIO_Initure);
       
    HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_SET);        //置1,默认初始化后灯灭
    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET);        //置1,默认初始化后灯灭
主程序

if(((ADC_ConvertedValue[0]&0xFFF)>=2900)||((ADC_ConvertedValue[0]&0xFFF)>=2900)||((ADC_ConvertedValue[0]&0xFFF)>=2900))
                {
                        /*上限保护*/
                        printf("\n\ru\n\r");
                        LED1=1;
                        //HAL_Delay(1000);
                        LED0=1;
                }
                else
                {
                if(HAL_GPIO_ReadPin(INPUT1_GPIO,INPUT1_GPIO_PIN)==1)
                        {
                        /*手动开*/
                        LED1=0;
                        LED0=0;
                                printf("\n\rsss\n\r");
                  HAL_Delay(10000);//始化延迟
                       
                        }
    else
                {
                        if(((ADC_ConvertedValueLocal[0])<=0.5)||((ADC_ConvertedValueLocal[1])<=0.5)||((ADC_ConvertedValueLocal[2])<=0.5))
                  {
                        /*下限保护*/
                         printf("\n\rd\n\r");
       LED0=1;
       //HAL_Delay(1000);       
       LED1=1;                       
                  }
          }
          }                               



最佳答案

查看完整内容[请看2#楼]

看意思应该是PB0输入,然后检测到置一,再控制电位器吸合. 既然是程序,那你就滤波下啊,这个跟按键抖动不是一个道理吗?这种高频的偶发尖峰不要就好了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

80

主题

931

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3348
金钱
3348
注册时间
2013-5-28
在线时间
468 小时
发表于 2021-12-24 17:43:08 | 显示全部楼层
看意思应该是PB0输入,然后检测到置一,再控制电位器吸合.
既然是程序,那你就滤波下啊,这个跟按键抖动不是一个道理吗?这种高频的偶发尖峰不要就好了
回复

使用道具 举报

2

主题

369

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4241
金钱
4241
注册时间
2020-7-24
在线时间
714 小时
发表于 2021-12-24 18:17:00 | 显示全部楼层
帮顶  
回复

使用道具 举报

6

主题

890

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1481
金钱
1481
注册时间
2020-8-19
在线时间
336 小时
发表于 2021-12-25 09:39:55 | 显示全部楼层
这样有可能会形成一个脉冲,或者有静电
回复

使用道具 举报

9

主题

35

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2021-11-10
在线时间
32 小时
 楼主| 发表于 2021-12-26 14:40:18 | 显示全部楼层
聚东风 发表于 2021-12-25 09:56
看意思应该是PB0输入,然后检测到置一,再控制电位器吸合.
既然是程序,那你就滤波下啊,这个跟按键抖动不是一 ...

多谢指点
回复

使用道具 举报

9

主题

35

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2021-11-10
在线时间
32 小时
 楼主| 发表于 2021-12-26 14:40:39 | 显示全部楼层
bin133 发表于 2021-12-25 09:39
这样有可能会形成一个脉冲,或者有静电

好的,学习到了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-21 01:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表