高精度延时

这篇具有很好参考价值的文章主要介绍了高精度延时。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在使用STM32的时候可以使用SYSTICK来实现高精度延时。
I.MX6U没有SYSTICK定时器,但是有GPT定时器来实现高精度延时。

GPT(General Purpose Timer)

GPT定时器是一个32位向上定时器(也就是从0x00000000开始向上递增计数),GPT定时器也可以跟一个值进行比较,当计数器值和这个值相等的话就发生比较事件,产生比较中断。

  1. GPT 定时器有一个 12 位的分频器,可以对 GPT 定时器的时钟源进行分频。
  2. 一个可选时钟源的 32 位向上计数器。
  3. 两个输入捕获通道,可以设置触发方式。
  4. 三个输出比较通道,可以设置输出模式。
  5. 可以生成捕获中断、比较中断和溢出中断。
  6. 计数器可以运行在重新启动(restart)或自由运行(free-run)模式。

高精度延时
ipg_clk_24M、GPT_CLK(外部时钟)、ipg_clk、ipg_clk_32k 和 ipg_clk_highfreq。本例程选择 ipg_clk 为 GPT 的时钟源ipg_clk=66MHz。

高精度延时

  1. 定时器的时钟源。
  2. 12 位分频器,对时钟源进行分频处理,可设置 0~4095,分别对应 1~4096 分频。
  3. 经过分频的时钟源进入到GPT定时器内部32位计数器。
  4. 4和5是GPT的两路输入捕获通道。
  5. 4和5是GPT的两路输入捕获通道。
  6. 三路输出比较中断,当计数器里面的值和输出比较寄存器里面的值相等就会触发输出比较中断。

GPT 定时器有两种工作模式:重新启动(restart)模式和自由运行(free-run)模式,这两个工作模式的区别如下:

  • 重新启动(restart)模式:当GPTx_CR寄存器的FRR位清零的时候GPT工作在此模式。在此模式下,当计数值和比较寄存器中的值相等的话就会清零,然后重新从0x00000000开始向上计数,只有比较通道1才有此模式!向比较通道1的比较寄存器写入任何数据都会复位GPT计数器。对于其他两路比较通道(通道2,3),当发生比较事件以后不会复位计数器。
  • 自由运行(free-run)模式:当 GPTx_CR(x=1,2)寄存器的 FRR 位置 1 时候 GPT 工作在此模式下,此模式适用于三个所有比较通道,当比较事件发生后并不会复位计数器,而是继续计数,直到计数值为0xffffffff,然后重新回滚到0x00000000.

GPT定时器的输出比较寄存器GPTx_OCR,每个输出比较通道对应一个输出比较寄存器,因此一个GPT定时器有三个OCR寄存器,它们的作用是相同的。

定时器实现高精度延时原理

高精度延时函数的实现要借助硬件定时器,本章使用GPT实时器来实现高精度延时。
如果设置GPT定时器的时钟源为ipg_clk=66MHz,设置66分频,那么进入GPT定时器的最终时钟频率就是1MHz,周期为1us。
GPT的计数器每计一个数就表示“过去”了1us。如果计10个数就表示过去了10us。通过读取寄存器GPTx_CNT中的值就知道计数个数,比如现在要延时100us,那么进入延时函数以后记录下寄存器GPTx_CNT中的值为200,当GPTx_CNT中的值为300的时候就表示100us过去了,也就是延时结束。

GPTx_CNT是个32位寄存器,如果时钟为1MHz,GPTx_CNT 最多可以实现0XFFFFFFFFus=4294967295us≈4294s≈72min。
也就是说72分钟以后GPTx_CNT 寄存器就会回滚到 0X00000000,也就是溢出,需要在延时函数里面处理溢出的情况。文章来源地址https://www.toymoban.com/news/detail-432125.html

到了这里,关于高精度延时的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 国民技术N32_MCU ADC如何获取高精度采样数据

    国民技 术 微控制器内置最多四个高级 12 位 ADC    (取决于产品系列) ,具有校准功能,用于提高环境条件   变 化时的 ADC   精度。 在涉及模数转 换的应用中,   ADC   精度会影响整体的系统质量和效率。为了提高此精度,必须了解与 ADC 相 关 的误差以及影响它们的参数。

    2024年02月09日
    浏览(43)
  • 基于DSP+FPGA+ADS1282支持32Bit高精度数据采集方案(一)

    3.1 系统需求分析 3.1.1 系统功能设计要求 本硬件处理平台的主要任务有三类,一是数据采集,包括采集惯性测量元件 的输出信号,接收外部系统校正信息,如 GPS 信息等;二是数据处理与计算,包 括惯性测量元件的误差补偿、初始对准、导航参数解算和在线校正滤波等;三是

    2024年02月01日
    浏览(51)
  • 基于DSP+FPGA+ADS1282支持32Bit高精度数据采集方案(二)模拟电路设计

    如图 4.1 所示是系统硬件系统的信号框图,数字信号处理板上的主要核心是 两个处理芯片,即 FPGA 和 DSP ,其中 FPGA 主要作用是做 DSP 和外围接口的 桥梁及数据预处理, DSP 做为数据解算核心。 FPGA 通过各种的数据总线接收外部设备传输过来的数据,并进行打包处理 以及其他

    2024年02月02日
    浏览(37)
  • 基于DSP+FPGA+ADS1282支持32Bit高精度数据采集方案(三)系统性能测试

    系统性能分析与测试 本章将首先对系统电路的噪声和温漂进行分析,而后对采集系统的性能进行 测试,并对测试数据进行分析。 5.1 高精度 AD 转换电路噪声和温漂分析 5.1.1 电阻噪声与温漂 1 、电阻的噪声 电阻是一种噪声源,其严重程度取决于电阻值、温度、施加的电压和电

    2024年02月01日
    浏览(78)
  • 20kV高精度可调高压稳压测试电源的学习与使用

    一:应用范围 A : 二极管反向耐压测试 B : 二极管反向漏电流测试 C : 高压电容耐压测试 D : 玻璃釉电阻非线性性能测试 E :氙灯击穿电压测试 F : 材料耐压测 试 二、特点 高精度恒流恒压高压输出源 它拥有0~ 20k V的电压输出能力 , 0.005% 的电压分辨率精度 , 0.1uA 的电 流分辨率精度

    2024年02月11日
    浏览(29)
  • 冰箱主控 32位MCU,多通道、高精度的AD采样配合温度传感器,实现冰箱各温室的精确控温;低功耗设计

    概览 小华高性价比32位MCU,多通道、高精度的AD采样配合温度传感器,实现冰箱各温室的精确控温;低功耗设计,绿色低碳、节能环保;模块化设计,充分利用丰富的通讯接口,使主控板、显示板和驱动板灵活搭配,设计方便。 方案特点 48MHz32bit ARM Cortex-M0+内核 多种低功耗模

    2024年04月28日
    浏览(33)
  • (基础算法)高精度加法,高精度减法

    什么叫做高精度加法呢?包括接下来的高精度减法,高精度乘法与除法都是同一个道理。正常来讲的话加减乘除,四则运算的数字都是整数,也就是需要在int的范围之内,但当这个操作数变得非常\\\"大\\\"的时候( 其实就是一个字符串,比方说有一个数是20位,如果用整数视角来

    2024年02月01日
    浏览(39)
  • 【AI工具】 一款多SOTA模型集成的高精度自动标注工具(直接安装使用,附源码)

    高精度自动标注工具简介及其特性 标注工具的安装 开启自动标注 X-AnyLabeling 是一款全新的交互式自动标注工具,其基于AnyLabeling进行构建和二次开发,在此基础上扩展并支持了许多的模型和功能,并借助Segment Anything和YOLO等主流模型提供强大的 AI 支持。无须任何复杂配置,下

    2024年02月08日
    浏览(38)
  • 高精度加法(含代码)

    例如: 1111111111111+9, 列成 竖式 , 先算个位, 1 + 9 = 10 , 满 10 , 向十位进 1 。 接下来, 处理 进位 。 十位: 1+1=2 - 2 百位: 无进位, 直接照抄. 1 - 1 千位: 1 - 1 万位: ... ...: ... 最高位: 1 - 1 最终结果: 所以, 1111111111111+ 9 = 1111111111120 1111111111111+8888888888889, 这个算式变成了 高精度 + 高精度

    2024年02月06日
    浏览(33)
  • C++高精度问题

    C++中int不能超过2^31-1,最长的long long也不能超过2^63-1,所以我们在题目中如果碰到了很长很长的数,并且需要进行大数运算时,就需要高精度存储。 由于int和long long的限制,我们要想存放很长的数就需要利用数组存储,C++中可以利用STL中的vector容器存储 读取:  由于数据很大,

    2024年01月24日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包