栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

系统滴答定时器

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

系统滴答定时器

  • SysTick是一个24位定时器,属于Corte-M4内核中的一个外设,类似NVIC。
  • 一个周期定时器,用于提供时间基准,多为操作系统所使用,常用于对时间要求严格的情况。
  • SysTick定时器一次最多可以计数2^24(24bit)个时钟脉冲,这个脉冲计数值保存在当前计数值寄存器STK_VAL(Systick current value register)中,只能向下计数,也就是倒计数,每接收到一个时钟脉冲(CPU主频),STK_VAL的值就会向下-1,当减到0时,硬件会自动将重装载寄存器STK_LOAD(可以设定,和STK_VAL初始值相等)中保存的数值加载到STK_VAL,使其重新计数。并且,系统滴答定时器就产生一次中断,以此循环往复,只要不把它在SysTick控制及状态寄存器中的使能位清除,就永不停息。

SysTick相关寄存器

寄存器名称

寄存器描述

CTRL

SysTick控制及状态寄存器

LOAD

SysTick重装载数值寄存器

VAL

SysTick当前数值寄存器

CALIB

SysTick校准数值寄存器

不过还是得重相应的代码中去看看,一层一层把它扒开来的去看。

 

这就是它底层的东西了,假如SystemCoreClock为80Mhz,那么TicksNumb = 80000,则 LOAD的值为80000,那么,根据前面说的,VAL的值为 80000,主频为80Mhz,1/80M*80000 = 1ms,所以每1ms进入滴答定时器中。

再看看stm32g4xx_it.c中的SystTick_Handler函数

 

所以那个滴答定时器就会让一个变量每一毫秒+1,也就是uwTick

再看看HAL_Delay函数 

Tickstart = uwTick

假如延时500ms,那么wait = 500

while ((HAL_GetTick() - tickstart) < wait)

  {

  }

这个函数就一直去查当前的滴答值,然后减去刚一进来的滴答值tickstart,现在距离刚进来时到现在过了多久,在main函数中的while(1)里不仅只执行里面的语句,其内核还在干其他的事,就是让uwTick每秒+1 

所以,这个变量(uwTick)还是有点子用,而且可以在主函数中调用。

看看主函数中,因为它包含了stm32g4xx_hal.h头文件,

 而在stm32g4xx_hal.h这个头文件中,ctrl+f,可以看到uwTick这个变量在这声明了

 

下面可以用这个变量来控制LED的闪烁

//led函数
void led_disp(unsigned char ucled)
{
	//将所有的灯熄灭
//	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_8
                          |GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12,GPIO_PIN_SET);
	
	HAL_GPIO_WritePin(GPIOC,ucled<<8,GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}

在主函数定义一个和uwTick类型一样的变量

__IO uint32_t uwTick_Set_Point = 0;
unsigned char i = 0;
void Led_Proc(void)
{
	if((uwTick - uwTick_Set_Point) < 500)  //0.5s亮灭
		return;
	uwTick_Set_Point = uwTick;
	i++;
	if(i % 2)
		led_disp(0xff);
	else
		led_disp(0x00);
	
}

然后在while(1)中调用。

以上学完之后的个人见解。。(嘿嘿)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/832519.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号