当前位置:首页 > 单片机 > 单片机
[导读] 在实际的项目开发过程中,常常遇到需要得到一段代码的运行时间,通常的方法是用示波器来测量,这篇博文将用SysTick来实现精确测量程序运行的时间。STM32F4的内核定时器SysTick是一个24位的定时器,需要

在实际的项目开发过程中,常常遇到需要得到一段代码的运行时间,通常的方法是用示波器来测量,这篇博文将用SysTick来实现精确测量程序运行的时间。STM32F4的内核定时器SysTick是一个24位的定时器,需要注意最大的测量时间。


1,开发环境

1,固件库:STM32F4xx_DSP_StdPeriph_Lib_V1.8.0

2,编译器:ARMCC V5.06

3,IDE:Keil uVision5

4,操作系统:Windows 10 专业版


2,程序源码

MeasureTime.h文件

  1. /**

  2. ******************************************************************************

  3. *@fileMeasureTime.h

  4. *@authorXinLi

  5. *@versionv1.0

  6. *@date24-October-2017

  7. *@briefMeasureprogramruntimemodule.

  8. ******************************************************************************

  9. *@attention

  10. *

  11. *

    Copyright©2017XinLi

  12. *

  13. *Thisprogramisfreesoftware:youcanredistributeitand/ormodify

  14. *itunderthetermsoftheGNUGeneralPublicLicenseaspublishedby

  15. *theFreeSoftwareFoundation,eitherversion3oftheLicense,or

  16. *(atyouroption)anylaterversion.

  17. *

  18. *Thisprogramisdistributedinthehopethatitwillbeuseful,

  19. *butWITHOUTANYWARRANTY;withouteventheimpliedwarrantyof

  20. *MERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.Seethe

  21. *GNUGeneralPublicLicenseformoredetails.

  22. *

  23. *YoushouldhavereceivedacopyoftheGNUGeneralPublicLicense

  24. *alongwiththisprogram.Ifnot,see.

  25. *

  26. ******************************************************************************

  27. */

  28. #ifndef__MEASURETIME_H

  29. #define__MEASURETIME_H

  30. #ifdef__cplusplus

  31. extern"C"{

  32. #endif

  33. /*Headerincludes-----------------------------------------------------------*/

  34. #include"stm32f4xx.h"

  35. /*Macrodefinitions---------------------------------------------------------*/

  36. /*Typedefinitions----------------------------------------------------------*/

  37. /*Variabledeclarations-----------------------------------------------------*/

  38. /*Variabledefinitions------------------------------------------------------*/

  39. /*Functiondeclarations-----------------------------------------------------*/

  40. /*Functiondefinitions------------------------------------------------------*/

  41. /**

  42. *@briefStartmeasuretime.

  43. *@paramNone.

  44. *@returnNone.

  45. */

  46. __STATIC_INLINEvoidMeasureTimeStart(void)

  47. {

  48. SysTick->CTRL|=SysTick_CLKSource_HCLK;/*SettheSysTickclocksource.*/

  49. SysTick->LOAD=0xFFFFFF;/*Timeload(SysTick->LOADis24bit).*/

  50. SysTick->VAL=0xFFFFFF;/*Emptythecountervalue.*/

  51. SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;/*Startthecountdown.*/

  52. __nop();/*Waitingforamachinecycle.*/

  53. }

  54. /**

  55. *@briefStopmeasuretime.

  56. *@param[in]clock:Systemclockfrequency(unit:MHz).

  57. *@returnProgramruntime(unit:us).

  58. */

  59. __STATIC_INLINEdoubleMeasureTimeStop(uint32_tclock)

  60. {

  61. uint32_tcount=SysTick->VAL;/*Readthecountervalue.*/

  62. SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;/*Closecounter.*/

  63. doubletime=0.0;

  64. if(clock>0)

  65. {

  66. time=(double)(0xFFFFFF-count)/(double)clock;/*Calculateprogramruntime.*/

  67. }

  68. returntime;

  69. }

  70. #ifdef__cplusplus

  71. }

  72. #endif

  73. #endif/*__MEASURETIME_H*/


main.c文件

  1. /**

  2. ******************************************************************************

  3. *@filemain.c

  4. *@authorXinLi

  5. *@versionv1.0

  6. *@date24-October-2017

  7. *@briefMainprogrambody.

  8. ******************************************************************************

  9. *@attention

  10. *

  11. *

    Copyright©2017XinLi

  12. *

  13. *Thisprogramisfreesoftware:youcanredistributeitand/ormodify

  14. *itunderthetermsoftheGNUGeneralPublicLicenseaspublishedby

  15. *theFreeSoftwareFoundation,eitherversion3oftheLicense,or

  16. *(atyouroption)anylaterversion.

  17. *

  18. *Thisprogramisdistributedinthehopethatitwillbeuseful,

  19. *butWITHOUTANYWARRANTY;withouteventheimpliedwarrantyof

  20. *MERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.Seethe

  21. *GNUGeneralPublicLicenseformoredetails.

  22. *

  23. *YoushouldhavereceivedacopyoftheGNUGeneralPublicLicense

  24. *alongwiththisprogram.Ifnot,see.

  25. *

  26. ******************************************************************************

  27. */

  28. /*Headerincludes-----------------------------------------------------------*/

  29. #include"main.h"

  30. #include"MeasureTime.h"

  31. /*Macrodefinitions---------------------------------------------------------*/

  32. /*Typedefinitions----------------------------------------------------------*/

  33. /*Variabledeclarations-----------------------------------------------------*/

  34. /*Variabledefinitions------------------------------------------------------*/

  35. static__IOdoublerunTime=0.0;

  36. /*Functiondeclarations-----------------------------------------------------*/

  37. __STATIC_INLINEvoiddelay_1us(void);

  38. /*Functiondefinitions------------------------------------------------------*/

  39. /**

  40. *@briefMainprogram.

  41. *@paramNone.

  42. *@returnNone.

  43. */

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

涡轮流量计是一种广泛用于测量液体和气体流量的仪器,它基于涡轮叶片的旋转来测量流体的速度并计算出流量。这种类型的流量计在工业、化工、石油、天然气、水处理和许多其他领域都得到了广泛的应用。然而,要确保涡轮流量计的准确性和可靠...

关键字: 涡轮流量计 涡轮叶片 测量

液位变送器是一种常见的工业自动化装置,用于测量液体高度或容器中的液体体积。它广泛应用于石油化工、食品加工、水处理等领域,在生产过程中起到重要的监测和控制作用。本文将介绍液位变送器的基本原理、应用设计步骤以及注意事项,帮助...

关键字: 液位变送器 工业自动化 测量

仿真的概念其实使用非常广,最终的含义就是使用可控的手段来模仿真实的情况。在嵌入式系统的设计中,仿真应用的范围主要集中在对程序的仿真上。

关键字: 单片机 仿真器 程序

虚拟仪器技术是一种基于计算机和软件的测量与控制技术,它利用计算机软硬件平台,替代传统仪器设备,实现了仪器的虚拟化和软件化。通过虚拟仪器技术,我们可以设计出高灵活性、可扩展性和集成性的测量系统。以下是一些采用虚拟仪器技术实...

关键字: 虚拟仪器 测量 计算机

光纤光栅传感器是利用光纤中的光敏性制成的。所谓光纤中的光敏性是指激光通过掺杂光纤时,光纤的折射率将随光强的空间分布发生相应变化的特性。而在纤芯内形成的空间相位光栅,其实质就是在纤芯内形成一个窄带的(透射或反射)滤波器或反...

关键字: 光栅 传感器 测量

压力传感器主要的作用就是用来检测和控制,这种设备可以进行直接的压力测量同时也可以通过传感器的使用来对其他数值进行间接的测量。像是液体和气体以及速度还有水位的高度都是可以通过压力传感器来得到准确的数值。所以说,压力传感器的...

关键字: 压力传感器 控制 测量

使用压力传感器,可以进行压力测量以确定一系列不同值和不同类型的压力,具体取决于压力测量是相对于大气、真空条件还是其他压力参考水平进行的。压力传感器是可以设计和配置为检测这些变量的压力的仪器。

关键字: 压力传感器 测量 传感技术

摘要:多参数监护仪主要用于监测危重患者的生命体征参数,其监护参数一般包括心电、无创血压、血氧饱和度三个部分,有些监护仪还包括对呼末二氧化碳等人体生理参数的监护功能。多参数监护仪由三部分构成,即信号采集、信号处理和信号显示...

关键字: 多参数监护仪 不确定度 测量

步进电动机是将电脉冲激励信号转换成相应的角位移或线位移的离散值控制电动机,这种电动机每当输入一个电脉冲就动一步,所以又称脉冲电动机。

关键字: 步进电机 正反转 程序

KeilμVision4是Keil软件公司为8051系列微控制器及其兼容产品设计的集成式软件开发环境。μVision4集成了C51编译器和A51汇编器,其界面类似于Microsoft VS,支持C语言和汇编语言程序的编写...

关键字: 程序 编译 链接
关闭
关闭