OpenEdv-开源电子网

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

关于原子自带delay延时程序的问题

[复制链接]

23

主题

323

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1010
金钱
1010
注册时间
2016-11-8
在线时间
233 小时
发表于 2016-11-22 09:48:44 | 显示全部楼层 |阅读模式
5金钱
void delay_init()
{
#if SYSTEM_SUPPORT_OS                              //Èç¹ûÐèÒªÖ§³ÖOS.
    u32 reload;
#endif
    SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);    //Ñ¡ÔñÍⲿʱÖÓ  HCLK/8
    fac_us=SystemCoreClock/8000000;  
              //ΪϵͳʱÖÓµÄ1/8  
#if SYSTEM_SUPPORT_OS                              //Èç¹ûÐèÒªÖ§³ÖOS.
    reload=SystemCoreClock/8000000;                //ÿÃëÖӵļÆÊý´ÎÊý µ¥Î»ÎªM  
    reload*=1000000/delay_ostickspersec;        //¸ù¾Ýdelay_ostickspersecÉ趨Òç³öʱ¼ä
                                                //reloadΪ24λ¼Ä´æÆ÷,×î´óÖµ:16777216,ÔÚ72MÏÂ,Ô¼ºÏ1.86s×óÓÒ   
    fac_ms=1000/delay_ostickspersec;            //´ú±íOS¿ÉÒÔÑÓʱµÄ×îÉÙµ¥Î»      

    SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk;       //¿ªÆôSYSTICKÖжÏ
    SysTick->LOAD=reload;                         //ÿ1/delay_ostickspersecÃëÖжÏÒ»´Î   
    SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;       //¿ªÆôSYSTICK   

#else
    fac_ms=(u16)fac_us*1000;                    //·ÇOSÏÂ,´ú±íÿ¸ömsÐèÒªµÄsystickʱÖÓÊý   
#endif
}                                    
延时初始化函数中标红的这两句,
fac_us=SystemCoreClock/8000000;
为什么要除以8000000?

我理解的是SystemCoreClock的值是72MHz,一个systick的时钟周期不该是72M/9M=8么

最佳答案

查看完整内容[请看2#楼]

数学转换,us与s是10的6次方关系
亦余心之所善,
虽九死其犹未悔。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2016-11-22 09:48:45 | 显示全部楼层
数学转换,us与s是10的6次方关系
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

32

主题

883

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4036
金钱
4036
注册时间
2015-11-14
在线时间
545 小时
发表于 2016-11-22 09:50:25 | 显示全部楼层
8分频就是9M
回复

使用道具 举报

23

主题

323

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1010
金钱
1010
注册时间
2016-11-8
在线时间
233 小时
 楼主| 发表于 2016-11-22 09:56:58 | 显示全部楼层

能不能再解释的详细一点QAQ脑子还是没转过来
亦余心之所善,
虽九死其犹未悔。
回复

使用道具 举报

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2016-11-21
在线时间
19 小时
发表于 2016-11-22 10:14:33 | 显示全部楼层
fac_us=SystemCoreClock/8000000;
是计算systemcoreclock时钟频率下延时1us需要的时钟周期。
回复

使用道具 举报

23

主题

323

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1010
金钱
1010
注册时间
2016-11-8
在线时间
233 小时
 楼主| 发表于 2016-11-22 10:51:44 | 显示全部楼层
龙之谷 发表于 2016-11-22 10:14
数学转换,us与s是10的6次方关系

因为选择的时钟是8分频,所以时钟是72Mhz/8=9Mhz,f=n/T,1s内systick滴答9000000次,故1us就是运行9次。。。懂了
亦余心之所善,
虽九死其犹未悔。
回复

使用道具 举报

23

主题

323

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1010
金钱
1010
注册时间
2016-11-8
在线时间
233 小时
 楼主| 发表于 2016-11-22 10:52:25 | 显示全部楼层
唯你为我 发表于 2016-11-22 10:14
fac_us=SystemCoreClock/8000000;
是计算systemcoreclock时钟频率下延时1us需要的时钟周期。

因为选择的时钟是8分频,所以时钟是72Mhz/8=9Mhz,f=n/T,1s内systick滴答9000000次,故1us就是运行9次。。。懂了
亦余心之所善,
虽九死其犹未悔。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-26 13:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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