注:适用于stm32f10x系列
滴答定时器说明
- 系统/滴答定时器,24位的倒计数定时器
- 寄存器:
寄存器 | 定义与解释 |
CTRL | 控制和状态寄存器 |
RELOAD | 自动重装载寄存器 |
VAL | 当前值寄存器 |
CALIB | 校准值寄存器 |
(1)状态寄存器CTRL:
第16位:可作为一个判断时间的标志位,该位为1时,表示滴答定时器的一个周期结束,注意,该位的读取清零特性
第2位:配置滴答定时器时钟源,即频率,0--外部时钟源--HCLK/8--9000 000--跳9下为1us;1--内核时钟--HCLK--72000 000--跳72下为1us。
第0位:使能位
(2)当前值寄存器(val):
(3)重装载数值寄存器-RELOAD
库函数
void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource);
作用:选择时钟源,即设置滴答定时器的状态寄存器CTRL的CLKSOURCE(第2位)的值,在库中的具体实现如下:
可以看出库函数中的实现也是直接对CTRL寄存器进行操作的
实例
void Sys_Clock_Config(void){
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
}
//封装延时为1微妙的延时函数,参数us范围<186万
void delay_us(u32 us){
u32 time;
SysTick->VAL=0;//清除【当前值寄存器val】,使其置0,同时清除【CTRL】标志位,防止干扰
SysTick->LOAD=9*us;//【重装载数值寄存器】赋初始值,从此值开始倒数
SysTick->CTRL |= 0x1<<0;//第0位置1,使能,开启定时器
do{
time = SysTick->CTRL;
}while((!(time& 0x1<<16))&&(time & 0x1) );
SysTick->CTRL &=~(0x1<<0);
SysTick->VAL=0;
}
注:Systick通常用于中断方面的定时,故而与【NVIC嵌套向量中断配置器】绑定,所以其相关库函数在misc.h中查找