定时器

2019年9月12日星期四(STM32)

♀尐吖头ヾ 提交于 2019-11-29 19:26:26
一 . 定时器 1.PWM PWM脉冲宽度调制(Pulse Width Modulation)是通过微处理器的数字输出(高低电平)来对模拟电路进行控制的一种非常有效的技术,在测量,通信和功率控制等领域被广泛使用 占空比 - 在规定时间内,有效电平所占的比例 2.stm32 通用定时器有 PWM 功能 通用定时器可以和GPIO口配合,通过GPIO输出PWM波形,定时器的周期就是PWM波的周期,PWM波的电平改变时间通过定时器的比较计数器来决定 PWM波的波形由周期(定时器周期),极性(配置),占空比(比较计数器)共同决定 PWM波是通过GPIO输出,属于GPIO的复用输出功能,需要配置GPIO的复用映射(选择对应的复用功能) 3.GPIO 的功能复用 参考手册中所有的GPIO都与16个复用功能,通过寄存器配置对应的复用功能,但是实际上芯片每个IO口的复用功能没有这么多,要根据原理图(具体芯片手册)来查询每隔IO口有哪些复用功能,根据查询结果去配置寄存器 4.PWM 定时器编程方法 (LED1 呼吸灯为例 ) ( 1 )开启定时器 14 和 GPIOF 的时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14, ENABLE); .... ( 2 )初始化 PF9 为复用输出功能 GPIO_Init(); //GPIO_InitStruct

高级定时器-setTimeout()、setInterval()、链式setTimeout()

☆樱花仙子☆ 提交于 2019-11-29 17:45:54
使用 setTimeout()和 setInterval()创建的定时器可以用于实现有趣且有用的功能。执行时机是不能保证的,因为在页面的生命周期中,不同时间可能有其他代码在控制 JavaScript 进程。在页面下载完后的代码运行、事件处理程序、Ajax 回调函数都必须使用同样的线程来执行。实际上,浏览器负责进行排序,指派某段代码在某个时间点运行的优先级。有关于js的单线程请点击: 浏览器的多进程 可以把 JavaScript 想象成在时间线上运行的。当页面载入时,首先执行是任何包含在<script>元素中的代码,通常是页面生命周期后面要用到的一些简单的函数和变量的声明,不过有时候也包含一些初始数据的处理。在这之后,JavaScript 主线程将等待更多代码执行。例如,当点击某个按钮时,onclick 事件处理程序会立刻执行,只要 JavaScript 主线程处于空闲状态。这样一个页面的时间线类似如图 除了JavaScript 主线程外,还有一个需要在进程下一次空闲时执行的代码队列。随着页面在其生命周期中的推移,代码会按照执行顺序添加入队列。例如,当某个按钮被按下时,它的事件处理程序代码就会被添加到队列中,并在下一个可能的时间里执行。当接收到某个 Ajax 响应时,回调函数的代码会被添加到队列。在 JavaScript 中没有任何代码是立刻执行的,但一旦主线程空闲则尽快执行。

SylixOS定时器测试误差分析

元气小坏坏 提交于 2019-11-29 14:38:41
测试模型 1.1 测试流程 图 1.1 运行流程 如图 1.1所示为测试代码运行流程,通过GPIO拉高到拉低的时间来判断定时器的精准度。 1.2 测试方法 1.2.1 测试模型 利用ZYNQ内部私有定时器,设置定时时间250μs并绑定中断。在中断服务程序中拉高GPIO,下一次进入中断服务程序时拉低GPIO并且发送二进制信号量。在应用程序中创建高优先级任务接收二进制信号量并且模拟负载,创建10个中优先级任务模拟负载,连接示波器测量时间。 1.2.2 测试干扰项 其他不同优先级的中断; 其他负载程序; 二进制信号量; 1.3 测试结果 程序运行时会产生如图 1.2所示波形。 图 1.2 正常波形 使用示波器抓波功能,如图 1.3图 1.4所示抓取电平拉低与拉高的时间间隔,经过12小时抓取小于242μs的的波形未出现,经过12小时抓取大于258μs的波形未出现。 图 1.3 抓取小于242μs波形 图 1.4 抓取大于258μs波形 测试结果可以看到误差范围在242μs到258μs之间,所以误差大小为±8μs。 误差分析 从程序运行流程来看,到达定时时间250μs后: ○1中断产生; ○2响应中断服务程序; ○3拉GPIO; (一) 如果到达250μs定时时间时,中断产生之前发生系统关中断,则中断无法响应;SylixOS最大关中断时间7μs;此时则可能产生误差; (二)

Python的定时器与线程池

本小妞迷上赌 提交于 2019-11-29 12:34:21
定时器执行循环任务: 知识储备   Timer(interval, function, args=None, kwargs=None) interval ===》 时间间隔 单位为s function ===》 定制执行的函数 使用threading的 Timer 类 start() 为通用的开始执行方法 cancel ()为取消执行的方法 普通单次定时执行 from threading import Timer import time # 普通单次定时器 def handle(): print("普通单次定时器 函数被执行"); t1=Timer(interval=1,function=handle); t1.start(); 定时循环执行 from threading import Timer import time # 循环定时器 def loop_handle(): print("循环定时器定时器 函数被执行"); global t2; t2=Timer(interval=1,function=loop_handle); t2.start(); t2=Timer(interval=1,function=loop_handle); t2.start(); time.sleep(5);# 对主线程停止5s; t2.cancel(); # t2 在主main 线程阻塞5s

Pyboard基础功能---定时器

こ雲淡風輕ζ 提交于 2019-11-29 10:20:22
定时器 定时器是嵌入式系统中最基本的功能之一,它除了可以实现定时器功能外,还能够实现延时、PWM输出、波形发生器、舵机控制、节拍器、周期唤醒、自动数据采集等功能。在MicroPython中,很多函数的功能也依赖定时器。 1.获取Timer类里面的方法: >>> help(pyb.Timer) object <class 'Timer'> is of type type init -- <function> deinit -- <function> channel -- <function> counter -- <function> source_freq -- <function> freq -- <function> prescaler -- <function> period -- <function> callback -- <function> UP -- 0 DOWN -- 16 CENTER -- 32 PWM -- 0 PWM_INVERTED -- 1 OC_TIMING -- 2 OC_ACTIVE -- 3 OC_INACTIVE -- 4 OC_TOGGLE -- 5 OC_FORCED_ACTIVE -- 6 OC_FORCED_INACTIVE -- 7 IC -- 8 ENC_A -- 9 ENC_B -- 10 ENC_AB -- 11 HIGH -

定时器和计时器

心已入冬 提交于 2019-11-29 10:15:35
调度:setTimeout和setInterval 我们可能决定不立即执行某个功能,但在某个时间之后执行。 这叫做“安排一个电话”。 它有两种方法: setTimeout 允许我们在一段时间后运行一次函数。 setInterval 允许我们重复运行一个函数,从时间间隔开始,然后以该间隔连续重复。 这些方法不是JavaScript规范的一部分。 但是大多数环境都有内部调度程序并提供这些方法。 特别是,它们在所有浏览器和Node.js中都受支持。 的setTimeout 语法: let timerId = setTimeout(func|code, [delay], [arg1], [arg2], ...) 参数: func|code 函数或要执行的代码串。 通常,这是一个功能。 由于历史原因,可以传递一串代码,但不建议这样做。 delay 运行前的延迟,以毫秒(1000毫秒= 1秒)为单位,默认为0。 arg1 , arg2 ... 该函数的参数(IE9中不支持) 例如,此代码 sayHi() 在一秒后 调用 : function sayHi() { alert('Hello'); } setTimeout(sayHi, 1000); 有参数: function sayHi(phrase, who) { alert( phrase + ', ' + who ); }

04.前端之BOM和DOM

我是研究僧i 提交于 2019-11-29 09:52:48
前戏   到目前为止,我们已经学过了JavaScript的一些简单的语法。但是这些简单的语法,并没有和浏览器有任何交互。   也就是我们还不能制作一些我们经常看到的网页的一些交互,我们需要继续学习BOM和DOM相关知识。   JavaScript分为 ECMAScript,DOM,BOM。   BOM(Browser Object Model)是指浏览器对象模型,它使 JavaScript 有能力与浏览器进行“对话”。   DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。   Window对象是客户端JavaScript最高层对象之一,由于window对象是其它大部分对象的共同祖先,在调用window对象的方法和属性时,可以省略window对象的引用。例如:window.document.write()可以简写成:document.write()。 BOM window对象      看上面的例子你会发现,name直接封装到了window对象上,了解一下就可以了。   所有浏览器都支持 window 对象。它表示浏览器窗口。   **如果文档包含框架(frame 或 iframe 标签),浏览器会为 HTML 文档创建一个 window 对象,并为每个框架创建一个额外的 window 对象(了解)。*   *

android之几种定时器实现

谁都会走 提交于 2019-11-29 08:54:38
在android中,经常用到的定时器主要有以下几种实现: 一、采用Handler与线程的sleep(long )方法 二、采用Handler的postDelayed(Runnable, long) 方法 三、采用Handler与timer及TimerTask结合的方法。 详细介绍: 一、采用Handle与线程的sleep(long )方法 Handler主要用来处理接受到的消息。这只是最主要的方法,当然Handler里还有其他的方法供实现,有兴趣的可以去查API,这里不过多解释。 1、定义一个Handler类,用于处理接受到的Message. Handler handler = new Handler() { public void handleMessage(Message msg) { //要做的事情 super.handleMessage(msg); } }; 2、新建一个实现Runnable接口的线程类。如下: public class MyThread implements Runnable{ @Override public void run() { // TODO Auto-generated method stub while (true) { try { Thread.sleep(10000);//线程暂停10秒,单位毫秒 Message message=new

读书笔记

会有一股神秘感。 提交于 2019-11-29 08:39:43
在JavaScript中,定时器是一个经常被误用且不被众人所知的特性,但如果能在复杂应用程序中正确应用定时器的话,就会给开发人员带来许多好处。 我们说的定时器在js中使用,但没有说它是js自身的一个功能,它是宿主环境提供的,如果我们在非浏览器环境中使用js,很可能定时器就不存在了。比如我们在Rhino中要使用线程。 大多数浏览器允许setTimeout和setInterval混用,但如果不确定还是成对的使用。 setInterval的回调如果到期了被阻塞,有时候会被作废掉的。 如果无法立即执行定时器,这个定时器会被推迟到下一个可以用的执行时间点上,如果一直被延迟,到最后,interval间隔定时器可能会无延迟执行,并且同一个Interval处 理程序的多个实例不能同时进行排队。 setTimeout和setInterval在触发周期的定义上是完全不同的。 同一个页面最好使用一个定时器,用一个中央定时器控制。 如何获取display:none的元素的宽高? 用忍者技巧: 第一步:将display设置成block 第二步:将visibility设置为hidden 第三步:获取元素尺寸 第四步:恢复之前属性 转载于:https://my.oschina.net/u/1792175/blog/598008 来源: https://blog.csdn.net/chuomu8273

python定时器

て烟熏妆下的殇ゞ 提交于 2019-11-29 08:33:34
#-*-coding:utf-8 -*- __author__ = 'Administrator' import os,threading,time curTime=time.strftime("%Y-%M-%D",time.localtime())#记录当前时间 execF=False ncount=0 def execTask(): #具体任务执行内容 print("execTask executed!") def timerTask(): global execF global curTime global ncount if execF is False: execTask()#判断任务是否执行过,没有执行就执行 execF=True else:#任务执行过,判断时间是否新的一天。如果是就执行任务 desTime=time.strftime("%Y-%M-%D",time.localtime()) if desTime > curTime: execF = False#任务执行执行置值为 curTime=desTime ncount = ncount+1 timer = threading.Timer(5,timerTask) timer.start() print("定时器执行%d次"%(ncount)) if __name__=="__main__": timer =