“第十八课--定时器中断的使用/zh”的版本间的差异

来自Microduino Wikipedia
跳转至: 导航搜索
(Created page with "== 目的 == 上一课我们学习了Microduino CoreSTM32外部中断的使用,本课将学习定时器中断的使用。仅有硬币大小的Microduino CoreSTM32内部有4...")
 
程序
第47行: 第47行:
 
* void setCompare(int channel, uint16 compare)
 
* void setCompare(int channel, uint16 compare)
 
:* 参数:channel定时器通道。
 
:* 参数:channel定时器通道。
:*       compare比较值,可以是0或溢出值-1。
+
:* compare比较值,可以是0或溢出值-1。
 
:* 设定定时器中指定通道的比较值,该值用于控制触发事件的相位,当比较值大于定时器溢出值时,会被设定为定时器的溢出值。定时器计数达到比较器的比较值时会触发操作,例如,PWM或是通过中断执行某个指定函数。
 
:* 设定定时器中指定通道的比较值,该值用于控制触发事件的相位,当比较值大于定时器溢出值时,会被设定为定时器的溢出值。定时器计数达到比较器的比较值时会触发操作,例如,PWM或是通过中断执行某个指定函数。
 +
 
== 调试 ==
 
== 调试 ==
  

2015年1月17日 (六) 11:39的版本

目的

上一课我们学习了Microduino CoreSTM32外部中断的使用,本课将学习定时器中断的使用。仅有硬币大小的Microduino CoreSTM32内部有4个16位定时器,每个定时器可以计数到最大65535,每个定时器有4个比较器,每个比较器可以独立地与定时器比较触发操作,触发操作可以是PWM或产生中断。同一个定时器上的不同比较器可以以相同的频率触发,但触发的相位不同,这可以用于PWM与步进电机驱动等应用。

设备

Microduino-CoreSTM 是以ARM Cortex-M3为核心的32位单片机开发核心板,是一个开源的、与Microduino其它模块扩展模块兼容的控制器模块。

  • 其他硬件设备
  • 面包板跳线 一盒
  • 面包板 一块
  • USB数据连接线 一根

实验原理

控制硬件定时器需要实例化HardwareTimer类。注意,PWM也是由定时器控制的,在同时使用定时器和PWM时,需要尽量避免共用一个定时器或触发器。

  • 为了使用定时器中断,这里建议采用下面的步骤:
  • 1)用pause()函数暂停定时器。
  • 2)设定分频器与溢出值(也可用setPeriod()来设定)。
  • 3)选择一个通道来处理中断,并将该通道工作模式设定为TIMER_OUTPUT_COMPARE。
  • 4)设定选定通道的比较值,该值可以是0到溢出值之间的一个值,如果你不在乎具体什么值触发中断则可以忽略,默认会在计数器为1时触发。
  • 5)连接中断到用于处理该定时器中断的函数。
  • 6)用refresh()函数重置计数器。
  • 7)用resume()函数恢复计数器计时。

下面我们结合上边的步骤用定时器来闪烁Microduino CoreSTM32上的LED。

程序

HardwareTimer timer1(1);
void setup()
{
  pinMode(BOARD_LED_PIN, OUTPUT);
  timer1.pause();              //暂停定时器
  timer1.setPeriod(50000);     //50ms,设置定时器的计时周期,该操作会设定分频器和溢出值,已获得尽可能接近指定周期的溢出周期
  timer1.setMode(1,TIMER_OUTPUT_COMPARE);   //设定比较器1触发中断
  timer1.setCompare(1, 1);                 //设定比较器1的值为1,当计数器计数到1时触发比较器1
  timer1.attachInterrupt(1,handler_led);   //为通道1设置中断
  timer1.refresh();                        //重置定时器,恢复定时器的值为0,并更新溢出值与分频设置
  timer1.resume();                         //开始计数
}
void loop()
{}
void handler_led(void) 
{
  toggleLED();
}

程序说明:

  • void setMode(int channel, timer_mode mode)
  • 设定定时器的工作模式。
  • 参数:channel定时器通道。
  • mode定时器的工作模式有3种:TIMER_DISABLED(关闭)、TIMER_PWM(PWM,初始化后的默认模式)、TIMER_OUTPUT_COMPARE(由定时器触发中断)。
  • void setCompare(int channel, uint16 compare)
  • 参数:channel定时器通道。
  • compare比较值,可以是0或溢出值-1。
  • 设定定时器中指定通道的比较值,该值用于控制触发事件的相位,当比较值大于定时器溢出值时,会被设定为定时器的溢出值。定时器计数达到比较器的比较值时会触发操作,例如,PWM或是通过中断执行某个指定函数。

调试

结果

视频