找回密码
 立即注册

QQ登录

只需一步,快速开始

打印 上一主题 下一主题
开启左侧

一个延迟-秒-函数该怎么写

[复制链接]
跳转到指定楼层
楼主
arm_nuedu 发表于 2017-8-13 22:06:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题:1:这两个while的延迟时间为什么差别这么大???第一个(注释掉的部分)差不多3秒多,也能接受。第二个整整10s多。
2:最想问还是__NOP运行一次多长时间???它应该跟系统时钟设置有关吧?我该怎设置,使用NOP来做一个更准确的延迟???

void delay_s(uint32_t second)
{
        uint32_t i;
        uint32_t j = second*1000;
        for(i=0;i<second;i++)
        {
//                while(j>0)
//                {
//                 CLK_SysTickDelay(1000);
//                        j--;
//                }
                for(j=0;j<second*1000;j++)
                         CLK_SysTickDelay(1000);       

//                       
//        }
//        for(i=0;i<1000000*second;i++)
//        {
//                __NOP ;
//                __NOP ;
//        }
        }

谢谢,期待你的答复!!!!!!

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 顶 踩
回复

使用道具 举报

沙发
a_ziliu 发表于 2017-8-14 11:08:47 | 只看该作者
看你的SystemCoreClock
    printf("\n\nCPU @ %dHz\n", SystemCoreClock);
回复 支持 反对

使用道具 举报

板凳
a_ziliu 发表于 2017-8-14 11:11:21 | 只看该作者
systick delay時間 是根據你的clock算出來的
   /* Update System Core Clock */
    SystemCoreClock = u32Freq / u32HclkDiv;

    CyclesPerUs = (SystemCoreClock + 500000) / 1000000;
回复 支持 反对

使用道具 举报

地板
 楼主| arm_nuedu 发表于 2017-8-14 16:33:18 | 只看该作者
您好,这个问题其实不在这里,我也明白,SystemCoreClockUpdate()是为了在不同时钟的情况下,保证 CLK_SysTickDelay的使用,现在时钟是22.1148M,去调用CLK_SysTickDelay做一个秒级的延迟函数,结果偏差太大。

另外,在22.1148M下,__NOP的延时多少????
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

新唐MCU