STM32拥有多个时钟源,我们对最终的系统时钟通过多个预分频器洧粽袄淖配置AHB、高速APB(APB2)和低速APB(APB1)域的频率。AHB和APB2域的最大频率是72MHz,APB1域的梓脶阗擗最大允许频率是36MHz。TIM2挂载在APB1上,TIM1挂载在APB2上。我们按照一般的(通用的定时器的)配置规则配置定时器1,会出现定时不准的情况?那我们应该如何解决呢? 在这里小编大概介绍一下系统时钟,以及定时器的时钟。
工具/原料
STM32中文数据手册
KEil,电脑
时钟配置:
1、打开创建的工程文件,在左边找到启动文件,双击启动文件,找到方框内的内容。程序一般从系统初始化开始,在运行到main里面。
2、单击sysinit函数,按F12调转到函数定义界面,在函数里面有如下图方框的内容。这个函数就是配置时钟的函数。
3、单击上图的SetSysClock函数,按F12调转到函数定义界面,在函数里面有如下图方框的内容。这个函数里面采用了很多宏定义,用于配置不同的系统时钟。我们配置为72Mhz。
4、打开配置72Mhz系统时钟的函数,在函数氇筐塘瓠里面会出现这么一段英文,这段英文的意思就是“配置好了系统时钟,以及HCLK,PCLK1\PCLK2 的时钟”。这个函数里面的代码不详解,自己参照寄存器看。
5、在这里整个系统的时钟已经配置完毕了,我们就可以用时钟驱动各种外设了。GPIO、定时器1的时钟。
定时器1定时不准分析及解决:
1、一般的定时器(2-7),按照如下图的配置就可以正常工作了,但是定时器1是高级定时器,所以他要比其他定时功能更加复杂一点点。
2、我选用的向下计数模式,时序图如下图所示。每次计数值为0时,便产生事件更新中断,进入中断执行翻转LED0的操作。但是高级定时器当中对这个更新事件也进行了计数,当更新事件次数等于设定苒锃巳伢值时才会产生中断信号进入中断。
3、按照上面的这个原理我把,这个计数值设为0,(参照下图所示)就可以跟普通定时器一样,能够准确的定时了。从而控制led0翻转。