STM32学习笔记---------------------------普通延时与定时器延时哪个更好
不知不觉距离上一次发文已经过了两个月了,期间经历了很多事情,也学到了很多知识点,本文也是继上一篇文章之后的学习记录,希望有不足之处能得到各位大神指点!
简要介绍延时
对于初学者来说,延时是一个很简单却又不简单的功能,对于一些普通的延时函数我了解到的大概有以下这些:
//毫秒级延时
void delay_ms(u16 time)//这个time是你自定义的时间长度,比如2ms时time = 2;3ms时time = 3等,以此类推
{
u16 time_cnt_ms = 0;//这里定义一个变量,计数
while(time --)
{
time_cnt_ms = 10000;//这个值可以通过示波器或者逻辑分析仪抓,实在不行自己掐着表用LED显示来判断
while(time_cnt_ms --);
}
}
//微秒级延时
void delay_us(u16 time)
{
u16 time_cnt_ms = 0;
while(time --)
{
time_cnt_ms = 8;//这个我是按8位记一次随便定义的,最好根据逻辑分析仪或者示波器自己抓了再自定义
while(time_cnt_ms --);
}
}
以上是普通的延时函数,在实际项目中其实这样做有很大的忌讳,第一这样做其实不太精准,当你调用上面延时函数多了用示波器或者逻辑分析仪抓就知道时间会有一定的误差,而以后的学习中对整个程序的运行时间可控性考虑是成为高级程序员必不可少的经理;第二这样做就相当于空耗CPU资源,让他停在这个递减计数中循环,后果严重点可能会直接烧毁元器件啥的。
所以我们有了一种精准一点的延时,既能精准计数,又能处理别的事情而不占用CPU太多资源。没错,我要说的就是利用定时器中断延时,下面贴出我对这方面的程序运用:
//首先我们要了解什么是系统时钟--------建议网上直接搜索,最好看你所用的芯片型号的