<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      STM32之使用DWT外設編寫延時函數

      DWT 是一個調試外設,它的核心功能之一是 CYCCNT(Cycle Count),這是一個32位遞增計數器,用于記錄 CPU 執行的時鐘周期數量。我們可以通過對這個計數器的變化來實現高精度延時。

      在使用 DWT 延時之前,需要完成以下操作:

      1. 使能 DWT
      2. 使能 CYCCNT
      3. 清零 CYCCNT
      4. 基于 CYCCNT 實現延時邏輯

      源碼如下:

      • dwt.delay.h文件
      #ifndef __DWT_DELAY_H
      #define __DWT_DELAY_H
      
      #include "stm32g4xx.h"
      
      /* 獲取內核時鐘頻率 */
      #define GET_CPU_ClkFreq()       HAL_RCC_GetSysClockFreq()
      
      
      uint32_t CPU_TS_TmrRd(void);
      HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority);
      
      //最大延時值為8秒
      void dwt_delay_us(uint32_t us);
      #define HAL_Delay(ms)     dwt_delay_us(ms*1000)     
      #define dwt_delay_s(s)       dwt_delay_us(s*1000000)
      
      
      #endif /* __DWT_DELAY_H */
      
      • dwt_delay.c文件
      #include "dwt_delay.h"
      
      
      #define  DWT_CR      *(__IO uint32_t *)0xE0001000
      #define  DWT_CYCCNT  *(__IO uint32_t *)0xE0001004
      #define  DEM_CR      *(__IO uint32_t *)0xE000EDFC
      
      
      #define  DEM_CR_TRCENA                   (1 << 24)
      #define  DWT_CR_CYCCNTENA                (1 <<  0)
      
      
      /**
      * @brief  初始化時間戳
      * @param  無
      * @retval 無
      * @note   使用延時函數前,必須調用本函數
      */
      HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)    
      {
          /* 使能DWT外設 */
          DEM_CR |= (uint32_t)DEM_CR_TRCENA;
          
          /* DWT CYCCNT寄存器計數清0 */
          DWT_CYCCNT = (uint32_t)0u;
      
          /* 使能Cortex-M DWT CYCCNT寄存器 */
          DWT_CR |= (uint32_t)DWT_CR_CYCCNTENA;
      
          return HAL_OK;
      }
      
      
      /**
      * @brief  讀取當前時間戳,每1ms更新一次
      * @param  無
      * @retval ms時間戳
      */
      uint32_t HAL_GetTick(void)                              
      {
          return ((uint32_t)DWT_CYCCNT/(GET_CPU_ClkFreq()*1000));
      }
      
      
      /**
      * @brief  采用CPU的內部計數實現精確延時,32位計數器,最大延時時間8秒
      * @param  us : 延遲長度,單位1 us
      * @retval 無
      */
      void dwt_delay_us(uint32_t us)
      {
          uint32_t ticks;
          uint32_t told,tnow,tcnt=0;
      
          ticks = us * (GET_CPU_ClkFreq() / 1000000);  /* 需要的節拍數 */
          tcnt = 0;
          told = (uint32_t)DWT_CYCCNT;         /* 剛進入時的計數器值 */
      
          while(1)
          {
              tnow = (uint32_t)DWT_CYCCNT;
              if(tnow != told)
              {
                  if(tnow > told)
                  {
                      tcnt += tnow - told;
                  }
                  else    /* 重新裝載 */
                  {
                      tcnt += UINT32_MAX - told + tnow;
                  }
      
                  told = tnow;
      
                  /*時間超過/等于要延遲的時間,則退出 */
                  if(tcnt >= ticks)break;
              }
          }
      }
      
      
      posted @ 2025-10-30 08:38  比特向陽  閱讀(84)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产欧美精品一区aⅴ影院| 国产香蕉久久精品综合网| 久久久精品2019中文字幕之3 | 永清县| 亚洲第一天堂无码专区| 日本一区二区三区小视频| 欧美成aⅴ人高清免费| 亚洲码与欧洲码区别入口| 一区二区三区鲁丝不卡| jizz国产免费观看| 欧美人与动牲交精品| 日韩国产精品区一区二区| 久久99精品久久久久久| 久久一日本道色综合久久| 久久精品国产亚洲av熟女| 粉嫩jk制服美女啪啪| 汾西县| 国产在线精品福利91香蕉| 日本高清无卡码一区二区| 宝贝腿开大点我添添公口述视频| 视频一区视频二区亚洲视频| 久久月本道色综合久久| 成年女人午夜毛片免费视频| 国产无遮挡猛进猛出免费软件| 午夜自产精品一区二区三区| 欧美牲交a欧美牲交aⅴ图片| 国产一区二区日韩在线| 精品国产欧美一区二区五十路| 国产精品自拍午夜福利| 久久这里只精品热免费99| 国产乱子伦一区二区三区视频播放| 欧美国产日产一区二区| 老熟妇国产一区二区三区 | 日本道精品一区二区三区| 这里只有精品在线播放| 久久综合精品国产一区二区三区无| 亚洲精品尤物av在线网站| 高清中文字幕一区二区| 婷婷五月综合丁香在线| 日韩人妻久久精品一区二区 | 美女裸体视频永久免费|