在之前的32单片的项目开发中,对于程序模块的使用和配置,主要借助于各个开发套件的demo,在此基础上进行相关的修改,往往对于较为复杂的设计,可能设计较为详细的寄存器设置,容易出错,而且移植也相对较为麻烦。cubemx以一种可视化的模块配置,配置简单,一目了然,给人很清新的感觉,极大的方便开发人员的工作。以下是我在初次使用该软件对定时器的配置思路,希望能对学习着起到一定的参考作用。 这里我们设计定时器为1ms的例子,只做重点部分的讲解。下图为定时器的工作框图,包含了定时器所涉及到的各个寄存器和功能说明,由图可以知基本定时器主要下面三个寄存器构成。

  1. 预分频器寄存器(TIMx_PSC)
  2. 自动重载寄存器(TIMx_ARR)
  3. 计数器寄存器(TIMx_CNT)

预分频器 (TIMx_PSC)为多少个SK_PSC脉冲计数一次,计数器寄存器 (TIMx_CNT)存储的是当前的计数值。如预分频器的值为1(预分频寄存器默认为0,为不分频),则为两个脉冲计数一次。即为二分频。如果要10000分频,则预分频器的值为1000-1。

                                                        基本定时器的基本框图            

cubemx配置定时器回调函数_框图

 

1,选择并打开定时器:

cubemx配置定时器回调函数_cubemx配置定时器回调函数_02

       通过掌握了定时器的工作原理之后, 对接下来的该做什么就有了较为清晰的认识了。如图所示,由于只作为普通定时器的使用,所以对于其他定时器的功能可以不做设置,具体使用需根据芯片用户手册做相关操作,比如相对复杂的主从模式设置,触发源选择,输入捕捉和输出比较等等,通过该图可一目了然,思路清晰,非常方便。

2,配置定时器时钟:

cubemx配置定时器回调函数_框图_03

 

cubemx配置定时器回调函数_定时器_04

 

cubemx配置定时器回调函数_定时器_05

 3.配置定时器:

cubemx配置定时器回调函数_寄存器_06

       这里配置的是定时器产生中断的频率,然后再跟据频率与时间的关系推出定时的时间。Prescaler定时器预分频的设置,时钟源经过该分频器才是定时器时钟,它设定TIMx_PSC寄存器的值,该寄存器的可设定范围是1~65535,实现1至65535分频,例如设置71,得到的分频时钟频率就是1MHz。CouterMode计数方向寄存器在基本定时器的应用中只有向上计数,TIMx_CNT只能从0开始递增,无需初始化。Period周期寄存器可设置值为0~65535。Period设置为1000-1。定时器产生中断频率为:1MHz/1000=1KHz。所以定时器频率为 f = 72M / Prescaler / Period = 72000 000 / 72 /1000 = 1000Hz。定时时间T = 1 / f 则: 1s / 1000Hz = 1000 000us / 1000Hz = 1000us =1ms。索性把定时器中断时间的公式也给大家回顾下:

定时器中断时间:(TIM_Prescaler+1)*(TIM_Period+1)/fclk(总线频率)

4.生成代码:

cubemx配置定时器回调函数_框图_07

 点击生成工程文件,选择适合路径,keil版本和库,完成最后一步。

cubemx配置定时器回调函数_寄存器_08

          最后在说一句,在调试程序的时候,需要注意自己的调试工具,是SWD还是jlink,CubeMX默认是stlink的调试模式,若换成jlink时,需要使能该模式,同时禁止swd。下图中是生成完代码之后,我做的改动,根据自己的需求合理使用这两句代码。

cubemx配置定时器回调函数_寄存器_09