针对FreeRTOS SysTick HAL 等时钟进行学习

1.软件定时器和硬件定时器的区别

软件bai定时就是直接利用CPU的时钟,用计算循环的方法计时。例如假设CPU执行一个指令需要10个时钟周期,那么循环执行1000次就是10000个时钟。因为CPU的时钟间隔是恒定的,那么假设一个时钟是1微秒,则10000个时钟就是0.01秒。这种循环测试时间长度的办法在单任务系统,例如DOS下,还是相对准确的。但是在Windows这种多任务系统下由于系统调度的原因程序会被不停滴中断(好让其它任务有机会运行),这样其实就不能精确知道1000次循环究竟用了多少个时钟(因为有些时段分给别的任务了),所以在多任务环境下软件定时误差很大。一般只能达到毫秒级的准确度。

硬件定时则是基于硬件。例如定时/计数器,这个不受操作系统影响,由硬件提供时间,精度可以达到微秒级。如果更精确的时间可以使用天文台授时或者原子钟。其精度更高。

2.系统SysTicks的配置

         滴答是个只有最普通的定时器功能,普通定时器功能很多,不仅仅有定时器功能滴答一般是给RTOS 用的,普通定时器一般当作外设使用。

Systick也叫系统滴答定时器,滴答定时器就是一个非常基本的倒计时定时器。它存在的意义是为系统提供一个时基,能够给操作系统提供一个硬件上的中断。使用Systick能够精准延时,对于时间要求严格的场所,意义十分重大。

void delay_init(u8 SYSCLK)  //设置滴答定时器的中断周期
{

	u32 reload;//定义滴答定时器的预装载值

 	SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
 //选滴答定时器的时钟源为高速时钟96MHZ

											
	reload=SYSCLK;		//赋值96					
	reload*=1000000/configTICK_RATE_HZ;		//中断周期为:  1/96M  * 96M/1000  
	
	SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk;   //开启滴答定时器中断
	SysTick->LOAD=reload; 					 //设置预装载值
	SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;  //开启滴答定时器

}						

注:

这是在F429 FreeRTOS开发手册上的内容:

但是MiniFly 并没有采用HAL库,同样使用Sys进行系统延时,因此没有这个限制。但是如果采用Cube,也就同时采用了HAL库, 如果需要修改滴答定时器频率时就要注意。

使用Sys进行延时并没有改变滴答定时器的预装载值,只是不断地判断当前值的变化,以判断是否达到延时值。

3.时钟配置 SYS  和 RCC

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值