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

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

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

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

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

玩轉(zhuǎn)單片機(jī)與嵌入式 ? 來源:玩轉(zhuǎn)單片機(jī)與嵌入式 ? 2023-11-04 14:24 ? 次閱讀

頻率測量是在電子通信領(lǐng)域中非常重要的任務(wù),用于確定信號(hào)的周期性和事件的發(fā)生率。

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

計(jì)數(shù)法

計(jì)數(shù)法是最簡單的頻率測量方法之一,它通過直接計(jì)數(shù)事件發(fā)生的次數(shù),并與時(shí)間相關(guān)聯(lián)來計(jì)算頻率。

其原理如下: 首先,我們選擇一個(gè)時(shí)間窗口,通常使用計(jì)時(shí)器來測量。

時(shí)間窗口可以是任意合適的時(shí)間段,例如1秒。 在這個(gè)時(shí)間窗口內(nèi),我們記錄事件發(fā)生的次數(shù),這可以通過外部事件觸發(fā)器、傳感器或計(jì)數(shù)器來實(shí)現(xiàn)。

最后,我們使用以下公式計(jì)算頻率: 計(jì)數(shù)法的優(yōu)點(diǎn)是簡單易懂,適用于大多數(shù)應(yīng)用場景。對(duì)于STM32微控制器,你可以使用內(nèi)部計(jì)時(shí)器來實(shí)現(xiàn)計(jì)數(shù)法。

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

#include "stm32f4xx.h"


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


    // 啟動(dòng)計(jì)時(shí)器
    TIM_Cmd(TIM2, ENABLE);


    // 初始化事件計(jì)數(shù)器
    uint32_t eventCount = 0;


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


        if (TIM_GetFlagStatus(TIM2, TIM_FLAG_Update)) {
            // 時(shí)間窗口結(jié)束,計(jì)算頻率
            float frequency = (float)eventCount / 1.0;
            // 重置計(jì)數(shù)器和標(biāo)志
            eventCount = 0;
            TIM_ClearFlag(TIM2, TIM_FLAG_Update);
        }
    }
}

周期法

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

其原理如下: 我們首先測量一個(gè)完整的信號(hào)周期所需的時(shí)間。這可以通過檢測信號(hào)的上升沿或下降沿來實(shí)現(xiàn)。

然后,使用以下公式來計(jì)算頻率: 周期法對(duì)于周期性信號(hào)非常有效,因?yàn)樗峁┝烁叩臏y量精度。

在STM32中,你可以使用外部中斷或捕獲模式來實(shí)現(xiàn)周期法。

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

#include "stm32f4xx.h"


// 定義全局變量來存儲(chǔ)周期時(shí)間
uint32_t periodTime = 0;


// 外部中斷初始化函數(shù)
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; // 可以根據(jù)信號(hào)的邊沿配置
    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);
}


// 外部中斷中斷處理函數(shù)
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() {
    // 初始化時(shí)鐘和定時(shí)器
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
    TIM_TimeBaseInitTypeDef TIM_InitStruct;
    TIM_InitStruct.TIM_Prescaler = 84 - 1; // 設(shè)置預(yù)分頻器,使計(jì)時(shí)器頻率為1 MHz
    TIM_InitStruct.TIM_Period = 0xFFFFFFFF; // 最大定時(shí)器周期
    TIM_TimeBaseInit(TIM2, &TIM_InitStruct);


    // 啟動(dòng)定時(shí)器
    TIM_Cmd(TIM2, ENABLE);


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


    while (1) {
        // 在外部中斷中測量一個(gè)完整信號(hào)周期的時(shí)間


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



無論你選擇計(jì)數(shù)法還是周期法,都可以根據(jù)你的應(yīng)用需求來選擇最適合的方法。

在STM32微控制器中,你可以根據(jù)不同的外部硬件和引腳配置來實(shí)現(xiàn)頻率測量。








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

    關(guān)注

    48

    文章

    7576

    瀏覽量

    151726
  • 傳感器
    +關(guān)注

    關(guān)注

    2552

    文章

    51288

    瀏覽量

    755153
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10915

    瀏覽量

    356754
  • 觸發(fā)器
    +關(guān)注

    關(guān)注

    14

    文章

    2000

    瀏覽量

    61256
  • 頻率測量
    +關(guān)注

    關(guān)注

    1

    文章

    35

    瀏覽量

    12515

原文標(biāo)題:頻率測量方法及 STM32 代碼示例

文章出處:【微信號(hào):玩轉(zhuǎn)單片機(jī)與嵌入式,微信公眾號(hào):玩轉(zhuǎn)單片機(jī)與嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

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

    使用MIC5013 MOSFET預(yù)驅(qū)動(dòng)設(shè)計(jì)和構(gòu)建的基于微控制器的功率控制器示例
    發(fā)表于 05-22 09:06

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

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

    ADC測量微控制器內(nèi)部溫度傳感示例

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

    ADC測量微控制器內(nèi)部溫度傳感示例

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

    頻率測量方法的改進(jìn)

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

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

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

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

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

    如何用微控制器測量電容

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

    液位開關(guān)控制器測試測量方法

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

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

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

    AN4246_STM32L1 微控制器上的專有代碼讀取保護(hù)

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

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

    AN5347_ STM32WB系列微控制器的指令示例
    發(fā)表于 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系列微控制器的指令示例
    發(fā)表于 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微控制器上的專有代碼讀保護(hù)

    AN4758_STM32L4xx微控制器上的專有代碼讀保護(hù)
    發(fā)表于 11-21 08:11 ?0次下載
    AN4758_<b class='flag-5'>STM32</b>L4xx<b class='flag-5'>微控制器</b>上的專有<b class='flag-5'>代碼</b>讀保護(hù)
    主站蜘蛛池模板: 失禁h啪肉尿出来高h男男| 天天操天天干天搞天天射| 毛片免费观看| 女人张开腿给男人桶爽免费| 免费一级欧美在线观看视频片| 人人插人人插| 久青草国产高清在线视频| 国产亚洲综合色就色| www五月天com| 日韩精品一卡二卡三卡四卡2021| 国产黄色网| 日本级毛片免费观看| 中文天堂| 她也啪97在线视频| 精品一区二区三区三区| 男人午夜视频在线观看| 婷婷激情久久| 诱人的老师bd高清日本在线观看 | 激情婷婷丁香| 成人在线91| 天天色天天色天天色| 国产精品好好热在线观看| 91久操| 一区二区三区四区电影| 色狠狠xx| 国产一区二区高清在线| 午夜视频免费| jinv在线视频| 久久国产热| 色手机在线| 国模大尺度在线| 天天鲁天天爽天天视频| eeuss秋霞成人影院| 久久精品国产精品亚洲人人| 色站视频| 国产高清不卡一区二区| 特黄一级大片| 性做久久久久久久| 色老头成人免费综合视频| 国产精品毛片在线大全| 欧美又黄又嫩大片a级|