国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

STM32 hal庫使用筆記(三)定時(shí)器—輸入捕獲和計(jì)數(shù)脈沖

這篇具有很好參考價(jià)值的文章主要介紹了STM32 hal庫使用筆記(三)定時(shí)器—輸入捕獲和計(jì)數(shù)脈沖。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

一、簡(jiǎn)介

1.定時(shí)器簡(jiǎn)介

2.輸入捕獲簡(jiǎn)介

3.原理介紹

二、HAL庫配置

1.時(shí)鐘樹的設(shè)置

2.定時(shí)器時(shí)鐘源選擇

2.1 計(jì)數(shù)脈沖(代碼對(duì)應(yīng)3.1)

2.2 輸入捕獲(對(duì)應(yīng)代碼3.2)

?三、代碼編寫


實(shí)驗(yàn)?zāi)康模豪枚〞r(shí)器輸入捕獲實(shí)現(xiàn)LED翻轉(zhuǎn);按鍵充當(dāng)外部時(shí)鐘源,實(shí)現(xiàn)LED翻轉(zhuǎn)

實(shí)驗(yàn)平臺(tái):正點(diǎn)原子精英板

一、簡(jiǎn)介

1.定時(shí)器簡(jiǎn)介

參考:STM32 hal庫使用筆記(二)中斷—定時(shí)器中斷_亂碼小伙的博客-CSDN博客

2.輸入捕獲簡(jiǎn)介

? ? IC(Input Capture)輸入捕獲 輸入捕獲模式下,當(dāng)通道輸入引腳出現(xiàn)指定電平跳變時(shí),當(dāng)前CNT的值將被鎖存到CCR中,可用于測(cè)量PWM波形的頻率、占空比、脈沖間隔、電平持續(xù)時(shí)間等參數(shù)。

3.原理介紹

? ? 以下純屬個(gè)人理解,歡迎大家交流和指正,可能會(huì)有不準(zhǔn)確的地方。

? ? 輸入捕獲,大部分利用的是內(nèi)部時(shí)鐘作為時(shí)鐘源,設(shè)置PSC的值來決定計(jì)數(shù)器的計(jì)數(shù)頻率(即發(fā)生一次脈沖的時(shí)間),再配合設(shè)置的ARR的值可以得出定時(shí)器的周期/頻率。當(dāng)使能輸入捕獲以后,配合輸入捕獲回調(diào)函數(shù),記錄輸入脈沖的次數(shù)(包括上升沿/下降沿/雙邊沿)。那么周期*脈沖次數(shù)可以得出脈沖源的頻率/周期。

? ?計(jì)數(shù)脈沖我的理解是原理上簡(jiǎn)單很多,主要是將芯片上某個(gè)引腳復(fù)用為定時(shí)器的通道從而作為定時(shí)器的時(shí)鐘源,每輸入一次脈沖(高/低/雙邊),CNT的值加一,從而可以計(jì)算脈沖的數(shù)值,同樣也可以開啟定時(shí)中斷,設(shè)置ARR的值,當(dāng)達(dá)到預(yù)設(shè)值會(huì)觸發(fā)中斷,從而完成中斷回調(diào)函數(shù)中的操作。不過這樣的話,無法軟件得出脈沖的工作周期/頻率,因?yàn)槎〞r(shí)器的觸發(fā)中斷的周期無法軟件計(jì)算。

? ? 本次實(shí)驗(yàn)只是簡(jiǎn)單測(cè)試原理。

二、HAL庫配置

1.時(shí)鐘樹的設(shè)置

參考:STM32 hal庫使用筆記(一)GPIO的使用—流水燈_亂碼小伙的博客-CSDN博客

2.定時(shí)器時(shí)鐘源選擇
2.1 計(jì)數(shù)脈沖(代碼對(duì)應(yīng)3.1)

? ? 利用按鍵即PA0作為時(shí)鐘源,輸入脈沖,并開啟對(duì)應(yīng)中斷引腳。

stm32輸入脈沖計(jì)數(shù),STM32的hal庫使用,stm32,筆記,嵌入式硬件

?配置參數(shù):

由于只是簡(jiǎn)單測(cè)試,測(cè)試原理:輸入5次上升沿,LED燈點(diǎn)亮。由于按鍵一端接的是高電平,所以觸發(fā)極性選擇:上升沿。開啟自動(dòng)重裝。LED燈的配置省略。

stm32輸入脈沖計(jì)數(shù),STM32的hal庫使用,stm32,筆記,嵌入式硬件

PA0的配置,下拉輸入。

stm32輸入脈沖計(jì)數(shù),STM32的hal庫使用,stm32,筆記,嵌入式硬件

配置完成后生成代碼即可。

2.2 輸入捕獲(對(duì)應(yīng)代碼3.2)

? ?主要是利用按鍵輸入上升沿,檢驗(yàn)輸入捕獲回調(diào)函數(shù)是否能夠使用。打開NVIC對(duì)應(yīng)中斷,配置優(yōu)先級(jí)(默認(rèn)就行,反正只有一個(gè)中斷)。

stm32輸入脈沖計(jì)數(shù),STM32的hal庫使用,stm32,筆記,嵌入式硬件

?三、代碼編寫

3.1

? ?使用HAL庫后,定時(shí)器初始化,參數(shù)配置,公共服務(wù)函數(shù)等都已經(jīng)完成,用戶只需要打開中斷,配置回調(diào)函數(shù)即可。

void MX_TIM2_Init(void)
{
  TIM_SlaveConfigTypeDef sSlaveConfig = {0};
  TIM_MasterConfigTypeDef sMasterConfig = {0};

  htim2.Instance = TIM2;
  htim2.Init.Prescaler = 0;
  htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim2.Init.Period = 1;//按鍵有抖動(dòng),所以次數(shù)設(shè)置為1,能實(shí)現(xiàn)即可,后面會(huì)出文章繼續(xù)補(bǔ)充,本次只是檢測(cè)原理
  htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
  {
    Error_Handler();
  }
  sSlaveConfig.SlaveMode = TIM_SLAVEMODE_EXTERNAL1;
  sSlaveConfig.InputTrigger = TIM_TS_TI1FP1;
  sSlaveConfig.TriggerPolarity = TIM_TRIGGERPOLARITY_RISING;
  sSlaveConfig.TriggerFilter = 0;
  if (HAL_TIM_SlaveConfigSynchro(&htim2, &sSlaveConfig) != HAL_OK)
  {
    Error_Handler();
  }
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
  {
    Error_Handler();
  }
  HAL_TIM_Base_Start_IT(&htim2);//用戶添加,使能中斷
}

?tim.c的用戶編碼區(qū)添加中斷更新回調(diào)函數(shù)

? ? 特別主要的是:我配置完成后上電會(huì)自動(dòng)進(jìn)入一次回調(diào)函數(shù),百度后的說法是中斷使能等參數(shù)配置時(shí)順序的問題,暫未實(shí)驗(yàn)成功,所以代碼中軟件屏蔽掉了。大家如果有解決辦法,希望分享。

 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
 {
     static unsigned i;
     i++;
     if (htim->Instance == TIM2)
    {
        HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin);
        HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
    }
    if(i==1)
    {
        HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin);
        HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
    }    
 }

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

定時(shí)器計(jì)算脈沖數(shù)

3.2

同理,用戶只需使能中斷和使能輸入捕獲即可。

void MX_TIM2_Init(void)
{
  TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  TIM_MasterConfigTypeDef sMasterConfig = {0};
  TIM_IC_InitTypeDef sConfigIC = {0};

  htim2.Instance = TIM2;
  htim2.Init.Prescaler = 7200;
  htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim2.Init.Period = 5000;
  htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
  {
    Error_Handler();
  }
  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
  {
    Error_Handler();
  }
  if (HAL_TIM_IC_Init(&htim2) != HAL_OK)
  {
    Error_Handler();
  }
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
  {
    Error_Handler();
  }
  sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
  sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
  sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
  sConfigIC.ICFilter = 0;
  if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_1) != HAL_OK)
  {
    Error_Handler();
  }
      HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1);       /* 用戶添加,使能輸入捕獲 */
    __HAL_TIM_ENABLE_IT(&htim2, TIM_IT_UPDATE);         /* 用戶添加,使能更新中斷 */

}

在tim.c中添加中斷更新回調(diào)函數(shù)和輸入捕獲回調(diào)函數(shù)即可:

 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
 {
     if (htim->Instance == TIM2)
    {
        HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin);
    }   
 }
 void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
 {
     if (htim->Instance == TIM2)
    {
        HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
        TIM_RESET_CAPTUREPOLARITY(&htim2, TIM_CHANNEL_1);                      /* 一定要先清除原來的設(shè)置 */
        TIM_SET_CAPTUREPOLARITY(&htim2, TIM_CHANNEL_1, TIM_ICPOLARITY_RISING); /* 配置TIM5通道1上升沿捕獲 */
    }  
 
 }

實(shí)驗(yàn)效果:LED0定時(shí)閃爍,每收到一次上升沿會(huì)使得LED1翻轉(zhuǎn)

定時(shí)器輸入捕獲

歡迎大家交流和指正??!!不勝欣喜!文章來源地址http://www.zghlxwxcb.cn/news/detail-759886.html

到了這里,關(guān)于STM32 hal庫使用筆記(三)定時(shí)器—輸入捕獲和計(jì)數(shù)脈沖的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 基于HAL庫的STM32單定時(shí)器多路輸入捕獲測(cè)量PWM的頻率和占空比實(shí)現(xiàn)(狀態(tài)機(jī)方式實(shí)現(xiàn))

    基于HAL庫的STM32單定時(shí)器多路輸入捕獲測(cè)量PWM的頻率和占空比實(shí)現(xiàn)(狀態(tài)機(jī)方式實(shí)現(xiàn))

    目錄 ?寫在前面 先回顧下定時(shí)器的單路捕獲PWM 多路捕獲PWM的頻率和占空比(狀態(tài)機(jī)實(shí)現(xiàn)) 我的思路: 狀態(tài)圖 配置 給出示例代碼 測(cè)試效果 ????????先有了這篇文章實(shí)現(xiàn)了單定時(shí)器的多通道測(cè)量頻率,以外部時(shí)鐘的方式可測(cè)量任意頻率的方波),奈何不能多路測(cè)試PWM波的頻率,

    2024年02月12日
    瀏覽(18)
  • STM32筆記——定時(shí)器輸入捕獲功能(測(cè)量PWM的頻率和占空比)

    STM32筆記——定時(shí)器輸入捕獲功能(測(cè)量PWM的頻率和占空比)

    目錄 一、概述 二、輸入捕獲功能 2.1 輸入捕獲簡(jiǎn)介 2.2 輸入捕獲通道? 三、輸入捕獲功能測(cè)量PWM波的頻率和占空比 3.1 測(cè)量頻率的方法 3.2 測(cè)量過程 ? ? ? ? 主要介紹通用定時(shí)器的輸入捕獲功能,輸入信號(hào)由GPIO口進(jìn)入輸入捕獲通道,之后輸入部分對(duì)相應(yīng)的TIx輸入信號(hào)采樣,并

    2024年02月06日
    瀏覽(44)
  • stm32---定時(shí)器輸入捕獲

    stm32---定時(shí)器輸入捕獲

    ????????在定時(shí)器中斷實(shí)驗(yàn)章節(jié)中我們介紹了通用定時(shí)器具有多種功能,輸入捕獲就是其中一種。 STM32F1除了基本定時(shí)器TIM6和TIM7,其他定時(shí)器都具有輸入捕獲功能 。輸入捕獲可以對(duì)輸入的信號(hào)的上升沿,下降沿或者雙邊沿進(jìn)行捕獲,通常用于測(cè)量輸入信號(hào)的脈寬、測(cè)量

    2024年01月19日
    瀏覽(20)
  • STM32定時(shí)器-輸入捕獲

    STM32定時(shí)器-輸入捕獲

    輸入捕獲工作過程 一句話總結(jié)工作過程:通過檢測(cè)TIMx_CHx上的邊沿信號(hào),在邊沿信號(hào)發(fā)生跳變(比如上升沿/下降沿)的時(shí)候,將當(dāng)前定時(shí)器的值(TIMx_CNT)存放到對(duì)應(yīng)的捕獲/比較寄存器(TIMxCCRx)里面,完成一次捕獲。 步驟1:設(shè)置輸入捕獲濾波器(通道1為例) 輸入捕獲1濾

    2024年02月15日
    瀏覽(21)
  • STM32定時(shí)器(輸入捕獲)

    STM32定時(shí)器(輸入捕獲)

    ?上一章講了輸出比較的內(nèi)容,輸出比較就是定時(shí)器自增,同時(shí)和CCR比較,按照自己設(shè)置的比較要求,輸出REF高低電平,這一章我們講下面結(jié)構(gòu)圖輸出比較左邊部分,也就是 輸入捕獲 首先,介紹一下輸入捕獲 IC(input capture)輸入捕獲,輸入捕獲模式下,當(dāng)通道輸入引腳出現(xiàn)

    2024年02月09日
    瀏覽(20)
  • stm32 定時(shí)器輸入捕獲實(shí)驗(yàn)

    stm32 定時(shí)器輸入捕獲實(shí)驗(yàn)

    目錄 一,簡(jiǎn)介 二,配置過程 ?一,設(shè)置輸入捕獲濾波器? 二,設(shè)置輸入極性 三,設(shè)置輸入捕獲映射通道 ?四,設(shè)置輸入捕獲分頻器 ?五,設(shè)置中斷? ?三,寄存器 四,庫函數(shù) 五,一般步驟? ?六,軟件部分 輸入捕獲模式可以用來測(cè)量脈沖寬度或者測(cè)量頻率 原理圖 如圖 ?

    2024年01月21日
    瀏覽(18)
  • STM32 定時(shí)器輸入捕獲2——捕獲高電平時(shí)長(zhǎng)

    STM32 定時(shí)器輸入捕獲2——捕獲高電平時(shí)長(zhǎng)

    ????????由上圖我們可以知道,高電平時(shí)間=t2-t1。在代碼中,可以記錄此時(shí)t1的時(shí)間然后再記錄t2的時(shí)間,t2-t1,就是我們所想要的答案。 ? ? ? ? 但是,還有更簡(jiǎn)單一點(diǎn)點(diǎn)的,當(dāng)?shù)竭_(dá)t1的時(shí)候,我們把定時(shí)器清零,然后直接讀出t2,就是這個(gè)高電平的時(shí)間。 1.當(dāng)TIM3的TIM_F

    2024年01月18日
    瀏覽(26)
  • STM32 定時(shí)器輸入捕獲3——捕獲超長(zhǎng)高電平

    ? ? ? ? 第一章:https://blog.csdn.net/m0_73671341/article/details/134773615?spm=1001.2014.3001.5501 ? ? ? ? 第二章:https://blog.csdn.net/m0_73671341/article/details/134938332?spm=1001.2014.3001.5501 ????????從第一章的定時(shí)器捕獲我們可以知道,即使把定時(shí)器捕獲時(shí)長(zhǎng)設(shè)置到最大也只有65.536ms,而第二章就

    2024年01月18日
    瀏覽(19)
  • STM32標(biāo)準(zhǔn)庫通用定時(shí)器輸入捕獲

    STM32標(biāo)準(zhǔn)庫通用定時(shí)器輸入捕獲

    輸入捕獲為STM32定時(shí)器的一個(gè)功能,可以用來測(cè)量輸入信號(hào)的頻率和占空比。 具體原理:當(dāng)輸入信號(hào)經(jīng)過比較捕獲通道時(shí),STM32會(huì)依據(jù)通道的極性設(shè)置決定是否觸發(fā)捕獲中斷TIM_IT_CCx。此時(shí)定時(shí)器會(huì)將當(dāng)前計(jì)數(shù)值TIMx-CNT的值保存在TIMx-CCRx中,通過計(jì)算兩次捕獲中斷的時(shí)間差便可

    2024年03月11日
    瀏覽(15)
  • STM32學(xué)習(xí)筆記(六)丨TIM定時(shí)器及其應(yīng)用(輸入捕獲丨測(cè)量PWM波形的頻率和占空比)

    STM32學(xué)習(xí)筆記(六)丨TIM定時(shí)器及其應(yīng)用(輸入捕獲丨測(cè)量PWM波形的頻率和占空比)

    ???本次課程采用單片機(jī)型號(hào)為STM32F103C8T6。 ???課程鏈接:江科大自化協(xié) STM32入門教程 ??往期筆記鏈接: ??STM32學(xué)習(xí)筆記(一)丨建立工程丨GPIO 通用輸入輸出 ??STM32學(xué)習(xí)筆記(二)丨STM32程序調(diào)試丨OLED的使用 ??STM32學(xué)習(xí)筆記(三)丨中斷系統(tǒng)丨EXTI外部中斷

    2023年04月19日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包