新手入门
- 积分
- 18
- 金钱
- 18
- 注册时间
- 2020-12-25
- 在线时间
- 2 小时
|
1金钱
STM32同一GPIO口字母不能同时设置上拉和下拉,有哪位大佬能告诉我吗,谢谢
例如,下面就有问题,但是同时都设置成上拉,或者下拉输入就没问题:
#include "key.h"
#include "delay.h"
#include "sys.h"
void KEY_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB ,ENABLE);//GPIOB
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPU;//上拉输入
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_11 ;
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_11);
// GPIO_ResetBits(GPIOB,GPIO_Pin_11);
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPD;//下拉输入
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_12 ;
GPIO_Init(GPIOB,&GPIO_InitStructure);
//GPIO_SetBits(GPIOB,GPIO_Pin_12);
GPIO_ResetBits(GPIOB,GPIO_Pin_12);
}
u8 KEY_Scan(u8 mode)//mode 0 不支持连续按键 1 支持连续按键
{
static u8 key = 1;//按键松开标志位
if(mode)
key = 1;
if(key&&(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)==0||GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)==1))//key0优先级高于key1
{
delay_ms(10);//消抖
key = 0;
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)==0)
return KEY0_PRESS;
else if (GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)== 1)
return KEY1_PRESS;
}
else if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)==1&&GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)==0)//按键都未按下
key = 1;
return 0;
}
|
|