七、Systick定时器
定时器:是芯片内部用于计数从而得到时长的一种外设。
定时器定时长短与什么有关???(定时器定时长短与频率及计数大小有关)
定时器频率换算单位:1GHZ=1000MHZ=1000 000KHZ = 1000 000 000HZ
Systick定时器,是一个简单的定时器,对于CM3,CM4内核芯片,都有Systick定时器。常用来做延时,或者实时系统的心跳时钟。这样可以节省MCU资源,不用浪费一个定时器。比如uCOS中,分时复用,需要一个最小的时间戳,一般在STM32+UCOS系统中,都采用Systick做uCOS心跳时钟。
Systick定时器就是系统滴答定时器,一个24 位的倒计数定时器,计到0 时,将从RELOAD 寄存器中自动重装载定时初值。只要不把它在SysTick 控制及状态寄存器中的使能位清除,就永不停息,即使在睡眠模式下也能工作。
一共4个Systick寄存器
CTRL SysTick 控制和状态寄存器
LOAD SysTick 自动重装载除值寄存器
VAL SysTick 当前值寄存器
CALIB SysTick 校准值寄存器
SysTick 控制和状态寄存器---------CTRL
SysTick 重装载数值寄存器- LOAD
SysTick 当前值寄存器- VAL
八、STM32通用定时器
STM32定时器分类:高级控制定时器、通用定时器、基本定时器
各个定时器的分频系数都是1-65536
计数范围这要看对应定时器的位数
高级控制定时器:TIM1 TIM8
通用定时器:TIM2 TIM3 TIM4 TIM5 TIM9 TIM10 TIM11 TIM12 TIM13 TIM14
基本定时器:TIM6 TIM7
挂在APB1下的定时器:TIM2 TIM3 TIM4 TIM5 TIM6 TIM7 TIM12 TIM13 TIM14
挂在APB2下的定时器:TIM1 TIM8 TIM9 TIM10 TIM11
挂在APB1下的定时器时钟频率:42MHZ X 2 = 84MHZ
挂在APB2下的定时器时钟频率:84MHZ X 2 = 168MHZ
通用定时器的计数模式:
通用定时器可以向上计数、向下计数、向上向下双向计数模式。
①向上计数模式:计数器从0计数到自动加载值(TIMx_ARR),然后重新从0开始计数并且产生一个计数器溢出事件。
②向下计数模式:计数器从自动装入的值(TIMx_ARR)开始向下计数到0,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件。
③中央对齐模式(向上/向下计数):计数器从0开始计数到自动装入的值-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数。
通用定时器3配置流程
通用定时器需要添加的库函数文件:stm32f4xx_tim.c
1、能定时器时钟。 RCC_APB1PeriphClockCmd();
2、初始化定时器,配置ARR,PSC。 TIM_TimeBaseInit();
3、启定时器中断,配置NVIC。 NVIC_Init();
4、设置 TIM3_DIER 允许更新中断 TIM_ITConfig();
5、使能定时器。 TIM_Cmd();
6、编写中断服务函数。 TIMx_IRQHandler();