stm32笔记:Systick系统滴答定时器
2016-04-11 00:00
399 查看
摘要: STM32f10X 的Systick系统滴答定时器的使用
Systick :系统心跳定时器,提供系统节拍
裸机程序中可作为独立的延时定时器
一:用途
1.产生操作系统的时钟节拍
2.便于不同处理器之间程序移植
SysTick定时器被捆绑在NVIC中,异常号15
3.作为一个闹铃测量时间用于测量时间,
但当处理器在调试期间被喊停(halt)时,则SysTick定时器亦将暂停运作
二:时钟树
以AHB时钟或者AHB/8作为运行时钟。
三:寄存器
它有四个寄存器
STK_CSR, 0xE000E010 -- 控制寄存器
STK_LOAD, 0xE000E014 -- 重载寄存器
STK_VAL, 0xE000E018 -- 当前值寄存器
STK_CALRB, 0xE000E01C -- 校准值寄存器
stm32的时钟源
选择外部时钟源时,则Systick时钟为HCLK /8
选择内核时钟源时,则Systick时钟为HCLK
延时原理
systick定时器是24位的递减计数器,设定初值并使能它后,脉冲计数值被保存到当前值寄存器(STK_VAL)
它会每个系统时钟周期计数器减1,计数到0 时,触发中断,将从RELOAD 寄存器中自动重装载定时初值到STK_VAL。
只要不把它在SysTick控制及状态寄存器中的使能位清除,就永不停息.
四:代码
AHB时钟1/72 000 000 ,
初始化:初始化已经把嘀嗒定时器打开了,为了可控,代码中关闭了定时器。
SysTick->CTRL &= SysTick_CTRL_ENABLE_Msk;主程序调用打开嘀嗒。
}[/code]
中断:
stm32f10x_it.c中的接口代码
Systick :系统心跳定时器,提供系统节拍
裸机程序中可作为独立的延时定时器
一:用途
1.产生操作系统的时钟节拍
2.便于不同处理器之间程序移植
SysTick定时器被捆绑在NVIC中,异常号15
3.作为一个闹铃测量时间用于测量时间,
但当处理器在调试期间被喊停(halt)时,则SysTick定时器亦将暂停运作
二:时钟树
以AHB时钟或者AHB/8作为运行时钟。
三:寄存器
它有四个寄存器
STK_CSR, 0xE000E010 -- 控制寄存器
STK_LOAD, 0xE000E014 -- 重载寄存器
STK_VAL, 0xE000E018 -- 当前值寄存器
STK_CALRB, 0xE000E01C -- 校准值寄存器
stm32的时钟源
选择外部时钟源时,则Systick时钟为HCLK /8
选择内核时钟源时,则Systick时钟为HCLK
延时原理
systick定时器是24位的递减计数器,设定初值并使能它后,脉冲计数值被保存到当前值寄存器(STK_VAL)
它会每个系统时钟周期计数器减1,计数到0 时,触发中断,将从RELOAD 寄存器中自动重装载定时初值到STK_VAL。
只要不把它在SysTick控制及状态寄存器中的使能位清除,就永不停息.
四:代码
AHB时钟1/72 000 000 ,
初始化:初始化已经把嘀嗒定时器打开了,为了可控,代码中关闭了定时器。
SysTick->CTRL &= SysTick_CTRL_ENABLE_Msk;主程序调用打开嘀嗒。
void SysTick_Init(void) { /* SystemFrequency / 1000 1ms中断一次 * SystemFrequency / 100000 10us中断一次 * SystemFrequency / 1000000 1us中断一次 */ // if (SysTick_Config(SystemFrequency / 100000)) // ST3.0.0库版本 if (SysTick_Config(SystemCoreClock / 100000)) // ST3.5.0库版本 { /* Capture error */ while (1); } // 关闭滴答定时器 SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk; [code=cpp] // 打开闭滴答定时器 //SysTick->CTRL &= SysTick_CTRL_ENABLE_Msk;
}[/code]
中断:
stm32f10x_it.c中的接口代码
void SysTick_Handler(void) { TimingDelay_Decrement(); }
void TimingDelay_Decrement(void) { if (TimingDelay != 0x00) { TimingDelay--; } }裸机中嘀嗒并不是一直开启的,延时可以这样做。
void Delay_us(__IO u32 nTime) { TimingDelay = nTime; // 使能滴答定时器 SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; while(TimingDelay != 0); }
相关文章推荐
- STM32 IO口双向问题
- 使用CMake来构建STM32工程
- SysTick 基本操作,中断控制方法
- Keil STM32工程环境搭建
- stm32之RTC
- STM32串口操作相关事项
- 【eBox生态圈】连载一:简化STM32的编程之eBox生态圈
- STM32 SPI工作在主模式时用DMA方式接收数据
- STM32 配置定时器让引脚输出PWM波形
- stm32笔记:GPIO的简介
- [嵌入式裸机课程]Cortex-M3开发实训班
- 开源硬件:最好编程的STM32开发板
- 第一篇==STM32吧
- stm32的1602操作显示
- STM32 UART DMA实现未知数据长度接收(转自amoBBs)
- STM32F429 LTDC学习笔记1
- stm32学习笔记---入门环境搭建及开发板的选用
- stm32f407使用OV7725使用迭代阈值法进行图像二值化,图像分割
- stm32中断服务函数的机制
- pc寄存器与可寻址空间