STM8S 長按鍵識別

2021-08-11 04:39:04 字數 1137 閱讀 5531

最近學習開發stm8s003 mcu,,剛入手這顆mcu,對很多功能不太了解,只能一邊開發學習,記錄一下學習過程。

目前,需要實現key1按鍵長按3s進行關機,linux下直接獲取按鍵的開始時間戳和結束時間戳,可以直接確定按鍵的觸發時間,目前mcu採用的是按鍵中斷的方式,在中斷觸發後直接進入進入中斷函式進行處理,根據定時器的特性,現在是採用方法如下:

將tim1進行16分頻,即頻率為1mhz,然後設定arr(預裝載計數器)為60000,即每次產生溢位時間為60ms, rcr(重複計數暫存器)為50,即 50 * 60 = 3000ms = 3s 後產生乙個更新事件,而在按鍵中斷函式中,在按鍵釋放後,判斷是否由此更新事件表示,如果有,則判斷為按鍵觸發大於3s,即可實現關機功能。

在實際測試過程中,通過列印的方式進行測試,發現並不是準確的3s產生乙個更新事件,有時候2s多,有時候3s多,一直沒有找到原因,難道是因為內部的時鐘不准?感覺這個可能性比較小,現在還在查詢原因,如果有了解原因的,麻煩告知一下^_^

**如下:

按鍵配置

#define key1_port gpioc

#define key1_pin gpio_pin_3 //key1 pc3

#define key1 gpio_readinputpin(key1_port, key1_pin)

gpio_init(key1_port, (gpio_pin_typedef)key1_pin,gpio_mode_in_pu_it); //key1

tim1配置

tim1_deinit();

tim1_timebaseinit(15,tim1_countermode_up,60000,30);

tim1_arrpreloadconfig(enable);//使能自動重灌

tim1_cmd(enable);//開定時器

中斷函式

interrupt_handler(exti_portc_irqhandler, 5)}}

} }void key_start_detect()

uint8_t key_stop_detect()

return

0;}

STM8S 外部中斷應用之長按鍵識別

禁止中斷 進入停機模式 中斷返回 等待中斷 軟體中斷 如使用中斷函式時,可以通過在上圖中查詢相對應的中斷向量號,而中斷函式的名字可以自定義 basic interrupt vector table for stm8 devices typedef void far interrupt handler...

STM8S時鐘配置

1 stm8時鐘說明 stm8上電復位後預設使用內部的高速時鐘,並分頻成為2m用於系統執行。如果我們想要使用外部時鐘,需要進行時鐘切換,切換過程中還需要使用stvp進行晶元選項字的更改。2 stm8s時鐘配置 庫函式版 1 配置內部高速振盪器 hsi 的分頻器 1分頻 clk hsiprescale...

STM8S 操作內部EEPROM

對於stm8s103f3這款晶元來講,存在640個位元組的eeprom,當然如果有外部eeprom,自然是不會使用到內部的eeprom的。但小東西也有大用途,例如做無線應用時,減少成本的情況下,還能儲存一些特定設定,如 休眠時間,工作頻率,輸出功率,密碼等。下圖所示,stm8s系列eeprom大小一...