色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > STM32中的tic與toc,用SysTick統(tǒng)計代碼段執(zhí)行時間

          STM32中的tic與toc,用SysTick統(tǒng)計代碼段執(zhí)行時間

          作者: 時間:2016-12-01 來源:網絡 收藏



          SysTick_CALRB校準值寄存器:


          這個寄存器好像目前的水平我還用不到,大體意思明白點,把英文說明放這吧:
          位31NOREF:1=沒有外部參考時鐘(STCLK不可用)0=外部參考時鐘可用
          位30SKEW:1=校準值不是準確的1ms0=校準值是準確的1ms
          位[23:0]:Calibrationvalue
          IndicatesthecalibrationvaluewhentheSysTickcounterrunsonHCLKmax/8asexternalclock.Thevalueisproductdependent,pleaserefertotheProductReferenceManual,SysTickCalibrationValuesection.WhenHCLKisprogrammedatthemaximumfrequency,theSysTickperiodis1ms.Ifcalibrationinformationisnotknown,calculatethecalibrationvaluerequiredfromthefrequencyoftheprocessorclockorexternalclock.

          本文引用地址:http://cafeforensic.com/article/201612/324399.htm

          類似matlab里的tic與toc函數,用來統(tǒng)計程序代碼執(zhí)行需要的時間:
          uint16_t OverFlowTimes=0;

          void tic(void) //程序開始計時
          {
          SysTick->CTRL |= (1<<2); //時鐘選擇,HCLK
          SysTick->CTRL |= (1<<1); //中斷使能
          SysTick->VAL=0X00;//當前數值寄存器清零,并清除溢出標志位
          SysTick->LOAD=0XFFFFFF; //計數器賦初值
          SysTick->CTRL |= (1<<0); //開啟計數器
          }
          void toc(void) //結束計時
          {
          float ElaspTime;
          uint32_t ClkNum;
          SysTick->CTRL &= ~(1<<0); //關閉計數器
          ClkNum=SysTick->VAL; //讀取計數器的值
          ElaspTime=(OverFlowTimes*((float)0xffffff/SystemCoreClock)+(float)(0xffffff-ClkNum)/SystemCoreClock); //計算時間
          OverFlowTimes=0;
          printf("Escaple time is %f",ElaspTime);
          }
          /*溢出的次數*/
          void SysTick_Handler(void)
          {
          OverFlowTimes++;
          }

          上一頁 1 2 下一頁

          評論


          技術專區(qū)

          關閉