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

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

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

3天內不再提示

STM32基礎知識:定時器輸入捕獲功能

CHANBAEK ? 來源:上下求索電子er ? 作者:上下求索電子er ? 2023-10-25 15:19 ? 次閱讀

定時器輸入捕獲功能

1 輸入捕獲功能概述

1.1 輸入捕獲功能的用途和工作原理

  • 用途:用于測量信號參數,比如周期和頻率。
  • 工作原理:在輸入捕獲模式下,當捕獲單元捕捉到外部信號的有效邊沿(上升沿/下降 沿/雙邊沿)時,將計數器的當前值鎖存到捕獲/比較寄存器TIMx_CCR, 供用戶讀取。

1.2 捕獲通道的內部結構

圖片

圖片

1.3 捕獲過程示意圖

圖片

圖片

將兩次捕獲值相減,再乘以計數時間可計算出信號周期

1.4 信號參數計算公式

信號參數計算公式

周期

頻率

當待測信號不大于定時器的一個完整計數周期(從0到ARR)時。假設兩次連續的捕獲值分別為CCRx_1 和 CCRx_2,則捕獲差值可以按照如下方法計算:

  • 如果 CCRx_1 < CCRx_2:捕獲差值 = CCRx_2 - CCRx_1
  • 如果 CCRx_1 > CCRx_2:捕獲差值 = (ARR + 1 - CCRx_1) + CCRx_2

注意:如果待測信號大于定時器的一個完整計數周期,則需要結合定時器的更新中斷次數來計算捕獲差值。

1.5 輸入捕獲功能的數據類型和接口函數

圖片

成員變量ICPolarity的取值范圍

宏常量定義含義
TIM_ICPOLARITY_RISING上升沿捕獲
TIM_ICPOLARITY_FALLING下降沿捕獲
TIM_ICPOLARITY_BOTHEDGE雙邊沿捕獲

成員變量ICSelection的取值范圍

宏常量定義含義
TIM_ICSELECTION_DIRECTTI直接輸入模式:捕獲通道CH1和CH2分別與IC1和IC2連接.捕獲通道CH3和CH4分別與IC3和IC4連接.
TIM_ICSELECTION_DIRECTT2間接輸入模式:捕獲通道CH1和CH2分別與IC2和IC1連接.捕獲通道CH3和CH4分別與IC4和IC3連接.
TIM_ICSELECTION_TRC選擇從模式管理器的觸發信號TRC 作獲信號.

成員變量ICPrescaler的取值范圍

宏常量定義含義
TIM_ICPSC_DIV1檢測到輸入信號的每1個有效邊沿觸發1次捕獲
TIM_ICPSC_DIV2檢測到輸入信號的每2個有效邊沿觸發1次捕獲
TIM_ICPSC_DIV3檢測到輸入信號的每4個有效邊沿觸發1次捕獲
TIM_ICPSC_DIV4檢測到輸入信號的每8個有效邊沿觸發1次捕獲
  1. 輸入捕獲啟動函數:HAL_TIM_IC_Start_IT

    函數原型uint32_t HAL_TIM_IC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
    功能描述用于在中斷方式下啟動定時器的輸入捕獲功能
    入口參數htim:定時器句柄的地址Channel:定時器通道號,取值范圍是TIM_CHANNEL_1~TIM_CHANNEL_4
    返回值HAL狀態值
    注意事項1. 該函數在定時器初始化完成之后調用2. 函數需要由用戶調用,用于使能定時器的捕獲中斷,并啟動定時器運行
  2. 輸入捕獲停止函數:HAL_TIM_IC_Stop_IT

    函數原型HAL_StatusTypeDef HAL_TIM_IC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
    功能描述用于停止在中斷方式下定時器的輸入捕獲功能
    入口參數htim:定時器句柄的地址Channel:定時器通道號,取值范圍是TIM_CHANNEL_1~TIM_CHANNEL_4
    返回值HAL狀態值
    注意事項1. 該函數需要由用戶調用,用于禁止捕獲中斷,關閉輸入捕獲通道,停止 定時器運行
  3. 輸入捕獲中斷回調函數:HAL_TIM_IC_CaptureCallback

    函數原型void HAL_TIM_IC_CaptureCallback (TIM_HandleTypeDef *htim)
    功能描述用于處理所有定時器的輸入捕獲中斷,用戶在該函數內編寫實際的任務處理程序
    入口參數htim:定時器句柄的地址
    返回值
    注意事項1. 該函數由定時器中斷通用處理函數HAL_TIM_IRQHandler調用,完成所 有定時器輸入捕獲中斷的任務處理2. 函數內部需要根據定時器句柄的實例來判斷是哪一個定時器的哪一個通道 產生的本次輸入捕獲中斷3. 函數由用戶根據具體的處理任務編寫
  4. 捕獲值讀取函數:HAL_TIM_ReadCapturedValue

    函數原型uint32_t HAL_TIM_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel)
    功能描述用于處理所有定時器的輸入捕獲中斷,用戶在該函數內編寫實際的任務處理程序
    入口參數htim:定時器句柄的地址Channel:定時器通道號,取值范圍是TIM_CHANNEL_1~TIM_CHANNEL_4
    返回值捕獲值
    注意事項1. 函數需要由用戶調用,用于讀取發生捕獲時的捕獲值
  5. 捕獲邊沿設置函數:__HAL_TIM_SET_CAPTUREPOLARITY

    函數原型__HAL_TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__
    功能描述用于設置輸入信號的捕獲邊沿
    入口參數HANDLE :定時器句柄的地址__Channel__:定時器通道號, 取值范圍是TIM_CHANNEL_1~TIM_CHANNEL_4__POLARITY__ :捕獲邊沿, 取值范圍是TIM_INPUTCHANNELPOLARITY_RISING/FALLING/BOTHEDGE
    返回值
    注意事項1. 該函數是宏函數,進行宏替換,不發生函數調用2. 函數需要由用戶調用,用于設置輸入信號的有效捕獲邊沿

2 任務實踐

利用定時器2的通道1(對應引腳PA0)來測量一個外部脈沖信號的周期和頻率,外部脈沖信號利用引腳PA6輸入。

  1. 配置定時器2時鐘源為內部時鐘源(8MHz),通道一為輸入捕獲方式。
    配置時基單元
    • 預分頻系數PSC為0,即計數時鐘CK_CNT為8MHz,便于擴大測量頻率的范圍。
    • 設置自動重載值ARR為最長的計數周期,便于擴大測量頻率的脈寬。
      配置輸入捕獲通道采用默認參數
  • 捕獲有效邊沿為上升沿
  • 捕獲通道為直接輸入方式
  • 捕獲信號不分頻
  • 捕獲信號不進行濾波

圖片

使能定時器2的全局中斷,中斷優先級使用默認值

圖片

  1. 配置定時器3時鐘源為內部時鐘源(8MHz),通道一為PWM輸出模式。
    設置預分頻系數PSC為399,自動重載值 ARR為199,表示PWM信號的周期為10ms。
    設置捕獲/比較值CRR為100, 表示PWM信號的占空比為50%
    圖片
  2. 打開串口USART1,并在工程中添加頭文件和prinrf函數重定義,Keil中勾選USE MicroLIB。
    在CubeMX中配置串口,在Keil中使用“Use MicroLIB”并在代碼中重定向printf函數的方法在STM32基礎:定時器的定時計數功能中有詳細講解。
  3. 編寫程序
    /* USER CODE BEGIN PV */
    uint32_t Diff       = 0;   // 存放捕獲差值
    uint32_t Period     = 0;   // 存放計算所得周期
    uint8_t MeasureFlag = 0;   // 測量完成標志:  0表示未完成,  1表示完成
    uint8_t CapIndex    = 0;   // 捕獲指示:  0表示沒有開始捕獲,  1表示完成一次捕獲
    uint32_t CapVal1    = 0;   // 存放第一次捕獲值
    uint32_t CapVal2    = 0;   // 存放第二次捕獲值
    /* USER CODE END PV */
    
    /* USER CODE BEGIN 2 */
      printf("Timer Capture Function Test: n");
      HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1);
      HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
      /* USER CODE END 2 */
    
      /* USER CODE BEGIN 3 */
        if(MeasureFlag == 1) 
        {
          if(CapVal2 >=  CapVal1)
          {
            Diff = CapVal2 -  CapVal1;
          }
          else
          {
            Diff = ((65535 + 1 - CapVal1) + CapVal2) ;
          }
        }
        Period = Diff/20000;
        printf ("Period    is: %.4fmsrn", Diff/20000.0);
        printf ("Frequency is: %dHzrn", 8000000/Period);
        printf ("/*****************************/rn");
        MeasureFlag = 0;
        HAL_Delay(1000);
        HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1);
      }
      /* USER CODE END 3 */
    
    /* USER CODE BEGIN 4 */
    int fputc (int ch, FILE *f)
    {
        HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, HAL_MAX_DELAY);
        return ch;
    }
    
    int fgetc(FILE *f)
    {
        uint8_t ch = 0;
        HAL_UART_Receive(&huart1, (uint8_t *)&ch, 1, HAL_MAX_DELAY);
        return ch;
    }
    
    void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
    {
      if (htim- >Instance == TIM2)
      {
        if (htim- >Channel == HAL_TIM_ACTIVE_CHANNEL_1)
        {
          if (CapIndex == 0)
          {
            CapVal1 = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);
            CapIndex = 1;
          }
          if (CapIndex == 1)
          {
            CapVal2 = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);
            CapIndex = 0;
            MeasureFlag = 1;
          }
          else
          {
            Error_Handler();
          }
        }
      }
    }
    /* USER CODE END 4 */
    
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5343

    瀏覽量

    120368
  • STM32
    +關注

    關注

    2270

    文章

    10900

    瀏覽量

    356012
  • 計數器
    +關注

    關注

    32

    文章

    2256

    瀏覽量

    94570
  • 定時器
    +關注

    關注

    23

    文章

    3248

    瀏覽量

    114803
收藏 人收藏

    評論

    相關推薦

    詳解STM32定時器捕獲功能

    STM32定時器是支持信號輸入捕獲的,何為輸入捕獲?主要做什么應用?
    的頭像 發表于 01-12 17:24 ?8473次閱讀
    詳解<b class='flag-5'>STM32</b><b class='flag-5'>定時器</b><b class='flag-5'>捕獲</b><b class='flag-5'>功能</b>

    STM32定時器(三)輸入捕獲

    STM32定時器是支持信號輸入捕獲的,何為輸入捕獲?主要做什么應用?
    的頭像 發表于 07-21 14:58 ?4376次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>定時器</b>(三)<b class='flag-5'>輸入</b><b class='flag-5'>捕獲</b>

    定時器基礎知識

    目錄:一、定時器基礎知識二、基本定時器(TIM6和TIM7)三、通用定時器(TIM2~TIM6)1.功能特點2.時鐘源3.時基單元4.
    發表于 08-09 07:30

    stm32定時器pwm模式輸入捕獲功能

    stm32定時器pwm模式輸入捕獲##stm32中的定時器,除了TIM6和TIM7,其他
    發表于 08-18 07:41

    STM32 --通用定時器輸入捕獲功能 精選資料推薦

    問題:開始的時候沒有搞清楚 定時器時基 于 定時器溢出中斷導致在計算的時候一直有問題。開始并沒有懷疑是配置有問題,因為之前接觸過定時器輸入捕獲
    發表于 08-19 06:34

    從應用方面詳解STM32定時器輸入捕獲模式

    從應用來說STM32定時器輸入捕獲模式前言原理輸入捕獲初始化程序中斷函數和處理函數前言我們知道
    發表于 01-06 07:37

    stm32定時器輸入捕獲

    不同頻率、不同占空比的方波信號、PWM信號,同時做為輸入捕獲功能時,可以測量脈沖寬度、實現電容按鍵檢測等等。 一、輸入捕獲概念
    發表于 10-13 09:13 ?2.4w次閱讀
    <b class='flag-5'>stm32</b><b class='flag-5'>定時器</b><b class='flag-5'>輸入</b><b class='flag-5'>捕獲</b>

    基于STM32定時器輸入捕獲解析

    輸入捕獲模式可以用來測量脈沖寬度或者測量頻率。STM32定時器,除了TIM6和TIM7,其他定時器都有
    發表于 09-04 11:00 ?6020次閱讀

    stm32 定時器 捕獲

    輸入捕獲模式可以用來測量脈沖寬度或者測量頻率。STM32定時器,除了TIM6和TIM7,其他定時器都有
    發表于 09-08 17:07 ?2392次閱讀

    基于STM32定時器捕獲測量脈寬的應用示例

    我們知道,利用單片機定時器捕獲功能測量脈沖信號寬度及占空比是種很常見的做法。這里以STM32定時器為例來介紹基于其
    的頭像 發表于 01-02 18:17 ?1.3w次閱讀
    基于<b class='flag-5'>STM32</b><b class='flag-5'>定時器</b><b class='flag-5'>捕獲</b>測量脈寬的應用示例

    STM32CubeMX——定時器輸入捕獲

    通用定時器在基本定時器的基礎上增加了一個外部引腳,可以實現輸入捕獲與輸出比較等功能。高級定時器T
    發表于 12-02 14:06 ?9次下載
    <b class='flag-5'>STM32</b>CubeMX——<b class='flag-5'>定時器</b><b class='flag-5'>輸入</b><b class='flag-5'>捕獲</b>

    STM32定時器輸入捕獲實驗

    概述輸入捕獲模式可以用來測量脈沖寬度或者測量頻率。STM32定時器,除了 TIM6 和 TIM7,其他定時器都有
    發表于 12-14 18:58 ?20次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>定時器</b><b class='flag-5'>輸入</b><b class='flag-5'>捕獲</b>實驗

    stm32捕獲占空比_【話說定時器系列】之六:STM32定時器輸入捕獲話題

    TIMER 的基本應用原理、常規應用等?,F在將課程內容整理為文章,針對STM32定時器有基本了解的用戶,分享具體的應用實現環節及常見問題解決。STM32定時器除了基本計數
    發表于 12-27 19:02 ?2次下載
    <b class='flag-5'>stm32</b><b class='flag-5'>捕獲</b>占空比_【話說<b class='flag-5'>定時器</b>系列】之六:<b class='flag-5'>STM32</b><b class='flag-5'>定時器</b><b class='flag-5'>輸入</b><b class='flag-5'>捕獲</b>話題

    stm32捕獲占空比_「話說定時器系列」之六:STM32定時器輸入捕獲話題

    TIMER 的基本應用原理、常規應用等?,F在將課程內容整理為文章,針對STM32定時器有基本了解的用戶,分享具體的應用實現環節及常見問題解決。STM32定時器除了基本計數
    發表于 12-27 19:02 ?8次下載
    <b class='flag-5'>stm32</b><b class='flag-5'>捕獲</b>占空比_「話說<b class='flag-5'>定時器</b>系列」之六:<b class='flag-5'>STM32</b><b class='flag-5'>定時器</b><b class='flag-5'>輸入</b><b class='flag-5'>捕獲</b>話題

    通用定時器輸入捕獲實驗

    STM32輸入捕獲,簡單的說就是通過檢測TIMx_CHx(定時器X的通道X)上的邊沿信號,在邊沿信號發生跳變(上升沿/下降沿)的時候,將定時器
    發表于 01-12 19:53 ?9次下載
    通用<b class='flag-5'>定時器</b>的<b class='flag-5'>輸入</b><b class='flag-5'>捕獲</b>實驗
    主站蜘蛛池模板: 欧美成人三级伦在线观看| 国产亚洲综合色就色| 日本三级日本三级人妇三级四 | 欧美 亚洲 一区| 一区二区中文字幕在线观看| 三级aa久久| 天堂色综合| 国产成人精品日本亚洲语音1| 国产黄色在线视频| 乱e伦有声小说| 素股中文字幕| 欧美大片一区二区三区| 香蕉操| 91插插视频| 国产精品第9页| 久久久噜噜噜久久| 天天色天天射天天操| 中国同志chinese小彬tv| 国产在线播放成人免费| 色婷婷综合久久久中文字幕| 狠狠色丁香婷婷综合小时婷婷| 免费你懂的| 在线capcom超级碰碰| www.色五月| 一级毛片日韩| 毛片在线看免费版| 天天操天天草| 一区二区三区四区无限乱码在线观看 | 香蕉成人国产精品免费看网站| 好爽好大www视频在线播放 | 播五月综合| 欧美影欧美影院免费观看视频| 日日操日日爽| 34看网片午夜理| 四虎新网址| 99色在线| 欧美成人黄色| 日韩三级观看| 午夜久| 视频一区二区三区在线观看| 你懂的在线免费|