热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

STM32F4计时器-计算周期和预分频,并产生1ms延迟

如何解决《STM32F4计时器-计算周期和预分频,并产生1ms延迟》经验,为你挑选了1个好方法。

我使用STM32F407VGT6CubeMX
因此,我从通用计时器开始,但始终陷于预分频和周期值。

基本上我想每隔n(其中n = 1,2,3 ..)ms 生成一个计时器中断并执行一些任务。
公式中有很多变化,可以计算周期和预分摊的值

公式的某些版本是:

TIMupdateFreq(HZ)=时钟/(((PSC-1)*(Period-1))
更新事件= TIM clk /(((PSC + 1)*(ARR + 1)*(RCR + 1))
预分频器=((( (时钟速度)/((周期)/(1 /频率)))+ 0.5)-1)

因此,我的核心时钟运行在,168 MHz但我可以看到定时器连接到APB1 Bus,它正在运行84 MHz

我尝试了一个代码,该代码会产生1 ms的延迟(作者说),在使用该值进行预分频和周期后,我生成了一个代码,该代码也会产生1ms的延迟(直觉-无作用域)。

该代码使用的预分度值为41999,期限为1999。

因此,
PSC-41999
ARR-1999将
其应用于第二个公式

Update Event = TIM clk/((PSC+1)*(ARR+1)*(RCR+1))

Update Event = 84000000/(42000*2000) = 1 (这是1毫秒的延迟吗?)

行,所以我现在想了解如何PSC = 41999Period = 1999选择?它是否纯粹基于假设,如我使用的任何公式中我都必须假设一个变量。如果我想说1.5或2.3或4.9之类的精确计时,如何计算预分频和周期?

编辑

而且,当我使用PSC=41999 and Period =999更新事件值为2时。

Update Event = 84000000/(42000*1000) = 2

但是我的延迟是每秒两次。即500ms

当我使用时PSC=39999 and Period =4199,更新事件值为0.5。

Update Event = 84000000/(40000*4200) = 0.5

和我的延迟2毫秒。

提前致谢



1> berendi - pr..:

TIMupdateFreq(HZ)=时钟/(((PSC-1)*(Period-1))

这显然是错误的。计数器从0到寄存器值(含),总是比寄存器值多一个周期,而不是少一个。

更新事件= TIM clk /(((PSC + 1)*(ARR + 1)*(RCR + 1))

这个比较好,但是通用定时器没有RCR寄存器。您可以假设RCR=0,并*(RCR+1)从公式中省略。

预分频器=((((ClockSpeed)/((period)/(1 /频率)))+ 0.5)-1)

当没有整数解时,这将尝试舍入结果。稍后再讨论。

Update Event = 84000000/(42000*2000) = 1 (这是1毫秒的延迟吗?)

不,这是一秒(1s)延迟或1 Hz频率。

如何PSC = 41999Period = 1999选择?

用简单的公式,

Updatefrequency = TIM clk/((PSC+1)*(ARR+1))

重新排列为

(PSC+1)*(ARR+1) = TIMclk/Updatefrequency

那么您在右侧有一个已知值,但在左侧有两个未知数。最简单的解决方案是将其中之一设置PSC0,并将ARR其右侧值设置为-1。

不幸的是,大多数计时器仅具有16位寄存器,因此当时将不起作用TIMclk/Updatefrequency > 65535双方PSCARR必须在0到65535之间落在你必须找到一个分解满足这些约束。

让我们看一个例子,您希望有2.3秒的延迟。请注意,2.3s是周期,而不是频率,因此您需要将其倒数放入公式中。

(PSC+1) * (ARR+1) = 84000000 / (1 / 2.3) = 84000000 * 2.3 = 193200000

幸运的是,结尾处有很多零,您可以选择例如10000作为预分频器(PSC=9999),然后ARR变为19320-1 = 19319。如果所需的比率不是一个好的整数,则应采用整数分解法,或编写一个小程序以查找所有可能的除数(for(i=0;i<65536;i++) ...)。

也有可能根本没有精确的整数解,然后您仍然可以循环遍历所有可能的预分频器值,并查看哪个误差最小。

Update Event = 84000000/(42000*1000) = 2

但是我的延迟是每秒两次。即500ms

注意尺寸。您在公式中使用频率,将84 MHz输入频率除以某些值,结果为2 Hz。2 Hz频率意味着每秒发生两个事件,因此这些事件确实相距500ms。


推荐阅读
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 有没有一种方法可以在不继承UIAlertController的子类或不涉及UIAlertActions的情况下 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • Todayatworksomeonetriedtoconvincemethat:今天在工作中有人试图说服我:{$obj->getTableInfo()}isfine ... [详细]
  • Asp.net Mvc Framework 七 (Filter及其执行顺序) 的应用示例
    本文介绍了在Asp.net Mvc中应用Filter功能进行登录判断、用户权限控制、输出缓存、防盗链、防蜘蛛、本地化设置等操作的示例,并解释了Filter的执行顺序。通过示例代码,详细说明了如何使用Filter来实现这些功能。 ... [详细]
  • SpringBoot简单日志配置
     在生产环境中,只打印error级别的错误,在测试环境中,可以调成debugapplication.properties文件##默认使用logbacklogging.level.r ... [详细]
  • 微信小程序导航跟随的实现方法
    本文介绍了在微信小程序中实现导航跟随的方法。通过设置导航的position属性和绑定滚动事件,可以实现页面向下滚动到导航位置时,导航固定在页面最上方;页面向上滚动到导航位置时,导航恢复到原始位置;点击导航可以平滑跳转到相应位置。代码示例也给出了具体实现方法。 ... [详细]
  • 本文讨论了在ASP中创建RazorFunctions.cshtml文件时出现的问题,即ASP.global_asax不存在于命名空间ASP中。文章提供了解决该问题的代码示例,并详细解释了代码中涉及的关键概念,如HttpContext、Request和RouteData等。通过阅读本文,读者可以了解如何解决该问题并理解相关的ASP概念。 ... [详细]
  • SpringMVC工作流程概述
    SpringMVC工作流程概述 ... [详细]
  • 【重识云原生】第四章云网络4.8.3.2节——Open vSwitch工作原理详解
    2OpenvSwitch架构2.1OVS整体架构ovs-vswitchd:守护程序,实现交换功能,和Linux内核兼容模块一起,实现基于流的交换flow-basedswitchin ... [详细]
  • 本文介绍了一个Magento模块,其主要功能是实现前台用户利用表单给管理员发送邮件。通过阅读该模块的代码,可以了解到一些有关Magento的细节,例如如何获取系统标签id、如何使用Magento默认的提示信息以及如何使用smtp服务等。文章还提到了安装SMTP Pro插件的方法,并给出了前台页面的代码示例。 ... [详细]
author-avatar
亲亲羊to
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有