imx6ul 12 之GPT精准延时

    科技2026-03-13  4

    一、GPT定时器简介

    以前的延时函数采用空指令来实现,延时不准确且浪费cpu性能。当修改了6ull的主频以后,采用空指令延时函数就不准了。 因此需要一个高精度的延时函数,并且不随着主频的变化而改变。 stm32 使用 SYSTICK 这个硬件定时器来实现高精度延时,因此可以在6ull 里面使用硬件定时器来实现高精度延时。 本次实验使用 6ull 的 GPT 定时器来实现高精度延时。


    GPT 是 32位向上计数器。 GPT定时器具有捕获的功能。 GPT定时器支持比较输出或者中断功能。 GPT具有12位的分频器。 GPT时钟源选择 ipg_clk = 66Mhz ,作为GPT的时钟源。 GPT定时器有两种工作模式,restart和free-run。restart模式下,定时器计数值只能和OCR1相比较,相等的话,就会从0开始重新计时。free-run模式可以使用三个输出比较通道,从0 一直加到 0xffff ffff,然后重新从 0 开始计时。


    GPT_CR: bit0为 GPT 使能位,为0关闭GPT,为1打开GPT bit1确定GPT计数器的初始值,为0表示初始值时上次关闭时的值,为1表示从0 bit6 ~ 8:时钟源的选择,设置为1,选择时钟源为 ipg_clk = 66 Mhz bit9:设置GPT定时器工作模式。为0,restart mode;为1,工作在 free-run mode。这里设置为restart bit15:软件复位,为1处于复位状态,为0不处于GPT_PR: bit11 ~ 0 :表示分频值,可设置 0 ~ 0xfff,对应1分频 和 4096分频GPT_SR: bit2 ~ 0 :也就是OF3 ~ OF1的比较中断标志位 bit4和bit3:分别为输入通道2和1捕获中断标志位 bit5:为1表示溢出发生GPT_IR: 中断使能寄存器:GPT定时器有两个,可产生三种中断:捕获中断,比较中断,溢出中断

    二、GPT定时器使用

    只要你采用了free-run模式,往三个比较寄存器里写了值,并使能了中断,那么在使能了GPT后,就可以运行(一定要在中断处理函数的末尾清除中断标志)。

    Processed: 0.009, SQL: 9