最近學習開發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大小一...