野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10535|回复: 2

Systick为何无法实现1s的定时,100ms,1ms都可以

[复制链接]
发表于 2016-3-19 18:18:38 | 显示全部楼层 |阅读模式
使用以下的程序发现(SysTick_Config(SystemCoreClock)),配置为1s进入一次systick中断就无法实现功能,
如果改为(SysTick_Config(SystemCoreClock)/10)或者(SysTick_Config(SystemCoreClock)/100),都可以正常
实现功能,这是为什么呢?(SysTick_Config(SystemCoreClock)),中的SystemCoreClock为72MHz也没有超过
0xFFFFFF啊!



__IO uint32_t nCounter;
__IO uint32_t timer_counter;
/*******************************************************************************/
//Systick初始化函数
void systick_initialization(void)
{
if(SysTick_Config(SystemCoreClock))                        //配置Reload值为72MHz,
{
  while(1);
}

SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;                     //关闭Systick  
}
/*******************************************************************************/


/*******************************************************************************/
//延时倍数函数
void Delay_1ms(uint32_t nTime)
{
  nCounter = nTime;

  SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;                     

  while(nCounter);
}
/*******************************************************************************/


/*******************************************************************************/
//自减1函数
void nTime_decrease(void)
{
if(nCounter)
{
  nCounter--;
  timer_counter++;
  printf("\t%d\r\n",timer_counter);  
}
}
/*******************************************************************************/


回复

使用道具 举报

发表于 2016-3-20 12:13:05 | 显示全部楼层
看看你定义的变量够不够大,会不会溢出,另外systick是一个24位的定时器
回复 支持 反对

使用道具 举报

发表于 2016-5-4 21:24:29 | 显示全部楼层
您好,我也遇到了相同问题,无法精确到1s,您解决了吗?我调试的时候一行一行看的,2^24是16777216,1s计算的Systick->Load应该是9000000,并没有超过上限,但是就是不准了,不知道问题在哪里
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-10-1 17:17 , Processed in 0.038502 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表