中级会员
 
- 积分
- 200
- 金钱
- 200
- 注册时间
- 2021-11-10
- 在线时间
- 32 小时
|
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输入,然后检测到置一,再控制电位器吸合.
既然是程序,那你就滤波下啊,这个跟按键抖动不是一个道理吗?这种高频的偶发尖峰不要就好了
|