以前的延时函数采用空指令来实现,延时不准确且浪费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 开始计时。
只要你采用了free-run模式,往三个比较寄存器里写了值,并使能了中断,那么在使能了GPT后,就可以运行(一定要在中断处理函数的末尾清除中断标志)。
