stm32实现定时、延时一般通过调用CMSIS函数SysTick_Config实现。例如我们设置1ms中断如下:
/**************************************
**转载请注明:http://tedeum.iteye.com**
***************************************/
if (SysTick_Config(SystemCoreClock / 1000))
{
/* Capture error */
while (1);
}
这时,每过1ms就会调用中断,可以在中断中进行定时逻辑处理:
void SysTick_Handler(void)
{
//进行相应的定时逻辑处理
}
在此基础上,我们就可以进行延时,频率处理,计时的功能的开发:
一、延时,我们首先定义一个延时时间,然后调用延时函数后,延时时间在SysTick中断中减一,为0时跳出:
//延迟时间计数器
__IO uint32_t TimingDelay = 0;
//SysTick中断处理函数
void SysTick_Handler(void)
{
//每次SysTick中断减一
if (TimingDelay != 0x00)
{
TimingDelay--;
}
}
//延时函数
void Delay(__IO uint32_t nTime)
{
//设置终端延时计数器
TimingDelay = nTime;
//为0时延时等待结束
while(TimingDelay != 0);
}
二、计时,设置一个sysTickCount,两个sysTickCount的差就是时长:
//tick计数器,48天后重复,如用于四轴不用处理
static volatile uint32_t sysTickCount = 0;
//SysTick中断处理函数
void SysTick_Handler(void)
{
//每次SysTick中断加1
sysTickCount++
}
//获取当前计数
uint32_t millis(void)
{
return sysTickCount;
}
//使用例子
uint32_t t1 = millis();
//do somethin
uint32_t t2 = millis();
uint32_t t3 = t2 - t1;
三、频率处理,按上面没1ms处理1次,频率= 1000(每秒次数)/每次间隔时间,在中断处理函数中如下:
void SysTick_Handler(void)
{
//每次SysTick中断加1
sysTickCount++
//500hz
if ((sysTickCount % 2) == 0) {
//do something 500hz
}
//250hz
if ((sysTickCount % 4) == 0) {
//do something 200hz
}
//200hz
if ((sysTickCount % 5) == 0) {
//do something 200hz
}
//100hz
if ((sysTickCount % 10) == 0) {
//do something 200hz
}
//50hz
if ((sysTickCount % 20) == 0) {
//do something 200hz
}
//20hz
if ((sysTickCount % 50) == 0) {
//do something 200hz
}
//10hz
if ((sysTickCount % 100) == 0) {
//do something 200hz
}
//5hz
if ((sysTickCount % 200) == 0) {
//do something 200hz
}
}
以上就是SysTick一些基本应用的笔记。
/************************************************* *****转载请注明出处:http://tedeum.iteye.com****** **************************************************/

本文详细介绍了STM32中利用CMSIS函数SysTick_Config实现定时、延时和频率处理的方法,包括如何设置中断进行定时逻辑处理、实现延时函数、计时功能开发以及频率处理的基本应用。
780

被折叠的 条评论
为什么被折叠?



