新聞中心

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

        STM32中的tic與toc,用SysTick統計代碼段執行時間

        作者: 時間: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://www.104case.com/article/201612/324399.htm

        類似matlab里的tic與toc函數,用來統計程序代碼執行需要的時間:
        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 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 沙雅县| 大姚县| 乐安县| 三亚市| 永修县| 石河子市| 珲春市| 桑日县| 临潭县| 屏东市| 平阳县| 海阳市| 许昌市| 庆城县| 武山县| 陕西省| 邛崃市| 大足县| 吉首市| 黑山县| 清河县| 佛教| 西吉县| 龙山县| 界首市| 江城| 天门市| 正定县| 胶州市| 张掖市| 海盐县| 汉阴县| 德惠市| 江川县| 高碑店市| 南充市| 永仁县| 南木林县| 凉城县| 怀柔区| 常熟市|