查看: 1633|回复: 9
收起左侧

求助 SysTick不能工作,打开就不停的复位

[复制链接]
     

8

主题

153

帖子

475

积分

资深技术员

 楼主| 发表于 2013-9-5 08:05 | 显示全部楼层 |返回版面|阅读模式
昨天移值UC/OS,发现SysTick不能工作,芯片不停复位,打开就不停的复位。
中断函数
void SysTick_Handler(void)
{
TimingDelay_Decrement();
}
初始化函数
void SysTick_Init(void)
{
/* SystemFrequency / 1000    1ms中断一次
  * SystemFrequency / 100000  10us中断一次
  * SystemFrequency / 1000000 1us中断一次
  */
if (SysTick_Config(SystemFrequency / 100000))
  {
    /* Capture error */
    while (1);
  }
}

/*
* 函数名:Delay_us
* 描述  :us延时程序,10us为一个单位
* 输入  :- nTime
* 输出  :无
* 调用  :Delay_us( 1 ) 则实现的延时为 1 * 10us = 10us
*       :外部调用
*/
void Delay_us(__IO u32 nTime)
{
  TimingDelay = nTime;
  while(TimingDelay != 0);
}

/*
* 函数名:TimingDelay_Decrement
* 描述  :获取节拍程序
* 输入  :无
* 输出  :无
* 调用  :在 SysTick 中断函数 SysTick_Handler()调用
*/  
void TimingDelay_Decrement(void)
{
  if (TimingDelay != 0x00)
  {
    TimingDelay--;
  }
}

int main(void)
{
/* config the sysclock to 72mhz */
SystemInit();///使用本论坛里的108M时钟,这个时钟可以使用,另外一个实验用软延时可以跑
/* config led gpio */
LED_GPIO_Config();
/* 配置SysTick 为10us中断一次 */
SysTick_Init();

  while (1)
  {
  //SysTick->CTRL = 1 << SYSTICK_ENABLE;     // 使能滴答定时器
    LED1( 0 );
    Delay_us(50000);    // 50000 * 10us = 500ms
  LED1( 1 );
  
   LED2( 0 );
    Delay_us(50000);  // 50000 * 10us = 500ms
  LED2( 1 );
   LED3( 0 );
    Delay_us(50000);  // 50000 * 10us = 500ms
  LED3( 1 );
  //SysTick->CTRL = 0 << SYSTICK_ENABLE;     // 失能滴答定时器
  }
}
     

8

主题

153

帖子

475

积分

资深技术员

 楼主| 发表于 2013-9-5 08:10 | 显示全部楼层 |返回版面
使用的是STM V3.5的库。

5

主题

124

帖子

479

积分

资深技术员

发表于 2013-9-5 08:53 | 显示全部楼层 |返回版面
这个库对SysTick的操作有bug的,比如手册上说可以选择工作时钟为主频的1/8,但设置后发现无效,仍是等于主频
SysTick的工作时钟不需要达到主频这样快,设置为8分频可节省功耗、定时更长

修正后的代码见:
http://bbs.21ic.com/icview-581792-1-3.html
GD兆易半导体——周立功单片机
www.zlgmcu.com/GigaDevice
     

8

主题

153

帖子

475

积分

资深技术员

 楼主| 发表于 2013-9-5 09:09 | 显示全部楼层 |返回版面
周立功GD32 发表于 2013-9-5 08:53
这个库对SysTick的操作有bug的,比如手册上说可以选择工作时钟为主频的1/8,但设置后发现无效,仍是等于主 ...

谢谢,我看了CM3里的代码发现没什么问题,对SYSTICK寄存器正常操作,使用STM32F103VBT6都可以正常跑。

1

主题

14

帖子

72

积分

初级技术员

发表于 2013-9-5 10:02 | 显示全部楼层 |返回版面
试过了,一切正常
<img src="static/image/smiley/comcom/21.gif" cla ...

76

主题

576

帖子

1763

积分

助理工程师

发表于 2013-9-27 20:15 | 显示全部楼层 |返回版面
看来奇怪的问题还是比较多  还是要慎用新产品

4

主题

97

帖子

294

积分

中级技术员

发表于 2013-9-28 09:12 | 显示全部楼层 |返回版面
周立功GD32 发表于 2013-9-5 08:53
这个库对SysTick的操作有bug的,比如手册上说可以选择工作时钟为主频的1/8,但设置后发现无效,仍是等于主 ...

向大牛致敬   我要加油了

11

主题

143

帖子

633

积分

高级技术员

发表于 2017-8-8 15:48 | 显示全部楼层 |返回版面

86

主题

3950

帖子

1万

积分

资深工程师

发表于 2017-8-16 20:13 | 显示全部楼层 |返回版面
这个跟使用的晶振的频率有关系的,,检查下晶振是否完好

77

主题

3430

帖子

1万

积分

资深工程师

发表于 2017-8-20 21:57 | 显示全部楼层 |返回版面
这个需要注意延时程序的设计的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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