野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12731|回复: 0

匿名飞控嘀嗒定时器微秒延时不明白

[复制链接]
发表于 2019-11-18 14:20:09 | 显示全部楼层 |阅读模式
都在time.c文件中
stm32f4xx_it.c嘀嗒时钟的中断函数,滴答时钟的相关配置已经配置好了
void SysTick_Handler(void)
{
        sysTickUptime++;
        sys_time();
}
volatile uint32_t sysTickUptime = 0;
uint32_t GetSysTime_us(void)
{
          register uint32_t ms;
         u32 value;
         ms = sysTickUptime;
         value = ms * TICK_US + (SysTick->LOAD - SysTick->VAL) * TICK_US / SysTick->LOAD;
          return value;//这里LOAD=21K,TICK_US=1000,VAL=0,时钟平率=21M
}
微秒延时函数
void Delay_us(uint32_t us)//如果要延时10微秒的话us就是10
{
        uint32_t now = GetSysTime_us();
        while (GetSysTime_us() - now < us);
}//这里的微妙延时不太懂,一开始没进入中断,ms=0,value=1000,在Delay_us中now=1000,
while(1000-1000<10),为真,一直在这里等待,时间(LOAD=21K/21M,这样终端一次就是1ms啊,怎么会出来微秒延时呢?)到后再进入中断,中断中sysTickUptime++后,等于1,GetSysTime_us()的值改了,增大了1000,条件为假,退出while。大致过程我就是理解的

void Delay_ms(uint32_t ms)//1ms=1000us
                {
                        while (ms--)
                        Delay_us(1000);
                }

F407_FC_ANO.rar

8.62 MB, 下载次数: 7

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-22 12:51 , Processed in 0.030349 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表