你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
党国特派员 提问时间:2015-11-24 12:15 /
本帖最后由 党国特派员 于 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,用来给系统计时,它们可用的方法描述如下:
QQ图片20151124110453.png
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的应用下次再继续。

评分

参与人数 1 ST金币 +15 收起 理由
沐紫 + 15

查看全部评分

收藏 2 评论7 发布时间:2015-11-24 12:15

举报

7个回答
风子 回答时间:2015-11-24 12:50:06
谢谢分享.png
Paderboy 回答时间:2015-11-24 13:10:20
谢谢分享。。。
埃斯提爱慕 回答时间: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
前来学习的!支持一个!

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版