精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

定時器使用小技巧

CHANBAEK ? 來源:硬件工程師技術干貨 ? 作者:硬件工程師技術干 ? 2023-05-25 17:19 ? 次閱讀

介紹一個定時器的使用小技巧,今天寫代碼需要用到一個功能,實時測量程序運行時間,要求測量時間精度要高。

精度高就想到了硬件定時器,但是整個系統比較復雜,硬件定時器都被占用了,想了想只能和某項功能共用一個定時器了。系統中使用了一個systick定時器,systick定時器是一個自動裝載遞減定時器,即,計數器從設定值開始遞減,減到零時觸發systick中斷,然后計數器自動裝載初值開始下一個計數周期。這里配置為1ms產生一次中斷,中斷內有一個全局變量加1,如果直接用這個變量計算時間,精度±1ms,太差了。于是乎又寫了倆函數,可以實現us級別測量,后面一一介紹。

void SysTick_Handler(void)
{
    g_dwSysTickCnt++;//ms中斷,精度只有±1ms
}

函數1:測量開始函數:

//測量開始函數
void drvMeasureUsStart(void)
{
    SysTick->CTRL  &= ~SysTick_CTRL_ENABLE_Msk;     //關閉定時器
    g_dwOldTime = SysTick->VAL;                     //記錄當前計數值
    g_dwStartTimeMs = g_dwSysTickCnt;               //獲取當前ms數
    SysTick->CTRL  |= SysTick_CTRL_ENABLE_Msk;      //使能定時器
    g_dwReload = SysTick->LOAD;                     //獲取重載值
}

函數2:測量結束函數:

DWORD drvMeasureUsStop(void)
{
    DWORD dwNowTime,dwpRunTimeUs;

    SysTick->CTRL  &= ~SysTick_CTRL_ENABLE_Msk;         //關閉定時器
    dwNowTime = SysTick->VAL;
    g_dwStartTimeMs = g_dwSysTickCnt - g_dwStartTimeMs; //獲取ms數差值
    SysTick->CTRL  |= SysTick_CTRL_ENABLE_Msk;          //使能定時器

    if(g_dwStartTimeMs > 0u)
    {
        g_dwStartTimeMs--;
        dwpRunTimeUs = g_dwReload - dwNowTime + g_dwOldTime;
    }
    else
    {
        dwpRunTimeUs = g_dwOldTime - dwNowTime;
    }
    g_dwStartTimeMs *= 1000u;                           //換算為us
    dwpRunTimeUs = dwpRunTimeUs/(g_dwSysTickClockMhz);  //換算為us

    dwpRunTimeUs += g_dwStartTimeMs;

    return dwpRunTimeUs;
}

使用方法:

//測量usercode()函數運行時間
{
    DWORD dwTime;
    ...
    ...
    drvMeasureUsStart();
    usercode();
    dwTime = drvMeasureUsStop();
    ...
    ...
}

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

    關注

    5

    文章

    895

    瀏覽量

    41401
  • 定時器
    +關注

    關注

    23

    文章

    3241

    瀏覽量

    114520
  • 函數
    +關注

    關注

    3

    文章

    4308

    瀏覽量

    62447
  • 代碼
    +關注

    關注

    30

    文章

    4753

    瀏覽量

    68369
  • Systick
    +關注

    關注

    0

    文章

    62

    瀏覽量

    13045
收藏 人收藏

    評論

    相關推薦

    每一個定時器使用的中斷都不一樣嗎?還是

    每一個定時器使用的中斷都不一樣?還是每一個中斷使用的定時器不一樣?究竟該怎么理解?
    發表于 10-18 20:44

    【安富萊】【STemWin教程】第36章 窗口管理器之定時器使

    `第36章 窗口管理器之定時器使用 本期教程跟大家講一下STemWin自帶的定時器使用方法,這個定時器使用起來非常簡單,而且很實用。在需要定時更新的時候可以用這個
    發表于 04-25 11:09

    CC2640的軟件定時器使用教程

    本帖最后由 冒汗的心情 于 2016-4-12 09:53 編輯 CC2640的軟件定時器使用教程轉載自:http://blog.csdn.net/haozi0_0/article
    發表于 04-11 15:53

    第36章 窗口管理器之定時器使

    轉stemwin教程本期教程跟大家講一下STemWin自帶的定時器使用方法,這個定時器使用起來非常簡單,而且很實用。在需要定時更新的時候可以用這個定時器。 36. 1
    發表于 10-16 10:51

    【emWin實戰教程V2.0】第39章 窗口管理器之定時器使

    轉最新版本教程本期教程為大家講解窗口管理器之定時器使用方法,這個定時器使用起來比較簡單,而且很實用,以后的項目工程中很多時候要用到,不過使用時有些小問題要特別注意,如果不注意的話,定時器將無法正確
    發表于 02-20 18:41

    TIMER2定時器使用異常

    定時器使用,參考stareware中的demo TIMER使用,具體實現代碼如下: // 配置 定時器 / 計數器 2 為 64 位模式 TimerConfigure(SOC_TMR_2_REGS
    發表于 09-27 08:32

    如何去配置STM32的定時器使數碼管循環顯示從0~9的數字呢

    怎樣在Keil for ARM V5中去編寫代碼呢?如何去配置STM32的定時器使數碼管循環顯示從0~9的數字呢?
    發表于 12-02 06:37

    如何利用定時器使L1每秒閃爍

    練習:利用定時器使L1每秒閃爍(亮0.5秒滅0.5秒),L8亮五秒滅五秒。關閉蜂鳴器。#include "reg52.h"***it L1 = P0^0;***it L8
    發表于 01-12 07:22

    介紹一下AT32的定時器使

    **定時器入門指南——第1講**定時器基本上是所有嵌入式芯片都會具有的一個功能,不同的芯片在操作上也是大同小異,今天我們就來介紹一下AT32的定時器使用,以AT32403A為例。首先AT32403A
    發表于 01-17 08:56

    定時器、PWM、ICP范例(AVR 定時器使用范例)

    /***************************************************      AVR 定時器使用范例 
    發表于 11-01 01:23 ?77次下載

    如何利用單片機看門狗定時器使led閃爍

    看門狗是為了防止程序跑飛而設定的,但是由于看門狗是一個類似于定時器,因此可以把他當作定時器來使用 示例代碼:用看門狗定時器使一個led閃爍 #include void main
    發表于 02-11 10:00 ?3921次閱讀
    如何利用單片機看門狗<b class='flag-5'>定時器使</b>led閃爍

    WinCC中定時器使用方法介紹

    WinCC中定時器使用方法介紹說明。
    發表于 04-22 14:50 ?8次下載

    ESP-32開發踩坑歷程(三)ESP-IDF 定時器使

    ESP-32開發踩坑歷程(三)ESP-IDF 定時器使用前言一、開發基礎二、定時器使用1.官方描述2.讀入數據總結ESP-32開發踩坑歷程(三)ESP-IDF 定時器使用)前言設計ESP32的樂鑫
    發表于 12-08 12:06 ?13次下載
    ESP-32開發踩坑歷程(三)ESP-IDF <b class='flag-5'>定時器使</b>用

    CKS32F4xx系列產品的定時器使用-基本特征和定時操作

    這一課我們將介紹CKS32F4XX系列產品的定時器使用,CKS32F4XX的定時器功能十分強大,包含2個高級控制定時器,8個普通定時器,2個基礎定時
    的頭像 發表于 05-19 09:18 ?870次閱讀
    CKS32F4xx系列產品的<b class='flag-5'>定時器使</b>用-基本特征和<b class='flag-5'>定時</b>操作

    Linux驅動定時器使用示例

    定時器使用示例 使用步驟: 1、調用 init_timer 初始化一個定時器,給 struct timer_list 各成員賦值。 2、調用 add_timer 將定時器添加到內核定時器
    的頭像 發表于 10-04 15:47 ?654次閱讀