STM32中斷+定時器實現長按、短按(一)

項目,要實現長按、短按、還有多按,用按鍵來控制單片機開關機,關機后進入到睡眠低功耗,所以我將按鍵配置中斷,用中斷來喚醒睡眠,加上定時器完成長短按鍵,話不多說,開始進入正題。(點擊此處黃色字體領取文中配套資料

單片機選擇STM32F103C8T6最小系統板

輕觸按鍵

在學習單片機時,接觸最多的外設除了LED就是按鍵,所以按鍵的介紹就只是簡單說一下。

根據按鍵原理圖可知,GPIO引腳P0.0(PA0)、P0.1(PA1)、P5.2在沒有按鍵沒有按下時連接的是R5、R6、R8三個電阻接地線,所以在按鍵沒有按下時處于低電平,按鍵K4、K3、K2 == 0;至于二極管D2、D3是按鍵K3、K4應用于影響按鍵K2的,不使用可以不用管。

當按鍵K4按下時,電源VDD接通經過電阻R5到達地線GND,GPIO引腳P0.0可檢測到高電平,按鍵K4 == 1,

按鍵是高電平響應,代碼可以這這樣寫:

//#include "key.c" void KEY_Init(void) {
	GPIO_InitTypeDef GPIO_InitStructure; //定義GPIO結構體 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉輸入 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //PA0引腳 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //輸出頻率 GPIO_Init(GPIOA, &GPIO_InitStructure); //結構體配置完成初始化 } uint8_t KEY_Stare(void) 
{ static uint8_t key_state = 0;//按鍵狀態位 if(KEY_STATA && !key_state) { printf("key_ON\r\n");//按下按鍵 key_state = 1;
	} if(!KEY_STATA && key_state) { printf("KEY_OFF\r\n");//松開按鍵 key_state = 0;
	} return key_state;
} //#include "key.h" #define KEY_STATE	!!(GPIOA->IDR & 0x0001)//寄存器讀取按鍵狀態位 #define KEY_STATA	!!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)//標準庫讀取 void KEY_Init(void); uint8_t KEY_Stare(void);

如果讀者按鍵是低電平響應,只需要修改KEY_STATA的取反即可。

 //#include "key.c" void KEY_Init(void) {
	GPIO_InitTypeDef GPIO_InitStructure; //定義GPIO結構體 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉輸入 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //PA0引腳 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //輸出頻率 GPIO_Init(GPIOA, &GPIO_InitStructure); //結構體配置完成初始化 } uint8_t KEY_Stare(void) 
{ static uint8_t key_state = 0;//按鍵狀態位 if(!KEY_STATA && !key_state) {//此處修改即可 printf("key_ON\r\n");//按下按鍵 key_state = 1;
	} if(KEY_STATA && key_state) { printf("KEY_OFF\r\n");//松開按鍵 key_state = 0;
	} return key_state;
} //#include "key.h" #define KEY_STATE	!!(GPIOA->IDR & 0x0001)//寄存器讀取按鍵狀態位 #define KEY_STATA	!!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)//標準庫讀取 void KEY_Init(void); uint8_t KEY_Stare(void); 


定時器

選擇STM32F103C8T6的通用定時器TIM2。

點擊此處完整代碼可進群免費領取!!!

嵌入式物聯網的學習之路非常漫長,不少人因為學習路線不對或者學習內容不夠專業而錯失高薪offer。不過別擔心,我為大家整理了一份150多G的學習資源,基本上涵蓋了嵌入式物聯網學習的所有內容。點擊下方鏈接,0元領取學習資源,讓你的學習之路更加順暢!記得點贊、關注、收藏、轉發哦!

the end

評論(0)