色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

頻率測量方法及STM32微控制器代碼示例介紹

玩轉單片機與嵌入式 ? 來源:玩轉單片機與嵌入式 ? 2023-11-04 14:24 ? 次閱讀

頻率測量是在電子通信領域中非常重要的任務,用于確定信號的周期性和事件的發生率。

在本文中,我們將介紹兩種常用的頻率測量方法:計數法和周期法,并提供與STM32微控制器的示例代碼,以幫助你在實際應用中進行頻率測量。

計數法

計數法是最簡單的頻率測量方法之一,它通過直接計數事件發生的次數,并與時間相關聯來計算頻率。

其原理如下: 首先,我們選擇一個時間窗口,通常使用計時器來測量。

時間窗口可以是任意合適的時間段,例如1秒。 在這個時間窗口內,我們記錄事件發生的次數,這可以通過外部事件觸發器、傳感器或計數器來實現。

最后,我們使用以下公式計算頻率: 計數法的優點是簡單易懂,適用于大多數應用場景。對于STM32微控制器,你可以使用內部計時器來實現計數法。

以下是一個基本的STM32代碼示例,用于頻率測量:

#include "stm32f4xx.h"


int main() {
    // 初始化時鐘和計時器
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
    TIM_TimeBaseInitTypeDef TIM_InitStruct;
    TIM_InitStruct.TIM_Prescaler = 84 - 1; // 設置預分頻器,使計時器頻率為1 MHz
    TIM_InitStruct.TIM_Period = 1000000 - 1; // 設置定時器周期為1秒
    TIM_TimeBaseInit(TIM2, &TIM_InitStruct);


    // 啟動計時器
    TIM_Cmd(TIM2, ENABLE);


    // 初始化事件計數器
    uint32_t eventCount = 0;


    while (1) {
        if (/*檢測事件發生*/) {
            eventCount++;
        }


        if (TIM_GetFlagStatus(TIM2, TIM_FLAG_Update)) {
            // 時間窗口結束,計算頻率
            float frequency = (float)eventCount / 1.0;
            // 重置計數器和標志
            eventCount = 0;
            TIM_ClearFlag(TIM2, TIM_FLAG_Update);
        }
    }
}

周期法

周期法是另一種常用的頻率測量方法,特別適用于周期性信號的測量。

其原理如下: 我們首先測量一個完整的信號周期所需的時間。這可以通過檢測信號的上升沿或下降沿來實現。

然后,使用以下公式來計算頻率: 周期法對于周期性信號非常有效,因為它提供了更高的測量精度。

在STM32中,你可以使用外部中斷或捕獲模式來實現周期法。

以下是一個簡單的STM32代碼示例,用于周期法測量:

#include "stm32f4xx.h"


// 定義全局變量來存儲周期時間
uint32_t periodTime = 0;


// 外部中斷初始化函數
void EXTI_Config(void) {
    EXTI_InitTypeDef EXTI_InitStruct;
    NVIC_InitTypeDef NVIC_InitStruct;


    // 使能外部中斷線
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
    SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0); // 使用GPIOA引腳0


    // 配置外部中斷線0
    EXTI_InitStruct.EXTI_Line = EXTI_Line0;
    EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising; // 可以根據信號的邊沿配置
    EXTI_InitStruct.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStruct);


    // 配置外部中斷中斷向量
    NVIC_InitStruct.NVIC_IRQChannel = EXTI0_IRQn;
    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;
    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStruct);
}


// 外部中斷中斷處理函數
void EXTI0_IRQHandler(void) {
    if (EXTI_GetITStatus(EXTI_Line0) != RESET) {
        static uint32_t startTime = 0;
        uint32_t endTime = 0;


        if (startTime == 0) {
            startTime = TIM_GetCounter(TIM2);
        } else {
            endTime = TIM_GetCounter(TIM2);
            periodTime = endTime - startTime;
            startTime = endTime;
        }


        EXTI_ClearITPendingBit(EXTI_Line0);
    }
}


int main() {
    // 初始化時鐘和定時器
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
    TIM_TimeBaseInitTypeDef TIM_InitStruct;
    TIM_InitStruct.TIM_Prescaler = 84 - 1; // 設置預分頻器,使計時器頻率為1 MHz
    TIM_InitStruct.TIM_Period = 0xFFFFFFFF; // 最大定時器周期
    TIM_TimeBaseInit(TIM2, &TIM_InitStruct);


    // 啟動定時器
    TIM_Cmd(TIM2, ENABLE);


    // 初始化外部中斷
    EXTI_Config();


    while (1) {
        // 在外部中斷中測量一個完整信號周期的時間


        // 計算頻率
        float frequency = 1000000.0 / (float)periodTime; // 1秒 = 1000000微秒
    }
}



無論你選擇計數法還是周期法,都可以根據你的應用需求來選擇最適合的方法。

在STM32微控制器中,你可以根據不同的外部硬件和引腳配置來實現頻率測量。








審核編輯:劉清
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 微控制器
    +關注

    關注

    48

    文章

    7566

    瀏覽量

    151604
  • 傳感器
    +關注

    關注

    2551

    文章

    51207

    瀏覽量

    754536
  • STM32
    +關注

    關注

    2270

    文章

    10906

    瀏覽量

    356530
  • 觸發器
    +關注

    關注

    14

    文章

    2000

    瀏覽量

    61212
  • 頻率測量
    +關注

    關注

    1

    文章

    35

    瀏覽量

    12507

原文標題:頻率測量方法及 STM32 代碼示例

文章出處:【微信號:玩轉單片機與嵌入式,微信公眾號:玩轉單片機與嵌入式】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    無刷控制器好壞的測量方法

    對無刷控制器好壞的測量方法一、 斷電檢測(用二極管檔)1、 檢測控制器電源輸入正負極早否短路2、 檢測控制器繞組線參數:A、 用黑表筆接電源正極,用紅表筆分別接觸黃、綠、蘭三根繞阻線,
    發表于 10-24 22:36

    基于微控制器的功率控制器示例

    使用MIC5013 MOSFET預驅動設計和構建的基于微控制器的功率控制器示例
    發表于 05-22 09:06

    如何通過STM32微控制器測量IDD?

    以上,而在數據表中我看到 MCU 應該在 STOP2 模式下支持 1uA 左右。 在關于 IDD 測量的電路板數據表 UM2206 Rev 3 中寫道:IDD 測量用于測量 STM32
    發表于 12-27 06:08

    ADC測量微控制器內部溫度傳感示例

    應用:ADC測量微控制器內部溫度傳感示例碼 BSP 版本: M051系列 BSP CMSIS v3.01.001 硬件:Nutini-EVB-M051_V3.0
    發表于 08-23 06:21

    ADC測量微控制器內部溫度傳感示例

    應用:ADC測量微控制器內部溫度傳感示例碼 BSP 版本: M051系列 BSP CMSIS v3.01.001 硬件:Nutini-EVB-M051_V3.0
    發表于 08-30 06:15

    頻率測量方法的改進

    頻率測量方法的改進
    發表于 10-14 16:41 ?20次下載
    <b class='flag-5'>頻率</b><b class='flag-5'>測量方法</b>的改進

    基于ST公司的STM32微控制器系列在音頻方面的應用源代碼

    基于ST公司的STM32微控制器系列在音頻方面的應用源代碼
    發表于 05-20 16:29 ?7次下載

    《振南電子STM32視頻教程》第一講:ARM處理STM32微控制器

    [第1講] ARM處理STM32微控制器,由何強主講。本課主要講解:(1).ARM處理家族;(2).ARM Cortex-M3的應用介紹
    發表于 10-09 15:32 ?2247次閱讀

    如何用微控制器測量電容

    微控制器廣泛用于測量各種物理變量。測量中涉及的技術對于單個變量類型可能有所不同,并且主要基于要測量的變量的特性。本教程介紹了一些使用
    的頭像 發表于 12-06 14:54 ?2953次閱讀
    如何用<b class='flag-5'>微控制器</b><b class='flag-5'>測量</b>電容

    液位開關控制器測試測量方法

    液位開關控制器測試測量方法:在工業生產過程中,常常需要測量兩種介質的分界面的高度,如氣-----液分界面(統稱液位),夜-------液分界面的告訴(統稱界面),氣--------固分界面的高度(統稱料物)等,統稱為物位
    發表于 06-11 10:12 ?2178次閱讀

    如何使用微控制器測量電容

    微控制器已不是新興事物,對于微控制器,大家或許都有所了解。在往期文章中,小編對微控制器做過一定介紹。為進一步增進大家對微控制器的了解,本文將
    的頭像 發表于 06-27 16:04 ?3513次閱讀
    如何使用<b class='flag-5'>微控制器</b><b class='flag-5'>測量</b>電容

    AN4246_STM32L1 微控制器上的專有代碼讀取保護

    AN4246_STM32L1 微控制器上的專有代碼讀取保護
    發表于 11-21 08:11 ?0次下載
    AN4246_<b class='flag-5'>STM32</b>L1 <b class='flag-5'>微控制器</b>上的專有<b class='flag-5'>代碼</b>讀取保護

    AN5347_ STM32WB系列微控制器的指令示例

    AN5347_ STM32WB系列微控制器的指令示例
    發表于 11-21 08:11 ?0次下載
    AN5347_ <b class='flag-5'>STM32</b>WB系列<b class='flag-5'>微控制器</b>的指令<b class='flag-5'>示例</b>

    AN5379_ STM32WB系列微控制器的指令示例

    AN5379_ STM32WB系列微控制器的指令示例
    發表于 11-21 08:11 ?2次下載
    AN5379_ <b class='flag-5'>STM32</b>WB系列<b class='flag-5'>微控制器</b>的指令<b class='flag-5'>示例</b>

    AN4758_STM32L4xx微控制器上的專有代碼讀保護

    AN4758_STM32L4xx微控制器上的專有代碼讀保護
    發表于 11-21 08:11 ?0次下載
    AN4758_<b class='flag-5'>STM32</b>L4xx<b class='flag-5'>微控制器</b>上的專有<b class='flag-5'>代碼</b>讀保護
    主站蜘蛛池模板: 好男人的视频在线观看| 天美传媒果冻传媒入口视频| 亚洲精品福利一区二区在线观看| 最近高清中文字幕无吗免费看| 国产露脸无码A区久久蘑菇| 新影音先锋男人色资源网| 好男人在线高清WWW免费观看 | 狠狠干女人| 最新国产三级在线不卡视频| 日本湿姝在线观看| 99久久香蕉| 妈妈的朋友6未删减版完整在线 | 美女厕所撒尿ass| 成人在免费视频手机观看网站| 人妻精品久久无码专区| 国产精品亚洲视频在线观看| 中文字幕亚洲第一| 久久99国产亚洲高清观着| 亚洲在线视频自拍精品| 精品国产品在线18年| 99精品影院| 亚洲黄色在线观看| 妻子的秘密HD观看| 国内精品乱码卡一卡2卡三卡| 亚洲国产欧美日韩在线一区| 暖暖视频免费高清在线观看 视频| 9久爱午夜视频| 亚洲 日本 中文字幕 制服 | 久久国产免费观看精品1| 中国二级毛片| 舔1V1高H糙汉| 免费韩国伦理2017最新| 国产午夜三级一区二区三| 99精品免费观看| 亚洲欧洲自拍偷拍| 久久亚洲网站| 国产 交换 丝雨 巅峰| 性欧美video| 欧洲xxxxx| 久久这里只有精品国产99| xx在线观看|