党国特派员 发表于 2015-11-24 12:15:10

【NUCLEO-L476RG开发】mbed时钟系统

本帖最后由 党国特派员 于 2015-11-24 12:15 编辑

微处理器的大量应用都和时间相关,如我们前面代码中多次出现的wait函数就是最常用的时间等待函数,显然,精确的时间等待必须建立在精确的计时技术上,这就需要用到计数器系统。计数器的工作原理非常简单,就是每当它接收到一个脉冲时,它的计数值加一,一旦它的计数值达到用户设定的阈值,计数器就会产生一个中断信号让系统处理并重新从0开始计数。根据计数器可设定阈值的大小,我们可以把计数器分成8位计数器,16位计数器等,8位计数器可设定的最大阈值为2^8-1即255,16位则为65535。如果我们给定的脉冲信号频率为1M,而给定的计数器阈值为0,那么计数器就会每1us产生1个中断信号,这就为系统计时产生了依据。对于NUCLEO-L476RG来说,它有五个通用计时器,它们可以用来计时、PWM输出等。
除了wait相关的等待函数以外,mbed还提供了三个对象用来完成和时间相关的功能,分别是Timeout,用来在给定的时间执行特定函数;Ticker,用来定时执行特定函数;Timer,用来给系统计时,它们可用的方法描述如下:mbed Timer的应用mbed的Timer对象主要用来计算用户关心的时间间隔,下面是一个简单的示例,可以计算用户按下按钮的时间,主要代码如下:Serial pc(USBTX,USBRX);InterruptIn btn(USER_BUTTON);Timer mytimer;int falltime;int risetime;void fallfunc(){    falltime=mytimer.read_us();}void risefunc(){    risetime=mytimer.read_us();    pc.printf("You press button for %d us \n",risetime-falltime);}int main() {    mytimer.start();    btn.fall(&fallfunc);    btn.rise(&risefunc);    while (1);
}程序运行的结果如下,当然,我们需要理解,任何中断的处理都有一定的延迟时间,所以此结果还是会有一定的误差,但绝对在us级别。You press button for 330410 us You press button for 137603 us You press button for 122679 us You press button for 140683 us

有时候我们需要利用多个Timer来计算不同的时间,这只需要定义多个Timer对象即可:Timer timer_led;Timer timer_serial;DigitalOut led1(LED1);Serial pc(USBTX,USBRX);void task_led(void){    led1=!led1;}void task_serial(void){    pc.printf("Timer passed %d ms \n",timer_serial.read_ms());}int main() {    timer_led.start();    timer_serial.start();    while (1)    {      if (timer_led.read()>0.5)      {            task_led();            timer_led.reset();      }      if (timer_serial.read()>1)      { //test Timer value            task_serial();            timer_serial.reset();      }    }}今天就到这里,mbed Timeout的应用和mbed Ticker的应用下次再继续。

风子 发表于 2015-11-24 12:50:06


Paderboy 发表于 2015-11-24 13:10:20

谢谢分享。。。

dsjsjf 发表于 2015-11-24 21:12:28

顶一下   

lkl0305 发表于 2015-11-24 22:34:07

多谢特派员

安臣 发表于 2015-11-25 08:48:46

感谢分享

yanhaijian 发表于 2015-11-25 10:12:08

学习学习。

飞狼老大 发表于 2015-11-25 10:33:19

前来学习的!支持一个!
页: [1]
查看完整版本: 【NUCLEO-L476RG开发】mbed时钟系统