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

STM32 CubeMX學習實驗13:定時器輸入捕獲獲取PWM頻率

這篇具有很好參考價值的文章主要介紹了STM32 CubeMX學習實驗13:定時器輸入捕獲獲取PWM頻率。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、工程配置

使用定時器5作為輸入捕獲定時器,將通道1(PA0)設置為輸入捕獲,設置預分頻器和計數(shù)值,這里設置為1us計數(shù)一次,最大可以捕獲周期為0xFFFFFFFFus的PWM,所以一般不需要考慮溢出的問題,使能自動重裝載。

stm32 采集pwm,stm32,學習,嵌入式硬件

使能定時器中斷,選擇合適的優(yōu)先級,?

stm32 采集pwm,stm32,學習,嵌入式硬件

?將引腳設置下拉,保證沒有信號輸入時保持電壓的穩(wěn)定,最大輸出速度選擇高。stm32 采集pwm,stm32,學習,嵌入式硬件

?在這里在這里可以選擇任意定時器輸出PWM,便于檢驗輸入捕獲的準確性,將TIM14通道1設置為PWM輸出,頻率為100Hz,其他默認即可。

二、代碼初始化和捕獲實現(xiàn)

在主函數(shù)中開啟定時器捕獲和更新中斷,更新中斷本例未使用到,根據(jù)需求開啟。開啟TIM14通道1,用于輸出PWM,這里設置占空比為32.7%。

stm32 采集pwm,stm32,學習,嵌入式硬件

初始化代碼中,首先設置 為上升沿捕獲,進入InputCap.flag==0,記錄定時器計數(shù)值,并設置為下降沿捕獲,隨后等待PWM波形下降沿到來,再次記錄定時器計數(shù)值,兩次計數(shù)值的差值就為PWM正脈寬的時長。再將觸發(fā)方式設置為上升沿觸發(fā),同樣記錄計數(shù)值,得到負脈寬的時長,就完成一次捕獲。需要注意的是代碼中的溢出,若第一次記錄的計數(shù)值為4294967200,如果脈寬時長為100us,那么第二次的計數(shù)值就會溢出,變成5,因為計數(shù)值最大為4294967295,超過該值將重新從0開始計數(shù),這時候計算出來的脈寬就會為負值。我們只需要判斷兩次計數(shù)值的大小,做簡單的處理即可(InputCap.tim_n_l=InputCap.tim_n1+0xffffffff-InputCap.tim_n2;)。

//在tim.h文件中加入

//定義一個結(jié)構(gòu)體
typedef struct
{
    uint32_t tim_n_h;
    uint32_t tim_n_l;
    uint32_t tim_n1;
    uint32_t tim_n2;
    uint32_t tim_n3;
    uint32_t T;//周期
    //uint16_t overflow;//溢出計數(shù)
    uint8_t flag;//捕獲完成標志
}InputCapture;
extern InputCapture InputCap;


//在tim.c文件中實現(xiàn)捕獲功能/

//重定義結(jié)構(gòu)體
InputCapture InputCap;

//捕獲中斷(當發(fā)生上升/下降沿時進入該函數(shù))
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
    if(htim==&htim5)
    {
        if(InputCap.flag==0)//上升沿
        {
            InputCap.flag=1;//記錄索引
            InputCap.tim_n1=TIM5->CCR1;//獲取計數(shù)值
            //切換為下降沿捕獲
                        __HAL_TIM_SET_CAPTUREPOLARITY(&htim5,TIM_CHANNEL_1,TIM_INPUTCHANNELPOLARITY_FALLING);
        }
        else if(InputCap.flag==1)
        {
            InputCap.flag=2;//記錄索引
            InputCap.tim_n2=TIM5->CCR1;//獲取計數(shù)值
            
            //溢出
            if(InputCap.tim_n2<InputCap.tim_n1)
            {
                InputCap.tim_n_h=InputCap.tim_n2+0xffffffff-InputCap.tim_n1;
            }
            else
            {
                InputCap.tim_n_h=InputCap.tim_n2-InputCap.tim_n1;
            }
            
            //切換為上升沿捕獲
            __HAL_TIM_SET_CAPTUREPOLARITY(&htim5,TIM_CHANNEL_1,TIM_INPUTCHANNELPOLARITY_RISING);
        }
        else if(InputCap.flag==2)
        {
            InputCap.flag=0;//記錄索引
            InputCap.tim_n1=TIM5->CCR1;
            
            //溢出
            if(InputCap.tim_n2>InputCap.tim_n1)
            {
                InputCap.tim_n_l=InputCap.tim_n1+0xffffffff-InputCap.tim_n2;
            }
            else
            {
                InputCap.tim_n_l=InputCap.tim_n1-InputCap.tim_n2;
            }
            
            InputCap.T=InputCap.tim_n_l+InputCap.tim_n_h;
            
            //切換為上升沿捕獲
            __HAL_TIM_SET_CAPTUREPOLARITY(&htim5,TIM_CHANNEL_1,TIM_INPUTCHANNELPOLARITY_RISING);
        }
    }
}

?之后,只要不關(guān)閉輸入捕獲功能,就可以持續(xù)捕獲,可以在main函數(shù)中100ms輸出一次捕獲結(jié)果

while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
      printf("%dus  %dus  %0.3f%%  %fHz\r\n",
            InputCap.tim_n_h,//高電平時長
            InputCap.tim_n_l,//低電平時長
            100.0*InputCap.tim_n_h/(InputCap.tim_n_h+InputCap.tim_n_l),//占空比
            1.0/((InputCap.tim_n_h+InputCap.tim_n_l)*0.000001)//頻率
            );
      HAL_Delay(100);
  }

三、效果驗證

把單片機的PA0(捕獲)和PF9(PWM,也可以使用外部的波形發(fā)生器),連接起來,打開串口調(diào)試助手即可看到PWM相關(guān)信息,如正負脈寬,頻率,占空比等。

stm32 采集pwm,stm32,學習,嵌入式硬件文章來源地址http://www.zghlxwxcb.cn/news/detail-839880.html

下期一起學習使用定時器讀取正交編碼器的值,控制PWM的占空比?

到了這里,關(guān)于STM32 CubeMX學習實驗13:定時器輸入捕獲獲取PWM頻率的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關(guān)文章

  • 【HAL庫】STM32CubeMX開發(fā)----非阻塞延時實驗----SysTick(滴答定時器)中斷

    【HAL庫】STM32CubeMX開發(fā)----非阻塞延時實驗----SysTick(滴答定時器)中斷

    STM32CubeMX 下載和安裝 詳細教程 【HAL庫】STM32CubeMX開發(fā)----STM32F103/F207/F407----目錄 HAL庫 有自帶的 ms級 延時函數(shù): HAL_Delay(); 缺點: 這是 阻塞延時 方式,就是延時期間,什么都不能干,這樣很浪費資源。 這篇文章主要介紹,利用 SysTick(滴答定時器)中斷 實現(xiàn) 非阻塞延時 的實驗

    2024年02月16日
    瀏覽(96)
  • STM32CubeMX學習四 之定時器配置

    STM32CubeMX學習四 之定時器配置

    記錄一下STM32CubeMX的學習筆記,同時分享給初學的小白,希望一起進步。 如何使用STM32CubeMX以及工程創(chuàng)建在之前的博客有提到,這里就直接從定時器講起。 編譯環(huán)境:KEIL 代碼生成:STM32CubeMX 庫:HAL MCU:STM32F072 假設你的cubeMX工程已經(jīng)建好,這里我們開始配置定時器2(TIM2),

    2024年02月01日
    瀏覽(16)
  • STM32 HAL庫 通用定時器介紹及相關(guān)應用例程 定時器中斷 輸出PWM (點亮LED呼吸燈、輸出PWM、輸入捕獲) CubeMX

    STM32 HAL庫 通用定時器介紹及相關(guān)應用例程 定時器中斷 輸出PWM (點亮LED呼吸燈、輸出PWM、輸入捕獲) CubeMX

    (部分圖引自于ATK) 前情提要(基本定時器) 點此進入 通用定時器類別 通用定時器和基本定時器相比大致的工作方式是相似的,不過通用定時器比基本定時器多了一些很好用的功能,比如: 外部輸入捕獲 輸出比較 輸出PWM 時鐘源 CubeMX為我們提供了配置時鐘的非常方便的工

    2024年04月15日
    瀏覽(39)
  • 2.基于正點原子STM32F103的定時器中斷實驗(HAL庫實現(xiàn))(cubeMX)

    2.基于正點原子STM32F103的定時器中斷實驗(HAL庫實現(xiàn))(cubeMX)

    ? 基本上每一款MCU都會配備定時器這個外設,STM32 的每個通用定時器都是完全獨立的,沒有互相共享的任何資源。 同樣,STM32F1系列的定時器功能也很強大,包括: TIM1和TIM8兩個高級定時器; TIM2~TIM5是個通用寄存器; TIM7,TIM8,兩個基本定時器。 由于本次實驗適用于新手入門

    2023年04月26日
    瀏覽(27)
  • STM32 通過PWM輸出一個方波并通過定時器輸入捕獲模式測量方波的周期(cubeMX+keil配置)

    STM32 通過PWM輸出一個方波并通過定時器輸入捕獲模式測量方波的周期(cubeMX+keil配置)

    前言:本文章用cubeMX和keil來進行代碼編寫,實現(xiàn)STM32的相應功能 本文章使用的STM32核心板是STM32H743VIT6,如果使用的是其他的核心板操作過程類似,可以嘗試使用此教程。 (1)首先點擊左側(cè)的Timers ?(2)選擇一個定時器配置PWM 我選擇的是TIM5,如上圖 點擊TIM5 Mode的配置如下

    2024年02月19日
    瀏覽(20)
  • 【STM32筆記】STM32的定時器開發(fā)基礎(二)(基于STM32CubeMX實現(xiàn)定時器中斷)

    【STM32筆記】STM32的定時器開發(fā)基礎(二)(基于STM32CubeMX實現(xiàn)定時器中斷)

    ? 傳統(tǒng)STM32外部中斷 的設計步驟: ?(1)將GPIO初始化為輸入端口。 ?(2)配置相關(guān)I/O引腳與中斷線的映射關(guān)系。 ?(3)設置該I/O引腳對印的中斷觸發(fā)條件。 ?(4)配置NVIC,并使能中斷。 ?(5)編寫中斷服務函數(shù)。 ? 基于STM32CubeMX的外部中斷 設計步驟 ?(1)在STM3

    2024年02月20日
    瀏覽(98)
  • STM32學習筆記 & 通用定時器TIM3~TIM5 13

    STM32學習筆記 & 通用定時器TIM3~TIM5 13

    通用定時器是一個通過可編程預分頻器驅(qū)動的 16 位自動裝載計數(shù)器構(gòu)成。 它適用于多種場合,包括測量輸入信號的脈沖長度 ( 輸入捕獲 ) 或者產(chǎn)生輸出波形 ( 輸出比較和PWM)。 使用定時器預分頻器和 RCC 時鐘控制器預分頻器,脈沖長度和波形周期可以在幾個微秒到幾個毫秒間

    2024年02月05日
    瀏覽(19)
  • STM32 HAL庫 CubeMX配置 定時器學習 F103C8T6

    STM32 HAL庫 CubeMX配置 定時器學習 F103C8T6

    開發(fā)板: STM32F103C8T6最小系統(tǒng)板 編譯環(huán)境: Keil5 MDK 輔助軟件: STM32 CubeMX 課程教學: 基于正點原子HAL庫學習教程 其余配件: 江科大STM32配件包?和 示波器一臺 備注: ?因為這塊開發(fā)板沒有基本定時器,所以本文也 沒有基本定時器的內(nèi)容 ????????????本文1.3和2.1部分的

    2024年04月26日
    瀏覽(21)
  • STM32CubeMX——定時器配置

    STM32CubeMX——定時器配置

    本文將會以STM32F103C8T6為例配置定時器2定時5 ms SMT32F1系列共有8個定時器: 基本定時器(TIM6、TIM7) 通用定時器(TIM2、TIM3、TIM4、TIM5) 高級定時器(TIM1、TIM8) 16位向上、向下、向上/下自動裝載計數(shù)器 16位可編程(可以實時修改)預分頻器,計數(shù)器時鐘頻率的分頻系數(shù)為 1~6553

    2023年04月10日
    瀏覽(22)
  • 最詳細STM32,cubeMX 定時器

    最詳細STM32,cubeMX 定時器

    這篇文章將詳細介紹 STM32,cubeMX 定時器的配置和使用。 實驗開發(fā)板:STM32F103C8T6。 所需軟件:keil5 , cubeMX 。 實驗目的:了解 cubeMX 定時器 的配置和使用。 實驗:使用定時器控制 led 閃爍。 STM32的定時器是用于時間測量和事件生成的復雜工具??梢允褂脙?nèi)部或外部時鐘源。時

    2024年02月07日
    瀏覽(29)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領取紅包

二維碼2

領紅包