OpenEdv-开源电子网

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

Cotrex-M内核定时器两种微秒级别精准延时区别,求路过大神解释。。。

[复制链接]

6

主题

50

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
219
金钱
219
注册时间
2013-8-15
在线时间
60 小时
发表于 2019-7-3 15:20:43 | 显示全部楼层 |阅读模式
第一种:
void delay_nus(vu32 val)
{
        SysTick->LOAD = System_Clk*val;//
        SysTick->CTRL = 0x05;
        while(!(SysTick->CTRL&0x00010000));
        SysTick->CTRL = 0x04;
}
System_Clk为系统主时钟频率值;
第二种:
void delay_nus(u32 nus)
{               
        u32 temp;                     
        SysTick->LOAD=nus*9000; //????                           
        SysTick->VAL=0x00;        //?????
        SysTick->CTRL=0x01 ;      //????         
        do
        {
                temp=SysTick->CTRL;
        }
        while(temp&0x01&&!(temp&(1<<16)));//??????   
        SysTick->CTRL=0x00;       //?????
        SysTick->VAL =0X00;       //?????         
}
第二种延时程序,应该是非常精准的,因为第一种延时程序用在DS18B20和DHT11这种对时序要求很严的传感器里面,读不出来传感器值,但是第二种是可以的。求路过大神,给解释一下,谢谢!!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-11 07:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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