色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

ESP32學習筆記:硬件定時器

CHANBAEK ? 來源:跳動的字節 ? 作者:曉宇 ? 2023-07-14 15:00 ? 次閱讀

今天我們來玩兒硬件定時器

硬件定時器概述

ESP32內置4個64-bit的通用定時器,每個定時器包含一個 16-bit 預分頻器和一個64-bit 可自動重新加載向上/向下計數器,定時器是分為兩組的,每組兩個。

定時器有以下特性:

  • 16-bit 時鐘預分頻器,分頻系數為 2-65536
  • 64-bit 時基計數器
  • 可配置的向上/向下時基計數器:增加或減少
  • 暫停和恢復時基計數器
  • 報警時自動重新加載
  • 當報警值溢出/低于保護值時報警
  • 軟件控制的即時重新加載
  • 電平觸發中斷和邊沿觸發中斷

每個定時器以APB_CLK(80MHz)作為基礎時鐘,通過預分頻器(16-bit)進行分頻后,產生最終的時鐘信號,每過一個周期,計數器會向上加一或者向下減一,計數器支持自動重新加載和軟件即時重新加載,計數器達到軟件設定值時會觸發報警事件。

使用定時器,可以按照一定的頻率自動的重復執行我們需要的任務,本示例我們簡單演示一個LED燈在定時器的控制下閃爍的案例。

硬件

SDA硬件連接很簡單,這里接到IO4

圖片

軟件

初始化定時器

定時器使用前需要初始化,第一個參數為使用哪個定時器,這里有4個定時器,所以參數可為0,1,2,3;第二個參數為預分頻數,定時器時鐘為80MHz,如果我們這里設置為80,那么每個計數周期就是1us;第三個參數為是否向上計數,true為向上,反之亦然。

hw_timer_t * timerBegin(uint8_t timer, uint16_t divider, bool countUp);

設置定時器中斷回調函數

第一個參數為使用哪個定時器;第二個參數為定時器超時,中斷的回調函數;第三個參數,如果為true,則報警產生邊緣類型中斷。

void timerAttachInterrupt(hw_timer_t *timer, void (*fn)(void), bool edge);

設置定時器的定時值

第一個參數為使用哪個定時器;第二個參數為定時器的定時值,如果為1000000,每個計數周期為1us,定時時間就是1秒;第三個參數為是否自動重載,選擇true,在定時時間到達后會重復計時。

void timerAlarmWrite(hw_timer_t *timer, uint64_t interruptAt, bool autoreload);

啟動定時器

啟動定時器后,將開始計時。

bool timerAlarmEnabled(hw_timer_t *timer);

定時器還有其它函數,都在庫文件中,大家可以在下面兩個文件中找到相關源碼。

esp32-hal-timer.h
esp32-hal-timer.c

完整程序

這里我們用一個例子來演示一下,定時器計時周期設置為1秒,在中斷函數中控制指示燈以1秒為周期閃爍。

#define LED_GPIO 4

/* 創建硬件定時器 */
hw_timer_t * timer = NULL;
/* LED 狀態 */
byte led_state = LOW;
 
void IRAM_ATTR Timer0_Interrupt(){
  led_state = !led_state;
  digitalWrite(LED_GPIO, led_state);
}
 
void setup() {
  Serial.begin(115200);
  pinMode(LED_GPIO, OUTPUT);
 
  /* 使用定時器0,1/(80MHZ/80) = 1us ,周期為1us */
  timer = timerBegin(0, 80, true);
 
  /* 中斷回調函數為Timer0_Interrupt */
  timerAttachInterrupt(timer, &Timer0_Interrupt, true);
 
  /* 計數Count為1000000,也就是1秒中斷一次,重復計數 */
  timerAlarmWrite(timer, 1000000, true);
 
  /* 啟動定時器*/
  timerAlarmEnable(timer);
  Serial.println("timer0 start");
}
 
void loop() {
 
}

實驗效果:

圖片

示波器觀察:

圖片

定時器使用比較簡單,當然,在一些不是特別精準的場合,使用一個硬件定時器,我們也可以創建軟件定時器,這樣就可以定義很多個不同的定時任務了,這個后面遇到案例了我們再展開討論。

感謝大家,關于ESP32的學習,希望大家Enjoy!

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 分頻器
    +關注

    關注

    43

    文章

    447

    瀏覽量

    49884
  • 計數器
    +關注

    關注

    32

    文章

    2256

    瀏覽量

    94485
  • 時鐘
    +關注

    關注

    10

    文章

    1733

    瀏覽量

    131458
  • 定時器
    +關注

    關注

    23

    文章

    3246

    瀏覽量

    114739
  • ESP32
    +關注

    關注

    18

    文章

    971

    瀏覽量

    17212
收藏 人收藏

    評論

    相關推薦

    通用硬件定時器的相關資料下載

    ESP32ESP-IDF 學習筆記(三)【通用硬件定時器(Timer)】文章目錄
    發表于 12-09 06:09

    為什么選擇esp_timer定時器作為esp32首選軟件定時器

    ESP32ESP-IDF 學習筆記(四)【高分辨率軟件定時器esp_imer)】文章目錄
    發表于 01-07 08:14

    ESP32S2硬件定時器中斷翻轉GPIO問題求解

    使用ESP32S2作為平臺,設置硬件定時器每隔500us調用一次中斷函數,在中斷函數里面翻轉一個GPIO的管腳;用邏輯分析儀能抓到一個周期為1ms,脈寬為500us的方形波形;但是初始化
    發表于 02-16 07:47

    ESP8266的管腳的控制和軟件定時器的使用

    先說定時器ESP8266內部的定時器分為軟件定時器硬件定時器。手冊中指出
    的頭像 發表于 07-29 14:57 ?9502次閱讀
    <b class='flag-5'>ESP</b>8266的管腳的控制和軟件<b class='flag-5'>定時器</b>的使用

    ESP32 開發筆記(四)LVGL控件學習 Window 窗口控件 X

    ESP32 開發筆記(四)LVGL控件學習 Window 窗口控件 X
    發表于 11-14 09:06 ?6次下載
    <b class='flag-5'>ESP32</b> 開發<b class='flag-5'>筆記</b>(四)LVGL控件<b class='flag-5'>學習</b> Window 窗口控件 X

    基于硬件定時器的軟件定時器

    概括硬件定時器很精確,軟件定時器無論如何都有延遲,主要用在不需要精確定時的地方,而且軟件定時比較浪費單片機資源。梳理講到
    發表于 11-25 09:51 ?8次下載
    基于<b class='flag-5'>硬件</b><b class='flag-5'>定時器</b>的軟件<b class='flag-5'>定時器</b>

    ESP32ESP-IDF 教學(三)——通用硬件定時器(Timer)

    ESP32ESP-IDF 學習筆記(三)【通用硬件定時器(Timer)】文章目錄
    發表于 11-26 11:36 ?37次下載
    <b class='flag-5'>ESP32</b> 之 <b class='flag-5'>ESP</b>-IDF 教學(三)——通用<b class='flag-5'>硬件</b><b class='flag-5'>定時器</b>(Timer)

    [ESP32]學習筆記02

    [ESP32學習筆記02]使用ViusalStudio2017開發ESP32、按鍵輸入檢測前言一、安裝Visual Studio 2017二、配置開發環境1.安裝ViusalGDB2.
    發表于 12-03 17:36 ?23次下載
    [<b class='flag-5'>ESP32</b>]<b class='flag-5'>學習</b><b class='flag-5'>筆記</b>02

    [ESP32]學習筆記04

    Analog-to-Digital Converter(模數轉換)的使用今天我們學習ESP32提供的ADC外設的使用,ESP32的每個ADC單元都支持兩種模式,單次讀取和連續讀取(D
    發表于 12-22 19:02 ?9次下載
    [<b class='flag-5'>ESP32</b>]<b class='flag-5'>學習</b><b class='flag-5'>筆記</b>04

    SPI主線協議——ESP32學習筆記

    目錄SPI主線協議——ESP32學習筆記零、前言一、什么是SPI?二、通信過程?三、極性和相位四、總結SPI主線協議——ESP32學習
    發表于 12-22 19:23 ?18次下載
    SPI主線協議——<b class='flag-5'>ESP32</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>

    ESP32_PWM學習總結

    esp32——PWM學習總結什么是PWM在esp32中初始化配置定時器配置通道配置修改輸出占空比方式使用軟件改變 PWM 占空比使用硬件改變
    發表于 12-22 19:39 ?12次下載
    <b class='flag-5'>ESP32</b>_PWM<b class='flag-5'>學習</b>總結

    ESP32 單片機學習筆記 - 04 - ADC和定時器

    ESP32 單片機學習筆記 - 04 - ADC和定時器一、模擬數字轉換 ADC編程指南:Analog to Digital Conver
    發表于 01-17 13:18 ?11次下載
    <b class='flag-5'>ESP32</b> 單片機<b class='flag-5'>學習</b><b class='flag-5'>筆記</b> - 04 - ADC和<b class='flag-5'>定時器</b>

    定時器學習筆記

    學習報告20210522定時器的概述與結構8051單片機片內有二個十六位定時器/計數定時器0(T0)和
    發表于 01-17 13:29 ?2次下載
    <b class='flag-5'>定時器</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>

    基于ESP32的低功耗藍牙暗室定時器

    電子發燒友網站提供《基于ESP32的低功耗藍牙暗室定時器.zip》資料免費下載
    發表于 02-09 11:53 ?0次下載
    基于<b class='flag-5'>ESP32</b>的低功耗藍牙暗室<b class='flag-5'>定時器</b>

    ESP32-C3硬件定時器簡介及使用

    ESP32-C3 有2個定時器組,每個組有2個定時器,共有4個定時器
    的頭像 發表于 03-14 11:43 ?4763次閱讀
    <b class='flag-5'>ESP32</b>-C3<b class='flag-5'>硬件</b><b class='flag-5'>定時器</b>簡介及使用
    主站蜘蛛池模板: 十二月综合缴缴情| 色噜噜噜视频| 婷婷亚洲AV色香蕉蜜桃| 亚洲午夜精品A片久久WWW解说| 777午夜精品久久AV蜜臀| 穿着丝袜被男生强行啪啪| 国产人妻人伦精品久久久| 美女与男人对肌免费网站| 色综合a在线| 中文字幕久久久| 国产成人综合在线视频| 理论片在线观看片免费| 善良的女房东味道2在线观看| 又亲又揉摸下面视频免费看| 公粗挺进了我的密道在线播放贝壳| 护士WC女子撒尿| 日本电影护士| 中文成人在线| 国产乱子影视频上线免费观看 | 国产精选视频在线观看| 美女大本营| 亚洲精品乱码久久久久久直播 | 牛牛免费视频| 亚洲妈妈精品一区二区三区| 大香网伊人久久综合观看| 狂野猛交xxxx吃奶| 亚洲AV无码国产精品色在线看 | 天天躁人人躁人人躁狂躁| 2021精品乱码多人收藏| 黑人娇小BBW| 神马电影我不卡4k手机在线观看| 97在线观看成人免费视频| 狠狠色狠狠色综合日日32| 熟女人妻AV五十路六十路| 99视频国产在线| 久久天堂成人影院| 亚洲AV无码影院在线播放| 给个男人都懂的网址2019| 秋霞电影网伦大理电影在线观看 | 无人区在线日本高清免费| XXX国产麻豆HD|