野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9652|回复: 3

为什么照着书上写的SysTik()函数不能进行延时呢?

[复制链接]
发表于 2018-5-24 10:13:36 | 显示全部楼层 |阅读模式
本帖最后由 Rheinmetal 于 2018-5-24 10:19 编辑

  1. 函数版本1是照函数版本1着书上抄的,但是不能延时,函数版本2是在百度搜的,可以用,两个都差不多啊,为什么版本1 的不能延时呢?(完完全全照着书上写的) .初学不知道怎么处理求大神解释下谢谢?
复制代码




void Delay(__IO u32 ms)                     
{                    
            //SysTick延时函数版本 1  (照着书上写的)
            #if 0
            uint32_t  count=0;
            SysTick_Config(SystemCoreClock/1000000);
            for(count=0;count<ms;++count)
            {
                //当计数器的值减到0时,CTRL寄存器的位16会置1
                //当值1时,读取该位会清0
                while(!((SysTick->CTRL)&(1<<16)));
            }
   
            // 关闭 SysTick 定时器
            SysTick->CTRL &=~SysTick_CTRL_ENABLE_Msk;
            #endif
   
   
            //SysTick延时函数版本 2  (网上找的代码)
            #if 0
            u32 temp=0;
         SysTick->LOAD=microsec*9000;  //设置重装值 (72MHz时)
        SysTick->CTRL=0x01;           //使能
        SysTick->VAL=0x00;            //清空计数器
        do
        {
                temp=SysTick->CTRL;  //读取当前值;

        }while((temp&0x01)&&(!(temp &(1<<16))));//等待时间到达
        SysTick->CTRL=0x00;                  //关闭计数器
        SysTick->VAL=0x00;
            #endif
}
回复

使用道具 举报

发表于 2018-5-24 10:24:28 | 显示全部楼层
我们的函数使用了中断,需要编写中断服务函数
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-24 10:27:15 | 显示全部楼层
flyleaf 发表于 2018-5-24 10:24
我们的函数使用了中断,需要编写中断服务函数

没有注意看,只是看了如何延时的,我晚上回去再仔细看看,谢了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-24 10:27:51 | 显示全部楼层
flyleaf 发表于 2018-5-24 10:24
我们的函数使用了中断,需要编写中断服务函数

没有注意看,只是看了如何延时的,我晚上回去再仔细看看,谢了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-26 20:34 , Processed in 0.049264 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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