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

查看: 2567|回复: 7

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

[复制链接]

76

主题

5715

回帖

4

蝴蝶豆

论坛元老

最后登录
2020-10-15
发表于 2015-11-24 12:15:10 | 显示全部楼层 |阅读模式
本帖最后由 党国特派员 于 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的应用下次再继续。

评分

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

查看全部评分

<
回复

使用道具 举报

33

主题

1243

回帖

0

蝴蝶豆

论坛元老

最后登录
2019-3-9
发表于 2015-11-24 12:50:06 | 显示全部楼层
谢谢分享.png
回复 支持 反对

使用道具 举报

47

主题

3404

回帖

30

蝴蝶豆

版主

最后登录
2020-12-7
发表于 2015-11-24 13:10:20 | 显示全部楼层
谢谢分享。。。
回复 支持 反对

使用道具 举报

41

主题

2476

回帖

282

蝴蝶豆

论坛元老

最后登录
2020-12-8
发表于 2015-11-24 21:12:28 | 显示全部楼层
顶一下   
回复 支持 反对

使用道具 举报

40

主题

1595

回帖

1

蝴蝶豆

论坛元老

最后登录
2018-7-23
发表于 2015-11-24 22:34:07 | 显示全部楼层
多谢特派员
回复 支持 反对

使用道具 举报

10

主题

379

回帖

0

蝴蝶豆

高级会员

最后登录
1970-1-1
发表于 2015-11-25 08:48:46 | 显示全部楼层
感谢分享
回复 支持 反对

使用道具 举报

10

主题

1651

回帖

0

蝴蝶豆

论坛元老

最后登录
2020-2-15
发表于 2015-11-25 10:12:08 | 显示全部楼层
学习学习。
回复 支持 反对

使用道具 举报

1

主题

115

回帖

0

蝴蝶豆

高级会员

最后登录
2017-10-11
发表于 2015-11-25 10:33:19 | 显示全部楼层
前来学习的!支持一个!
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版