SystemTick定时器章节延时函数的疑问

百问文档175页代码11.3.5是如何实现延时功能的?它在main中出现且函数内部没有调用其他函数。它与代码11.3.6又是如何产生联系的

就是通过中断来联系的,定时器没溢出一次就会触发一次中断,中断处理函数有会将传入的值减一,就这样实现延时的。文档中是使用的全局变量 systick_t ,中断中也是直接操作的 systick_t 。

我还有些疑问


SysTick每计数完一次则进入Sys Tick中断,也就是定时器每经历一个周期就进入11.3.6函数,不过我查看main函数并没有在哪里调用11.3.6函数也就是中断处理函数,这个函数是怎么执行的

11.3.6中断处理函数是将systick_t变量自减到0,我理解的这个systick_t变量是定时器周期的个数,不过为什么systick_t变量完成一次自减就恰好花费了定时器一个周期的时长,这是怎么实现的
image

11.3.5 SysTickDelay函数的作用就是修改全局变量systick_t的值吗,下面的while循环的作用是什么

前面一个章节讲的中断 ,可以再看一下。中断处理函数不需要调用,只要产生中断就会自己执行。

定时器溢出一次会产生一次中断,产生一次中断就会让 systick_t 的值减一 ,

while 循环就是延迟多少个 定时器的周期塞

我想梳理一下思路请您看看对不对

在main函数的第38行初始化了定时器后定时器开始工作,每次溢出产生一个中断就会调用11.3.6函数,在46行之前因为system_t没有赋值,所以不进入if条件。直到46行和48行进入delay函数给system_t赋值,每产生一次中断systems_t减一,直到减为0,不满足while循环条件退出delay函数,继续往下执行

嗯,差不多是这样的zsbdzsbd

十分感谢zsbdzsbdzsbd