搜索
bottom↓
回复: 2

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

[复制链接]

出0入0汤圆

发表于 2019-7-3 15:19:22 | 显示全部楼层 |阅读模式
第一种:
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这种对时序要求很严的传感器里面,读不出来传感器值,但是第二种是可以的。求路过大神,给解释一下,谢谢!!

出40入42汤圆

发表于 2019-7-3 15:39:47 | 显示全部楼层
可能原因:
1.第二种SysTick->VAL清零了,第一种没有清零
2.时间的LOAD值没有算对

第1个原因居多吧,看一下手册对系统时钟计数值重载部分的说明

出40入42汤圆

发表于 2019-7-3 15:42:27 | 显示全部楼层
还有的是两种方法里SysTick->CTRL的对时钟源的选择不同,也可以查一下
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-8 08:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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