OpenEdv-开源电子网

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

void delay_us(u32 nus)延时函数遇到BUG问题请教

[复制链接]

9

主题

21

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2016-6-13
在线时间
9 小时
发表于 2016-7-9 15:50:06 | 显示全部楼层 |阅读模式
1金钱
void delay_us(u32 nus)
{               
        u32 ticks;
        u32 told,tnow,tcnt=0;
        u32 reload=SysTick->LOAD;                                //LOAD的值                     
        ticks=nus*fac_us;                                                 //需要的节拍数
        delay_osschedlock();                                        //阻止OS调度,防止打断us延时
        told=SysTick->VAL;                                        //刚进入时的计数器值
        while(1)
        {
                tnow=SysTick->VAL;       
                if(tnow!=told)
                {            
                        if(tnow<told)tcnt+=told-tnow;        //这里注意一下SYSTICK是一个递减的计数器就可以了.
                        else tcnt+=reload-tnow+told;            
                        told=tnow;
                        if(tcnt>=ticks)break;                        //时间超过/等于要延迟的时间,则退出.
                }  
        };
        delay_osschedunlock();                                        //恢复OS调度                                                                            
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
if(tnow<told)tcnt+=told-tnow;        //这里注意一下SYSTICK是一个递减的计数器就可以了.
                        else tcnt+=reload-tnow+told;          这一句,如果我要技术到5 ,reload的值是10,Vald的值是4,那么计数到0 tcnt的值是4,然手重新装载10,这时候就是
tcnt+=reload-tnow+told;         那就是4+(10-10+0)等于4,应该在这里要等于5才对啊!如果要等于5那就要等到计数到9的时候去了,那不是少记了一个数吗?

最佳答案

查看完整内容[请看2#楼]

定时器的ARR设置为10的时候,实际上是11分频。 你理解这句话,再套进来,就对了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-7-9 15:50:07 | 显示全部楼层
定时器的ARR设置为10的时候,实际上是11分频。  你理解这句话,再套进来,就对了。
回复

使用道具 举报

9

主题

21

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2016-6-13
在线时间
9 小时
 楼主| 发表于 2016-7-10 12:25:49 | 显示全部楼层
是11个节拍吧?这里和分频有什么关系
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 18:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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