OpenEdv-开源电子网

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

为什么我这个延时函数一直死在while里,跳不出来啊?

[复制链接]

3

主题

7

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2018-8-16
在线时间
13 小时
发表于 2018-10-18 10:45:07 | 显示全部楼层 |阅读模式
static u8 fac_us=0;
static u16 fac_ms=0;

void delay_init(u8 SYSCLK)
{
       
        SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
        fac_us=SYSCLK/(8*1000000);
        fac_ms=(u16)fac_us*1000;
}
       
void delay_us(u32 time)
{
        SysTick->LOAD=time*fac_us;
        SysTick->VAL=0;
        SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;
  while((SysTick->CTRL&(1<<16))==0);
        SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;
        SysTick->VAL=0;
}
       
       
void delay_ms(u16 time)
{
        SysTick->LOAD=(u32)time*fac_ms;
        SysTick->VAL=0;
        SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;
        while((SysTick->CTRL&(1<<16))==0);
        SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;
        SysTick->VAL=0;
}

void delay_nms(u16 time)
{                  
        u8 integer=time/500;                                                               
        u16 remainder=time%500;
        while(integer)
        {
                delay_ms(500);
                integer--;
        }
        if(remainder)delay_ms(remainder);
}

我把原子哥例程里的void delay_nms(u16 time)copy过来也一样,还是死在do{}while()里。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2018-10-18
在线时间
19 小时
发表于 2018-10-18 13:45:14 | 显示全部楼层
紅色地方改成這樣試試

void delay_ms(u16 time)
{
         SysTick->LOAD=(u32)time*fac_ms;
         SysTick->VAL=0;
         SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;

         while( (SysTick->CTRL&0x01)&&!(SysTick->CTRL&(1<<16)) );

         SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;
         SysTick->VAL=0;
}
回复 支持 反对

使用道具 举报

3

主题

7

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2018-8-16
在线时间
13 小时
 楼主| 发表于 2018-10-18 15:02:58 | 显示全部楼层
NickWu 发表于 2018-10-18 13:45
紅色地方改成這樣試試

void delay_ms(u16 time)

不行啊,还是一样的
回复 支持 反对

使用道具 举报

1

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2018-10-18
在线时间
19 小时
发表于 2018-10-19 08:26:44 | 显示全部楼层
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);

上面這段的定義可以提供嗎?包含函數與define,
如果用內振,可能是振盪器設定錯誤導致沒有起振,
如果是外振,也可能震盪器壞了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 10:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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