0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ESP32學(xué)習(xí)筆記:硬件定時(shí)器

CHANBAEK ? 來(lái)源:跳動(dòng)的字節(jié) ? 作者:曉宇 ? 2023-07-14 15:00 ? 次閱讀

今天我們來(lái)玩兒硬件定時(shí)器。

硬件定時(shí)器概述

ESP32內(nèi)置4個(gè)64-bit的通用定時(shí)器,每個(gè)定時(shí)器包含一個(gè) 16-bit 預(yù)分頻器和一個(gè)64-bit 可自動(dòng)重新加載向上/向下計(jì)數(shù)器,定時(shí)器是分為兩組的,每組兩個(gè)。

定時(shí)器有以下特性:

  • 16-bit 時(shí)鐘預(yù)分頻器,分頻系數(shù)為 2-65536
  • 64-bit 時(shí)基計(jì)數(shù)器
  • 可配置的向上/向下時(shí)基計(jì)數(shù)器:增加或減少
  • 暫停和恢復(fù)時(shí)基計(jì)數(shù)器
  • 報(bào)警時(shí)自動(dòng)重新加載
  • 當(dāng)報(bào)警值溢出/低于保護(hù)值時(shí)報(bào)警
  • 軟件控制的即時(shí)重新加載
  • 電平觸發(fā)中斷和邊沿觸發(fā)中斷

每個(gè)定時(shí)器以APB_CLK(80MHz)作為基礎(chǔ)時(shí)鐘,通過(guò)預(yù)分頻器(16-bit)進(jìn)行分頻后,產(chǎn)生最終的時(shí)鐘信號(hào),每過(guò)一個(gè)周期,計(jì)數(shù)器會(huì)向上加一或者向下減一,計(jì)數(shù)器支持自動(dòng)重新加載和軟件即時(shí)重新加載,計(jì)數(shù)器達(dá)到軟件設(shè)定值時(shí)會(huì)觸發(fā)報(bào)警事件。

使用定時(shí)器,可以按照一定的頻率自動(dòng)的重復(fù)執(zhí)行我們需要的任務(wù),本示例我們簡(jiǎn)單演示一個(gè)LED燈在定時(shí)器的控制下閃爍的案例。

硬件

SDA硬件連接很簡(jiǎn)單,這里接到IO4

圖片

軟件

初始化定時(shí)器

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

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

設(shè)置定時(shí)器中斷回調(diào)函數(shù)

第一個(gè)參數(shù)為使用哪個(gè)定時(shí)器;第二個(gè)參數(shù)為定時(shí)器超時(shí),中斷的回調(diào)函數(shù);第三個(gè)參數(shù),如果為true,則報(bào)警產(chǎn)生邊緣類型中斷。

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

設(shè)置定時(shí)器的定時(shí)值

第一個(gè)參數(shù)為使用哪個(gè)定時(shí)器;第二個(gè)參數(shù)為定時(shí)器的定時(shí)值,如果為1000000,每個(gè)計(jì)數(shù)周期為1us,定時(shí)時(shí)間就是1秒;第三個(gè)參數(shù)為是否自動(dòng)重載,選擇true,在定時(shí)時(shí)間到達(dá)后會(huì)重復(fù)計(jì)時(shí)。

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

啟動(dòng)定時(shí)器

啟動(dòng)定時(shí)器后,將開(kāi)始計(jì)時(shí)。

bool timerAlarmEnabled(hw_timer_t *timer);

定時(shí)器還有其它函數(shù),都在庫(kù)文件中,大家可以在下面兩個(gè)文件中找到相關(guān)源碼。

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

完整程序

這里我們用一個(gè)例子來(lái)演示一下,定時(shí)器計(jì)時(shí)周期設(shè)置為1秒,在中斷函數(shù)中控制指示燈以1秒為周期閃爍。

#define LED_GPIO 4

/* 創(chuàng)建硬件定時(shí)器 */
hw_timer_t * timer = NULL;
/* LED 狀態(tài) */
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);
 
  /* 使用定時(shí)器0,1/(80MHZ/80) = 1us ,周期為1us */
  timer = timerBegin(0, 80, true);
 
  /* 中斷回調(diào)函數(shù)為T(mén)imer0_Interrupt */
  timerAttachInterrupt(timer, &Timer0_Interrupt, true);
 
  /* 計(jì)數(shù)Count為1000000,也就是1秒中斷一次,重復(fù)計(jì)數(shù) */
  timerAlarmWrite(timer, 1000000, true);
 
  /* 啟動(dòng)定時(shí)器*/
  timerAlarmEnable(timer);
  Serial.println("timer0 start");
}
 
void loop() {
 
}

實(shí)驗(yàn)效果:

圖片

示波器觀察:

圖片

定時(shí)器使用比較簡(jiǎn)單,當(dāng)然,在一些不是特別精準(zhǔn)的場(chǎng)合,使用一個(gè)硬件定時(shí)器,我們也可以創(chuàng)建軟件定時(shí)器,這樣就可以定義很多個(gè)不同的定時(shí)任務(wù)了,這個(gè)后面遇到案例了我們?cè)僬归_(kāi)討論。

感謝大家,關(guān)于ESP32的學(xué)習(xí),希望大家Enjoy!

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 分頻器
    +關(guān)注

    關(guān)注

    43

    文章

    447

    瀏覽量

    49988
  • 計(jì)數(shù)器
    +關(guān)注

    關(guān)注

    32

    文章

    2256

    瀏覽量

    94706
  • 時(shí)鐘
    +關(guān)注

    關(guān)注

    11

    文章

    1736

    瀏覽量

    131583
  • 定時(shí)器
    +關(guān)注

    關(guān)注

    23

    文章

    3251

    瀏覽量

    115013
  • ESP32
    +關(guān)注

    關(guān)注

    18

    文章

    971

    瀏覽量

    17365
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    通用硬件定時(shí)器的相關(guān)資料下載

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

    為什么選擇esp_timer定時(shí)器作為esp32首選軟件定時(shí)器

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

    ESP32S2硬件定時(shí)器中斷翻轉(zhuǎn)GPIO問(wèn)題求解

    使用ESP32S2作為平臺(tái),設(shè)置硬件定時(shí)器每隔500us調(diào)用一次中斷函數(shù),在中斷函數(shù)里面翻轉(zhuǎn)一個(gè)GPIO的管腳;用邏輯分析儀能抓到一個(gè)周期為1ms,脈寬為500us的方形波形;但是初始化
    發(fā)表于 02-16 07:47

    ESP8266的管腳的控制和軟件定時(shí)器的使用

    先說(shuō)定時(shí)器ESP8266內(nèi)部的定時(shí)器分為軟件定時(shí)器硬件定時(shí)器。手冊(cè)中指出
    的頭像 發(fā)表于 07-29 14:57 ?9540次閱讀
    <b class='flag-5'>ESP</b>8266的管腳的控制和軟件<b class='flag-5'>定時(shí)器</b>的使用

    ESP32 開(kāi)發(fā)筆記(四)LVGL控件學(xué)習(xí) Window 窗口控件 X

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

    基于硬件定時(shí)器的軟件定時(shí)器

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

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

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

    [ESP32]學(xué)習(xí)筆記02

    [ESP32學(xué)習(xí)筆記02]使用ViusalStudio2017開(kāi)發(fā)ESP32、按鍵輸入檢測(cè)前言一、安裝Visual Studio 2017二、配置開(kāi)發(fā)環(huán)境1.安裝ViusalGDB2.
    發(fā)表于 12-03 17:36 ?23次下載
    [<b class='flag-5'>ESP32</b>]<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>02

    [ESP32]學(xué)習(xí)筆記04

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

    SPI主線協(xié)議——ESP32學(xué)習(xí)筆記

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

    ESP32_PWM學(xué)習(xí)總結(jié)

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

    ESP32 單片機(jī)學(xué)習(xí)筆記 - 04 - ADC和定時(shí)器

    ESP32 單片機(jī)學(xué)習(xí)筆記 - 04 - ADC和定時(shí)器一、模擬數(shù)字轉(zhuǎn)換 ADC編程指南:Analog to Digital Conver
    發(fā)表于 01-17 13:18 ?11次下載
    <b class='flag-5'>ESP32</b> 單片機(jī)<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b> - 04 - ADC和<b class='flag-5'>定時(shí)器</b>

    定時(shí)器學(xué)習(xí)筆記

    學(xué)習(xí)報(bào)告20210522定時(shí)器的概述與結(jié)構(gòu)8051單片機(jī)片內(nèi)有二個(gè)十六位定時(shí)器/計(jì)數(shù)定時(shí)器0(T0)和
    發(fā)表于 01-17 13:29 ?2次下載
    <b class='flag-5'>定時(shí)器</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>

    基于ESP32的低功耗藍(lán)牙暗室定時(shí)器

    電子發(fā)燒友網(wǎng)站提供《基于ESP32的低功耗藍(lán)牙暗室定時(shí)器.zip》資料免費(fèi)下載
    發(fā)表于 02-09 11:53 ?0次下載
    基于<b class='flag-5'>ESP32</b>的低功耗藍(lán)牙暗室<b class='flag-5'>定時(shí)器</b>

    ESP32-C3硬件定時(shí)器簡(jiǎn)介及使用

    ESP32-C3 有2個(gè)定時(shí)器組,每個(gè)組有2個(gè)定時(shí)器,共有4個(gè)定時(shí)器
    的頭像 發(fā)表于 03-14 11:43 ?4871次閱讀
    <b class='flag-5'>ESP32</b>-C3<b class='flag-5'>硬件</b><b class='flag-5'>定時(shí)器</b>簡(jiǎn)介及使用