OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5162|回复: 2

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

[复制链接]

2

主题

9

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2019-7-23
在线时间
5 小时
发表于 2019-11-18 14:12:43 | 显示全部楼层 |阅读模式
1金钱
都在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。大致过程我就是理解的,如果我叙述的不明白欢迎加我QQ2545407140,

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

F407_FC_ANO.rar

8.62 MB, 下载次数: 10

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2019-7-23
在线时间
5 小时
 楼主| 发表于 2019-11-18 17:47:27 | 显示全部楼层
回复

使用道具 举报

6

主题

1127

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1656
金钱
1656
注册时间
2019-8-15
在线时间
102 小时
发表于 2019-11-22 19:18:18 | 显示全部楼层
帮顶         
成功没有捷径
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-1 04:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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