一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

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

玩轉(zhuǎn)單片機(jī)與嵌入式 ? 來(lái)源:玩轉(zhuǎn)單片機(jī)與嵌入式 ? 2023-11-04 14:24 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

計(jì)數(shù)法

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

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

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

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

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

#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 (/*檢測(cè)事件發(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);
        }
    }
}

周期法

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

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

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

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

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

#include "stm32f4xx.h"


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


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


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


    // 配置外部中斷線(xiàn)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) {
        // 在外部中斷中測(cè)量一個(gè)完整信號(hào)周期的時(shí)間


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



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

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








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

    關(guān)注

    48

    文章

    7951

    瀏覽量

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

    關(guān)注

    2565

    文章

    52981

    瀏覽量

    767246
  • STM32
    +關(guān)注

    關(guān)注

    2293

    文章

    11032

    瀏覽量

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

    關(guān)注

    14

    文章

    2039

    瀏覽量

    62138
  • 頻率測(cè)量
    +關(guān)注

    關(guān)注

    1

    文章

    35

    瀏覽量

    12675

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    無(wú)刷控制器好壞的測(cè)量方法

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

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

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

    如何通過(guò)STM32微控制器測(cè)量IDD?

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

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

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

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

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

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

    頻率測(cè)量方法的改進(jìn)
    發(fā)表于 10-14 16:41 ?20次下載
    <b class='flag-5'>頻率</b><b class='flag-5'>測(cè)量方法</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 ?2429次閱讀

    如何用微控制器測(cè)量電容

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

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

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

    如何使用微控制器測(cè)量電容

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

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

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

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