stm32累计工作时间

stm32累计工作时间,第1张

STM32累计工作时间是指系统在某一段时间内累计的工作时间,它可以用来表示由于系统软件或硬件的变化而影响系统性能的时间。STM32累计工作时间的计算可以通过系统中的计时器来完成,有些STM32芯片也有一个内置的定时器,可以用来计算累计工作时间。此外,也可以使用软件实现累计工作时间的计算,例如使用一个循环来跟踪系统 *** 作的开始和结束时间,然后计算出累计工作时间。

-55℃~+125℃。基于STM32F407温度传感器DS18B20的TFT显示屏实时显示温度,温度传感器DS18B20:测温范围-55℃~+125℃,工作电源: 30~55V。

你指的计时和定时应该是要用在从一个标志开始计时到另一个标志停止计时,或者
从现在开始
定时一个精确时间t,以执行某个动作?
如果是这样,只能用硬件定时器来实现, *** 作系统里用在延时的计时都是根据自己的节拍为参考的,你可以用tick
count来获取两次时刻的节拍数差来获取时间,但是这样的话到达某一时间并不能促使你的动作发生,需要你自己不停去检测。

SysTick 就是一个定时器而已,只是它放在了NVIC(嵌套中断控制器)中,主要的目的是为了给 *** 作系统提供一个硬件上的中断(号称滴答中断)。

滴答中断: *** 作系统进行运转的时候,也会有“心跳”。

它会根据“心跳”的节拍来工作,把整个时间段分成很多小小的时间片,每个任务每次只能运行一个“时间片”的时间长度就得退出给别的任务运行,这样可以确保任何一个任务都不会霸占整个系统不放。

这个心跳,可以通过定时器来周期性触发,而这个定时器就是systick。很明显,这个“心跳”是不允许任何人来随意地访问和修改的。只要不把它在SysTick 控制及状态寄存器中的使能位清除,就永不停息。

{

SysTick_Current=0; //当前值为0

SysTick_Reload=72000; //重装载寄存器,系统时钟72M,中断一次1mS(1ms=0001s=1/72M72000)

TimingDelay =nTime; // 读取延时时间

SysTick_CSR=0x07; // 使能SysTick计数器

while(TimingDelay!= 0); // 判断延时是否结束

SysTick_CSR=0x06;// 关闭SysTick计数器

}

void Delay_Nus(uint32_t nTime)      //us级的延时函数

{ SysTick_Current=0;

SysTick_Reload=72; //重装载寄存器,系统时钟20M中断一次1mS

TimingDelay=nTime;

SysTick_CSR=0x07;   // 使能SysTick计数器

while(TimingDelay!= 0); // 判断延时是否结束

SysTick_CSR=0x06;// 关闭SysTick计数器 }

首先假设两个IO是PA0 PA1,信号是低电平有效。
PA0和PA1都设为中断方式,下降沿触发。
主函数启动的时候,启动内部定时器。
在中断中分别记录定时器当时的数值到两个不同的全局变量。全局变量要用volatile定义更好。
在主程序中,判断这两个变量的差值,就是时间差,但要注意,定时器可能溢出,所以注意减方向。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13335726.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-17
下一篇 2023-07-17

发表评论

登录后才能评论

评论列表(0条)

保存