延时代码求详细说明

2019-08-20 18:06发布

我是新手,这局中reload*=1000000/OS_TICKS_PER_SEC;为什么要用1000000来除以OS_TICKS_PER_SEC
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
正点原子
1楼-- · 2019-08-20 19:56
reload=SYSCLK/8; 
//此时,一个reload的时间,等于1us.

reload*=1000000/OS_TICKS_PER_SEC; 
//OS_TICKS_PER_SEC,表示1秒钟有多少个节拍,假定是200,那么中断时间必须是5ms中断一次.
//要5ms中断一次,是不是reload*=5000

5000是不是等于:1000 000/200??
taizonglai
2楼-- · 2019-08-20 23:27
用了操作系统?没用操作系统的话这一行代码不用管,不会编译的。
龙之谷
3楼-- · 2019-08-21 02:15
 精彩回答 2  元偷偷看……
淡淡的鼬殇
4楼-- · 2019-08-21 04:42
回复【2楼】zuozhongkai:
---------------------------------
freeRTOS
淡淡的鼬殇
5楼-- · 2019-08-21 09:29
回复【3楼】龙之谷:
---------------------------------

reload=SystemCoreClock/8000000; //每秒钟的计数次数 单位为K    
reload*=1000000/OS_TICKS_PER_SEC;//根据OS_TICKS_PER_SEC设定溢出时间
//reload为24位寄存器,最大值:16777216,在72M下,约合1.86s左右
fac_ms=1000/OS_TICKS_PER_SEC;//代表ucos可以延时的最少单位    
SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk;    //开启SYSTICK中断
SysTick->LOAD=reload;  //每1/OS_TICKS_PER_SEC秒中断一次
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;    //开启SYSTICK
淡淡的鼬殇
6楼-- · 2019-08-21 12:22
回复【3楼】龙之谷:
---------------------------------
OS_TICKS_PER_SEC  给他赋值为100的话 就代表每10ms   tick一次,但是为什么要被1M除?

一周热门 更多>