STM32F407 按鍵抖動 延時消抖

2021-10-10 21:36:13 字數 1482 閱讀 3953

在機械按鍵的觸點閉合和斷開時,都會產生抖動,為了保證系統能正確識別按鍵的開關,就必須對按鍵的抖動進行處理。

按鍵的抖動對於人類來說是感覺不到的,但對微控制器來說,則是完全可以感應到的,而且還是乙個很「漫長」的過程,因為微控制器處理的速度在「微秒」級,而按鍵抖動的時間至少在「毫秒」級。

微控制器如果在觸點抖動期間檢測按鍵的通斷狀態,則可能導致判斷出錯,即按鍵一次按下或釋放被錯誤地認為是多次操作,從而引起誤處理。因此,為了確保微控制器對一次按鍵動作只作—次響應,就必須考慮如何消除按鍵抖動的影響。

按鍵讀取識別異常:根本是按鍵觸發後電平不穩定,會有波動,埠能識別。使用**延時,讓cpu忽略電平波動

方法:使用延時消抖

中斷模組:

解決作業一按鍵的衝突(cpu迴圈掃瞄檢測按鍵事件)

中斷模組能夠幫我們去檢測一些內定的一些異常事件源(中斷檢測內定異常,則給cpu報告異常)

1.內定事件異常

2.事件監聽

3.報告異常

4.優先順序:仲裁

5.收到中斷響應決策

6.繼續任務

stm32內部有很多固定的(編號列表)讓中斷模組檢測的中斷源(產生中斷異常的源頭動作)

gpio模組,…

nvic模組,巢狀中斷向量控制器,中斷管理模組,nvic管理的是全域性中斷,對中斷優先順序仲裁

exti模組,32中專門管理中斷的模組

eg:usb插拔,乙太網線插拔能對應掃瞄檢測驅動

檢測引腳電平變化:外部中斷,22個外部中斷,0-15是連線對應每組gpio的0-15;

配置中斷:

0.開啟exti相關時鐘rcc_ apb2periphclockcmd(rcc_ apb2periph_ syscfg, enable);

1.對應引腳使用gpio_init();配置為輸入模式

2.使用syscfg_ extilineconfig() ;選擇乙個引腳連線對應的乙個外部中斷線(exti0-15)

3.使用exti_init() ;選擇模式(中斷模式,事件模式(不會以中斷機制處理))(上公升沿,下降沿,都)

4.配置剛開啟的外部中斷優先順序(中斷管理,優先順序管理)涉及:仲裁器 配置中斷優先順序函式nvic_init();

優先順序:

搶占優先順序(0-15):第一優先

響應優先順序(0-15):第二優先

兩個或者兩個搶占優先順序一樣才考慮響應優先順序

#include

void lightinit (

void

)//配置燈

void

keyinit

(void

)//配置按鍵

void

delay

(int delay_t)

//設定粗延時

}int

main()

; lightinit ();

keyinit()

;while(1

)}}}

電容觸控按鍵實驗(STM32F407)

觸控電容按鍵 tpad 控制led的亮滅。使用的是檢測電容充放電時間的方法來判斷是否有觸控。r 是外接的電容充電電阻 上拉電阻,給電容充電 無觸控時,cs是tpad 與 pcb 之間的雜散電容。當有觸控時,cx 則是手指與 tpad 之間形成的電容,總的電容就為cs cx。圖中的開關是電容放電開關。...

基於stm32f407建立stm32F427工程

分為三個部分 1.啟動檔案 2.fwilib 包含兩個資料夾inc和src。src裡面是stm32資源的c檔案,inc則是32資源的h檔案 3.user這也是我不太理解的部分 ddbugconfig只包含了用於debug的初始化,則是f4的系統檔案。我是在f407的基礎上改的 總的來說 1.改了晶元...

STM32F407上除錯freeRTOS問題

是在正點原子的阿波羅stm32f429開發板上的例子改來的,他們的編譯沒有問題,我編譯時出現如下問題 定位到出錯的地方,是 再追 configmax syscall interrupt priority 的定義是 define configmax syscall interrupt priority...