用systick做時間20ms的判斷,用狀態機概念的按鍵掃瞄三狀態去除抖動,狀態0:有按鍵按下,狀態1:有按鍵按下,判斷具體按鍵,狀態3:判斷按鍵抬起,沒20ms進行狀態的判斷。
流程圖:
systick程式(不包括初始化程式,初始化程式在delay.c中)
systick->load=20*fac_ms;//寫入裝載值
systick->val =0x00; //清零計數值
systick->ctrl=0x01 ; //啟動systick
temp = systick->ctrl;
if(temp&0x01&&(temp&(1<<16)))//判斷systick異常
出現的問題:
1.發現gpio_readinputdata讀取的資料不對,用gpio_readinputdatabit
代替正常。**分析,i/o口和資料位對應錯誤。pc_2,pc_3,pc_5,分別對應idr暫存器的第3位,第四位,第六位。
2.修改程式的結構,新增在狀態2執行完判斷後進入狀態3.
反思:考慮要調理清晰,分析要透徹見底,小心思維慣性!
stm32之按鍵實驗
前言 這個實驗比較簡單,就是對io口的配置。up鍵用來開啟led燈,down鍵用於關閉led燈,left鍵用於開啟蜂鳴器,right用於關閉蜂鳴器。1.初始化用到的io口 void key init 注意 這裡按鍵的io口為輸入功能,所以模式為輸入模式。另外上啦和下拉根據電路圖而定。還有,因為為輸入...
stm32 工業按鍵檢測 STM32按鍵的檢測
stm32的按鍵檢測相對比較簡單,首先按部就班的初始化連線的到的i o,然後寫乙個按鍵掃瞄函式,這個和51微控制器的差不多。以下是乙個比較典型的例子 利用按鍵控制led key.件 ifndef key h define key h include sys.h definekey0 gpio rea...
stm32學習筆記(二)按鍵實驗
本程式只供學習使用,未經作者許可,不得用於其它任何用途 alientek mini stm32開發板 按鍵輸入 驅動 正點原子 alientek 技術論壇 www.openedv.com 修改日期 2014 3 06 版本 v1.0 按鍵初始化函式 pa15和pc5 設定成輸入 void key i...