在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

    文章

    483

    瀏覽量

    50638
  • 計數器
    +關注

    關注

    32

    文章

    2282

    瀏覽量

    95800
  • 時鐘
    +關注

    關注

    11

    文章

    1855

    瀏覽量

    132632
  • 定時器
    +關注

    關注

    23

    文章

    3271

    瀏覽量

    116594
  • ESP32
    +關注

    關注

    20

    文章

    998

    瀏覽量

    18549
收藏 人收藏

    評論

    相關推薦

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

    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 ?9761次閱讀
    <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 ?38次下載
    <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 ?5307次閱讀
    <b class='flag-5'>ESP32</b>-C3<b class='flag-5'>硬件</b><b class='flag-5'>定時器</b>簡介及使用
    主站蜘蛛池模板: 激情五月综合综合久久69 | 中国一级特黄真人毛片免费看 | 国产免费糟蹋美女视频 | 日日噜噜夜夜狠狠久久aⅴ 日日噜噜夜夜狠狠久久丁香 | 日韩久久精品视频 | 成人在色线视频在线观看免费大全 | 日日干天天操 | 三级视频国产 | 色视频免费观看 | 97影院3| 天天躁夜夜躁狠狠躁2021a | h在线观看视频 | 在线天堂在线 | 国产在线视频你懂的 | 天天爱天天做天天爽 | 人人福利 | 亚洲成人www | 欧美一区亚洲 | 国产在线干 | 欧美成人看片一区二区三区 | 久久美女性网 | 最近视频在线播放免费观看 | 免费在线观看视频 | 思思久久96热在精品不卡 | 欧美一级片免费在线观看 | 免费网站黄成人影院 | 你懂的网址在线观看 | 黄色免费大全 | 加勒比视频网站 | 亚洲天堂一区二区三区 | 色婷婷色丁香 | 五月天在线播放 | 亚洲情a成黄在线观看动 | 五月天婷婷网亚洲综合在线 | 两性色午夜视频自由成熟的性 | 日本不卡在线一区二区三区视频 | 欧美xxxxxbbbb| 国产高清在线精品 | 欧美午夜一区 | 国产一区中文字幕 | 中文字幕第11页 |