esp8266教程:定时器之原理基础
定时器的作用
在嵌入式软件开发中我们经常需要使用到定时器,定时器又有什么用?定时器在很多场景都有使用,比如我们要控制一盏led灯的闪烁,亮1秒钟,灭1秒钟,这时候就需要使用到定时器了,比如led灯亮了之后,就要启动定时器,等一秒钟后,定时器超时,定时1秒时间达到,然后熄灭led灯,然后如此反复,就形成了led闪烁的效果。所以定时器在嵌入式系统开发中是非常常见的功能。
定时器的原理
MCU内部一般都有硬件计数器,这个计数器可以根据芯片厂的设计有不同的功能,然后根据芯片的外部晶振时钟来计数,假设外部晶振的时钟为10M,可以配置为一个晶振时钟周期来计数一次,如果这个硬件计数器是16位的,那么可以计数的最大值为65535,当计数器从0计数到65535需要花的时间为 1 / 10000000 * 65535 = 0.0065535秒,6.5535毫秒。
esp8266定时器使用之不用深入理解细枝末节
上面我们说在mcu里面定时器的原理,但是在sdk,或者说在原厂的驱动里面我们无需关心定时器是如何配置出来的。我们只需要使用即可,这里可能有些所谓的“老工程师”需要告诉你,要你深入理解寄存器才能学到知识,我觉得完全没有必要,我们也不用去学习寄存器是怎么配置,我们只需要sdk给我们使用的接口是怎么来的即可,对于细枝末节的东西我们要抓大放小,为啥我啰嗦一大堆,就是怕大家真的去追那些细枝末节的东西。
esp8266定时器使用
//定时器初始化使用原型,主要是传入两个参数,一个是定时时间到之后的回调函数callback。
//另一个是定时时间到之后,调用回调函数给你传入的参数arg
esp_err_t hw_timer_init(hw_timer_callback_t callback, void *arg);
//使用例子,注册一个回调函数,不使用回调传参数,所以设置为NULL
hw_timer_init(hw_timer_callback1, NULL);
//调用hw_timer_alarm_us设置定时的时间,这里设置为100us,第二个参数true的意思是,重复定时,就是定时器到了之后还继续定时100us。
//如果第二个参数是设置false,那么就只会定时器一次。
hw_timer_alarm_us(100, true);
//回调函数的功能,就是将一个IO的电平进行反转一下
void hw_timer_callback1(void *arg)
{
static int state = 0;
gpio_set_level(GPIO_OUTPUT_IO_0, (state ) % 2);
}
,