IO輸入的姿勢
對於IO輸入采用與IO輸出類似的姿勢
- 1 使能時鍾
- 2 初始化IO口
- 2.1 定義一個初始化結構體
- 2.2 選擇要初始化的IO口
- 2.3 配置IO口的輸入模式
- 2.4 調用IO口初始化函數
- 3 讀取IO口
GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)
//配置輸入io口的示例
void LED_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;//定義一個初始化結構體
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能時鍾
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;//選擇要初始化的IO口
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//配置IO口的輸入模式
GPIO_Init(GPIOA,&GPIO_InitStructure);//調用IO口初始化函數
}
關於IO輸入的模式 參考
我不太懂
- 1 模擬輸入模式:此模式是將I/O口上的信號作為模擬信號直接輸到STM32內部的ADC上,進行采樣轉換。
- 2 上拉輸入模式:沒有輸入信號的時候默認輸入高電平(因為有弱上拉)等同於在IO上接一個上拉電阻,當IO沒有任何連接,即懸空,那么此時我們讀該IO的電平就是高電平
- 3 下拉輸入模式:沒有輸入信號的時候默認輸入低電平(因為有弱下拉)等同於在IO上接一個下拉電阻,當IO沒有任何連接,即懸空,那么此時我們讀該IO的電平就是低電平
- 4 浮空輸入模式:好似浮在空中,上面用繩子一拉就上去了,下面用繩子一拉就沉下去了,輸入什么信號才是什么信號,對於浮空輸入要保證有明確的輸入信號
//這是一個與主題沒什么關系的延時函數
void Delay(__IO u32 Count)
{
for(; Count != 0; Count--);
}
//按鍵處理函數
//返回按鍵值
//mode:0,不支持連續按;1,支持連續按;
//0,沒有任何按鍵按下
//1,KEY0按下
//2,KEY1按下
//3,KEY2按下
//4,KEY3按下 WK_UP
//注意此函數有響應優先級,KEY0>KEY1>KEY2>KEY3!!
u8 KEY_Scan(u8 mode)
{
static u8 key_up=1;//按鍵按松開標志
if(mode)key_up=1; //支持連按
if(key_up&&(KEY0==0||KEY1==0||KEY2==0||WK_UP==1))
{
delay_ms(10);//去抖動
key_up=0;
if(KEY0==0)return KEY0_PRES;
else if(KEY1==0)return KEY1_PRES;
else if(KEY2==0)return KEY2_PRES;
else if(WK_UP==1)return WKUP_PRES;
}else if(KEY0==1&&KEY1==1&&KEY2==1&&WK_UP==0)key_up=1;
return 0;// 無按鍵按下
}