OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 13520|回复: 9

systick无法进入中断

[复制链接]

1

主题

3

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2013-2-2
在线时间
0 小时
发表于 2013-2-2 10:03:31 | 显示全部楼层 |阅读模式
朋友们帮下忙,我现在systick一直进不了中断,使用原子哥的直接操作寄存器,不用中断倒是可以正常计数,但是使用库函数一直进不了中断,
__IO unsigned char hours=0,minutes=0,seconds=0;  //时,分,秒
__IO unsigned char se_count=0;      //秒钟计数
int main(void)
{      
 RCC_Configuration();     //时钟初始化函数
 GPIO_Configuration();     //端口初始化函数
 if(SysTick_Config(SystemCoreClock/10))  //100ms进入一次
 {
     /* Capture error */
     while (1);
    }
 NVIC_SetPriority(SysTick_IRQn, 0x0);
 OLED_Init();       //OLED初始化
 Boot_Interface();      //开机界面,商标图案
 while(1)
  {
   OLED_ASCII8x16(32,4,hours/10+0x30);
   OLED_ASCII8x16(40,4,hours%10+0x30);
   OLED_ASCII8x16(48,4,':');
   OLED_ASCII8x16(56,4,minutes/10+0x30);
   OLED_ASCII8x16(64,4,minutes%10+0x30);
   OLED_ASCII8x16(72,4,':');
   OLED_ASCII8x16(80,4,seconds/10+0x30);
   OLED_ASCII8x16(88,4,seconds%10+0x30);
  }
}

extern __IO unsigned char hours,minutes,seconds; //时,分,秒
extern __IO unsigned char se_count;  //秒钟计数
void SysTick_Handler(void)  //100ms进入一次
{
 seconds++;    //加秒钟
 se_count++;     //秒钟计数自增
 if(se_count>=10)   //1秒钟进入一次
 {
  se_count=0;    //重新定时1秒钟
  seconds++;    //加秒钟
  if(seconds>=60)   //判断60S时间到了没
  {
   seconds=0;   //秒钟等于0
   minutes++;   //分钟自加1
   if(minutes>=60)  //判断是否大于60分钟
   {
    minutes=0;  //分钟等于0
    hours++;  //小时自加
    if(hours>=24) hours=0; //时间等于0 
   }
  } 
 }
}
哎,我都搞了好几天了,一直进不了中断,真不知道是怎么回事,有知道的朋友麻烦帮解决下!先谢谢了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2013-2-2
在线时间
0 小时
 楼主| 发表于 2013-2-2 10:07:45 | 显示全部楼层
忘记说了,我是V3.5的库
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-2-2 11:46:22 | 显示全部楼层
#ifdef OS_CRITICAL_METHOD  //如果OS_CRITICAL_METHOD定义了,说明使用ucosII了.
//systick中断服务函数,使用ucos时用到
void SysTick_Handler(void)
{    
OSIntEnter(); //进入中断
    OSTimeTick();       //调用ucos的时钟服务程序               
    OSIntExit();        //触发任务切换软中断
}
#endif
   
//初始化延迟函数
//当使用ucos的时候,此函数会初始化ucos的时钟节拍
//SYSTICK的时钟固定为HCLK时钟的1/8
//SYSCLK:系统时钟
void delay_init(u8 SYSCLK)
{
#ifdef OS_CRITICAL_METHOD  //如果OS_CRITICAL_METHOD定义了,说明使用ucosII了.
u32 reload;
#endif
  SysTick->CTRL&=~(1<<2); //SYSTICK使用外部时钟源  
fac_us=SYSCLK/8; //不论是否使用ucos,fac_us都需要使用
    
#ifdef OS_CRITICAL_METHOD  //如果OS_CRITICAL_METHOD定义了,说明使用ucosII了.
reload=SYSCLK/8; //每秒钟的计数次数 单位为K    
reload*=1000000/OS_TICKS_PER_SEC;//根据OS_TICKS_PER_SEC设定溢出时间
//reload为24位寄存器,最大值:16777216,在72M下,约合1.86s左右
fac_ms=1000/OS_TICKS_PER_SEC;//代表ucos可以延时的最少单位    
SysTick->CTRL|=1<<1;    //开启SYSTICK中断
SysTick->LOAD=reload;  //每1/OS_TICKS_PER_SEC秒中断一次
SysTick->CTRL|=1<<0;    //开启SYSTICK    
#else
fac_ms=(u16)fac_us*1000;//非ucos下,代表每个ms需要的systick时钟数   
#endif
}

宏定义OS_CRITICAL_METHOD,即可实现中断配置.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2013-2-2
在线时间
0 小时
 楼主| 发表于 2013-2-3 15:09:24 | 显示全部楼层
好吧,弄了这么多天,才发现原来程序是可以进入中断的,只是我原来的Delay程序使用了,systick的计数,把它关掉了,才不行的!哎,太失败了
回复 支持 反对

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2014-8-16
在线时间
0 小时
发表于 2014-8-23 15:42:24 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
原子你好,为什么我按这种方法配的延时函数,比如延迟1000ms却只有几百ms呢,延迟几ms的时候,大约还是差不多的,拜谢原子
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-8-23 23:08:18 | 显示全部楼层
回复【5楼】zhuyishui:
---------------------------------
我的方法很准确.
请直接用我们例程测试,然后上示波器图片说明.谢谢.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2016-5-7
在线时间
3 小时
发表于 2016-5-7 23:22:13 | 显示全部楼层
wjd85 发表于 2013-2-2 10:07
忘记说了,我是V3.5的库

你好,我也进不去中断,你当时是怎么解决的
回复 支持 反对

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2016-5-7
在线时间
3 小时
发表于 2016-5-7 23:23:34 | 显示全部楼层
楼主已经会的话求指导
回复 支持 反对

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2014-3-22
在线时间
9 小时
发表于 2019-1-9 21:28:15 | 显示全部楼层
正点原子 发表于 2014-8-23 23:08
回复【5楼】zhuyishui:
---------------------------------
我的方法很准确.
请直接用我们例程测试,然后上 ...

原子哥,你的是采用的查询
回复 支持 反对

使用道具 举报

4

主题

178

帖子

0

精华

高级会员

Rank: 4

积分
668
金钱
668
注册时间
2019-7-28
在线时间
60 小时
发表于 2020-4-22 09:15:37 | 显示全部楼层
就没看见开中断的地方
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-26 00:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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