一、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后,就可以运行(一定要在中断处理函数的末尾清除中断标志)。