STM32系统滴答定时器中断

/*
Function name:SysTick_Init
Description:systick初始化函数
param:None
retval:None
Remarks:
时钟-->内核时钟  168MHz
*/
void SysTick_Init(void)
{
	if(SysTick_Config(168000))//形参-->重装载值 1ms触发一次中断
	{
		while(1);
	}
}
u32 timeout=0;
u32 Time_slice1[2]={0,1000};
u32 Time_slice2[2]={0,2000};
void SysTick_Handler(void)//中断服务函数
{
	timeout++;
	Time_slice1[0]++;
	Time_slice2[0]++;
}

/*
Function name:Sys_Nvic_Delayms
Description:ms延时函数
param: 延时时长
retval:None
Remarks:
*/
void Sys_Nvic_Delayms(u32 mstime)
{
	u32 temp=0;
	temp=timeout;
	while(timeout-temp<mstime);
}

SysTick_Config

__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
{
  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)
  {
    return (1UL);                                                   /* Reload value impossible */
  }

  SysTick->LOAD  = (uint32_t)(ticks - 1UL);                         /* set reload register */
  NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */
  SysTick->VAL   = 0UL;                                             /* Load the SysTick Counter Value */
  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |
                   SysTick_CTRL_TICKINT_Msk   |
                   SysTick_CTRL_ENABLE_Msk;                         /* Enable SysTick IRQ and SysTick Timer */
  return (0UL);                                                     /* Function successful */
}

时间片:可以分别中断,互不干扰 

while(1)
	{
		
		if(Time_slice1[0]>Time_slice1[1])
		{
			printf("1s\r\n");
			Time_slice1[0]=0;
		}
			if(Time_slice2[0]>Time_slice2[1])
		{
			printf("2s\r\n");
			Time_slice2[0]=0;
		}
}

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值