在機械按鍵的觸點閉合和斷開時,都會產生抖動,為了保證系統能正確識別按鍵的開關,就必須對按鍵的抖動進行處理。
按鍵的抖動對於人類來說是感覺不到的,但對微控制器來說,則是完全可以感應到的,而且還是乙個很「漫長」的過程,因為微控制器處理的速度在「微秒」級,而按鍵抖動的時間至少在「毫秒」級。
微控制器如果在觸點抖動期間檢測按鍵的通斷狀態,則可能導致判斷出錯,即按鍵一次按下或釋放被錯誤地認為是多次操作,從而引起誤處理。因此,為了確保微控制器對一次按鍵動作只作—次響應,就必須考慮如何消除按鍵抖動的影響。
按鍵讀取識別異常:根本是按鍵觸發後電平不穩定,會有波動,埠能識別。使用**延時,讓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...