tag 标签: 定时器

相关帖子
相关博文
  • 热度 2
    2020-6-23 14:04
    2260 次阅读|
    0 个评论
    LPTIM操作模式: 1. 连续运行模式: 可以由软件或触发事件启动,一旦运行后则不会主动停止,必须由软件关闭,新的触发事件会被忽略 2. 一次触发模式: 定时器由触发事件启动,当计数值到达ARR值(自动重装载值)时停止,新的触发事件将重启定时器 (例外情况:CFGR:WAVE标志置位后,定时器只能被触发启动一次,后续的触发事件会被忽略) 定时器启动后,但计数值未达到ARR值时,此期间的触发事件会被忽略 LPTIM计数模式: CKSEL=0,COUNTMODE=0:内部时钟计数,每个内部时钟脉冲更新一次计数值 CKSEL=0,COUNTMODE=1:外部信号计数(内部时钟同步),每个内部时钟脉冲对外部信号进行采样并更新计数值,因此外部信号的频率应该低于内部时钟频率,同时内部时钟不应该被分频(即PRESC =000) CKSEL=1,COUNTMODE=X:外部时钟计数,此时定时器不需要内部时钟(也不需要毛刺过滤时) LPTIM编码器模式: LPTIM操作注意点: 1. SNGSTRT/CNTSTRT位必须在定时器使能时写入(即CR:ENABLE位为1时可以写入) 2. 连续运行模式和一次触发模式可以在运行过程中转换,如果当前模式为连续运行模式,置位SNGSTRT将切换至一次触发模式,计数值到达ARR值时,定时器自动停止;如果当前模式为单次触发模式,置位CNTSTRT将切换至连续运行模式,计数值到达ARR值时,定时器自动重启 3. TIMEOUT功能:第一个触发事件启动定时器,接下来的触发事件则复位计数值,重新开始计数 同单脉冲模式,只是最后的保持电平取决于输出极性配置(又WAVPOL位控制) 5. ARR寄存器的值必须大于CMP寄存器的值 6. PRELOAD位控制ARR和CMP寄存器的数据加载时刻,PRELOAD=0时,写操作会被立即执行;PRELOAD=1时,写操作的值在定时器超时时加载(如果定时器已经启动的话);ARROK和CMPOK状态位分别用于确认ARR和CMP寄存器写操作是否执行完成( 未做ARROK和CMPOK判定时的连续写入会导致不可预料的结果 ) 7. CR:ENABLE位置位后,定时器需要2个计数时钟才会被真正启动。CFGR(配置寄存器)和IER(中断使能寄存器)必须在该位为0时才能被修改
  • 热度 2
    2020-4-12 20:29
    2965 次阅读|
    1 个评论
    【富芮坤物联网开发板评测】FR801xH官方Timer驱动代码
    FR80xH芯片内有2个16位定时计数器,支持单周期或者周期模式。定时器框图如下: 可以通过4个寄存器去操作定时器。分别是加载寄存器,计数寄存器,控制寄存器和中断清除寄存器。 FR80xH芯片内存映射如下图 我们可以看到定时器的地址是 0x50002000, 所以我们看到代码中有关定时器的一些定义如下: 定时器寄存器相关定义和定时器定义如下: 这里定义了定时器类型,定时器类型里面包含了 4 个定时器寄存器的相关定义,然后我们就可以通过这个定时器类型 struct timer 操作定时器了。 官方 driver_timer.h 中提供了 7 个函数来操作定时器,分别如下: void timer_run(uint32_t timer_addr); /* 启动定时器, timer_addr 只能是上面定义的 TIMER0 或 TIMER1*/ void timer_stop(uint32_t timer_addr); /* 停止定时器 */ void timer_reload(uint32_t timer_addr); /* 重新加载计数器 */ uint32_t timer_get_load_value(uint32_t timer_addr); /* 获取计数器重载值 */ uint32_t timer_get_current_value(uint32_t timer_addr); /* 获取计数器计数值 */ void timer_clear_interrupt(uint32_t timer_addr); /* 定时器清中断 */ uint8_t timer_init(uint32_t timer_addr, uint32_t count_us, uint8_t run_mode); /* 初始化定时器, count_us 指明周期时间, run_mode 指明定时器运行单周期模式还上周期模式 */ 值得说明的是,官方Demo对定时器的操作是通过系统层的定时器API函数去操作的,官方demo好像也没有开放有关这个系统层定时器操作的相关代码,然后就算是有了这个驱动文件,对于官方的Demo还是建议不要使用这个硬件层的定时器操作函数。希望官方开发系统的相关代码以便分析使用。
  • 热度 4
    2018-11-21 22:56
    3487 次阅读|
    2 个评论
    智能定时器之DIY制作
    DIY& 分享— GravityShare 定时器现在在很多场合都有广泛应用,比如电动车充电有定时充电保护之类、还有一些职能联网定时控制器等。根据之前做的一个曝光灯闪光灯的需求,这次来做一个倒计时的定时器,能够精确控制曝光时间,保证曝光效果的良好。 当然了一个定时器还能兼容其他的需要定时的设备。 那么如何自己做一个定时器呢? G01 定时器 G02 定时器 P01 定时器 播放下面 视频 观看最直接的制作过程 : 点击播放视频 V01 制作过程 图文部分↓ 一、制作准备 1 、效果图 这款定时器设计的功能主要是在倒计时内稳定输出直流电压 +15V ,到计时结束之后停止电压输出。 P02 成品效果图 2 、材料工具准备 1 、塑料外壳 1 个 2 、定时控制器 1 个 3 、输入输出电源接口各 1 个 4 、其他线材工具等等 P03 DIY 材料准备 二、设计原理 1 、原理 根据下面的原理图示可以知道:定时器输入为 220V 交流电源,输入电源经过开关电源之后来到定时控制器,使用的是 4 位的 0.56 英寸数码管作为时间显示, 4 个独立按键作为倒计时时间的设定启动停止等相关操作,蜂鸣器在时间到达时发出提醒声音,最后输出电压为 +15V 直流电源。 P04 原理图示 三、 DIY 过程分享 首先要准备好定时器主要的制作材料,图中分别是开关电源、控制板、输入输出插头以及万用板。 同时还要准备一个大小合适的塑料外壳,这里使用插座的空白面板和底座,主要是这个材料方便易得: P05 塑料盒子 将 8 字型的电源插座安装在塑料盒子原来的空槽,大小刚好合适同时在前面板的左下角开孔,用于安装 USB 插座作为电源输出接口: P06 安装输入插座 调整开关电源的安装位置: P07 开关电源 将 USB 母座焊接到万用板上,同时焊接正负极的连接导线,切割适合的大小,便于安装即可: P08 切割板子 安装 USB 母座,调整好对应位置,热熔胶固定好整个小模块: P09 上胶固定 已固定好的 USB 插座,之后加上热熔胶填充空余的槽位,将各个模块焊接连接起来,焊接好之后测试位置刚刚合适,大小正好: P10 测试位置 上面板根据对应元器件的位置开孔,先开数码管的孔位,接下来继续将按键和蜂鸣器位置的孔位开出来: P11 按键和蜂鸣器孔 合上上面板,整体制作初步完成: P12 合盖效果 通电测试效果完美,最后打上螺丝就可以使用了,至此制作结束。同时附上操作按键标识以及输入输出插头旁边贴上标识: P13 插头标识 四、成品欣赏 已经完成的效果,上电状态,整体看起来非常简洁大方有质感: P14 完结 输入接交流 220V 电源,输出接上之前制作的曝光灯就可以直接使用了,启动倒计时,曝光灯点亮: P15 倒计时 20s 倒计时时间到,输出电压关断,曝光灯熄灭,同时蜂鸣器发出提示: P16 时间到 最后和愤怒的小鸟来一张合影吧: P17 愤怒合影 五、最后有话说 这次 DIY 制作的定时器效果非常好,最小定时时间为 1 秒,符合大多数需要定时的场合使用。 END
  • 热度 6
    2013-9-4 14:32
    483 次阅读|
    0 个评论
      本公司推出一款防**,堵漏洞的单片机,可以很好的保护到您的知识产权, 此单片机兼容51系列,且与51系列内置相似。我们产品的优势: 1.在同样振荡频率下,较之传统的8051芯片它具有运行更快,性能更优越的特性; 2.这些特性包括内置256字节RAM和2个16位定时器/计数器,1个UART和外 部中断INT0和INT1;掉电存储1K EEPROM 3.可兼容8052芯片的16位定时器/计数器(Timer2)。包括适合于程序和数据的62K字节Flash存储器。 4.集成了EUART,SPI等标准通讯模块,还集成了具有内建比较功能的ADC,PWM定时器以及模拟比 较器(CMP)等模块; 5.内建看门狗定时器,采用低电压复位、低电压检测、振荡器失效检测等功能,提供了2种低功耗省电模式; 6.高达32位的密码生成器-1/50亿(1/1G)的**概率; 7.白噪声密码,没有规律可循,加密后原厂也无法**;每颗芯片都有自己的密码,同样的密码不可重用; 8.程序有防盗措施,即使**后获得芯片中的程序也是乱码。 有意者请联系:舒生15002097408   Q:545127433    谢谢!  
  • 热度 13
    2013-5-28 14:50
    1079 次阅读|
    0 个评论
    使用Timer1定时器时,PR1的设置方法   在使用Trmer1精确定时的时候,需要计算PR1的值,使延时的时间正好是我们需要的时间,经过摸索,我找到了下面的计算方法,供大家参考,如果哪位朋友有更好的方法,也请跟帖告诉大家。  PR1=需要延时的时间/预分频数(T1CON.TCKPS)/单指令执行时间  举例如下:  机器在80MHz(40MIPS)速度下运行,可以算出单指令执行时间为1s/40000000=0.025us  预分频数为256(T1CON.TCKPS=11)  现在计算延时100ms时的PR1的值:100*1000/256/0.025=15625=0x3D09  注:时间100ms*1000是为了时间单位统一到us
相关资源