【自学笔记】STM32的SYSTEM文件夹介绍

概览

该文件夹下包含3个文件:

1.delay文件夹

​ delay文件夹内包含了delay.cdelay.h两个文件,用来实现系统的延时功能,其中包含了7个函数:

	void delay_osschedlock(void);
	void delay_osscheddunlock(void);
	void delay_ostimedly(u32 ticks);
	void SysTick_Handler(void);
	void delay_init(u8 SYSCLK);
	void delay_ms(u16 nms);
	void delay_us(u32 nus);

​ delay延时的编程思想:

​ CM3内核的处理器,内部包含了一个SysTick定时器,这是一个24位的倒计数定时器,当计数到0时,将从RELOAD寄存器中自动装在定时初值,开始新的一轮计数。只要不将它在SysTick控制及状态寄存器中的使能位清除,就永不停歇。

​ μcosII的时钟:μcos运行需要一个系统时钟节拍,而这个节拍是固定的(由OS_TICKS_PER_SEC宏定义设置),比如要求5ms一次,就可以设置(OS_TICKS_PER_SEC=200),在STM32上面,一般由SysTick来提供这个节拍,也就是SysTick要设置为5ms中断一次,为μcos提供时钟节拍,而这个时钟是不能被打断的,否则就不准时了。

如何实现操作系统和我们的 delay 函数共用 SysTick 定时器?

​ 利用时钟摘取法。

​ 以delay_us为例,比如delay_us(50),在刚进入delay_us的时候先计算好这段延时需要等待的SysTick计数次数,这里为50 * 9(假设系统时钟为72MHz,那么SysTick每增加1,就是1/72us),然后我们就一直统计SysTick的计数变化,直到这个值变化了50 * 9,一旦检测到变化达到或者超过这个值,就说明50us的延迟到了。这样我们只是抓取了SysTick计数器的变化,并不需要修改SysTick的任何状态,就不会影响这个计数器作为μcos时钟的节拍功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值