针对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
    评论
FreeRTOS中的SysTick延时是一种基于系统时钟的延时机制。SysTick定时器是一个硬件定时器,用于产生系统节拍。它可以被用来创建精确的延时和时间测量。 在FreeRTOS中,有两种类型的SysTick延时函数可供使用:相对延时和绝对延时。相对延时使用vTaskDelay函数,它接受一个参数xTicksToDelay,表示要延时的SysTick数目。这种延时方式是相对于当前任务的时间来计算的,它会暂停当前任务的执行,并将任务加入到延时队列中等待指定的SysTick数目后再次运行。 另一种是绝对延时,使用vTaskDelayUntil函数。它接受两个参数pxPreviousWakeTime和xTimeIncrement。pxPreviousWakeTime表示要延时起始的SysTick时刻,xTimeIncrement表示相对起始时刻的时间间隔。这种延时方式允许任务按照固定的时间间隔执行,可以用于周期性任务的调度。 需要注意的是,SysTick延时函数只能在FreeRTOS任务中使用,不能在中断服务程序(ISR)中使用。此外,SysTick定时器的配置需要在FreeRTOSConfig.h文件中进行设置。 总结起来,FreeRTOS中的SysTick延时是通过使用定时器服务任务和定时器命令队列来实现的,提供了相对延时和绝对延时两种方式,可用于实现精确的任务调度和时间控制。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [FreeRTOS学习(六)时间管理](https://blog.csdn.net/la_fe_/article/details/114880371)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [浅析 FreeRTOS SysTick 和任务延时](https://blog.csdn.net/wangyx1234/article/details/127311949)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值