OpenEdv-开源电子网

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

延时delay函数的init

[复制链接]

51

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
347
金钱
347
注册时间
2012-5-20
在线时间
0 小时
发表于 2012-5-24 14:09:06 | 显示全部楼层 |阅读模式
 
void delay_init(u8 SYSCLK)  
{  
SysTick->CTRL&=0xfffffffb;//bit2清空,选择外部时钟 HCLK/8  
fac_us=SYSCLK/8;//计时基数 systick主频 HCLK/8=72/8=9MHZ,每次计数1/9us,所以计数为9时正好1us  
fac_ms=(u16)fac_us*1000; //计时基数 1us*1000=1ms  
}  
1、其中的“fac_us=SYSCLK/8,每次计数1/9us,所以计数为9时正好1us ,“感觉基数为什么是1us,不应该按计数一次来算吗,不应该是1/9us吗?\
2、fac_us=SYSCLK/8;  为什么不是fac_us=8/SYSCLK 作为时间基数不是应该等于频率倒数吗
问题补充:3、fac_us=SYSCLK/8;//计时基数 systick主频 HCLK/8=72/8=9MHZ,每次计数1/9us,所以计数为9时正好1us 
这句的意义自己随后又理解了一下,是不是fac_us=SYSCLK/8,它就表示1us,此时计数9个。[/mw_shl_code]

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

使用道具 举报

7

主题

185

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2729
金钱
2729
注册时间
2015-12-27
在线时间
469 小时
发表于 2016-1-4 09:20:13 | 显示全部楼层
菜鸟2012 发表于 2016-1-3 16:14
还有一点不太明白,fac_us=SYSCLK/8,那么计数fac_us次不刚好是1秒吗?,怎么会是1 us?

这个参数SYSCLK是72哎,不是72000000
回复 支持 1 反对 0

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
24
金钱
24
注册时间
2012-5-24
在线时间
0 小时
发表于 2012-5-24 14:44:06 | 显示全部楼层
我也刚刚看 ,后面有void delay_us(u32 nus),这函数里面LOAD值为nus*fac_us,这样系统计数LOAD值就为nus了。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-5-24 14:52:52 | 显示全部楼层
http://www.openedv.com/posts/list/5578.htm?fromAll=0
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

51

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
347
金钱
347
注册时间
2012-5-20
在线时间
0 小时
 楼主| 发表于 2012-5-24 15:08:18 | 显示全部楼层
回复【2楼】Dennise:
---------------------------------
我就是没理解所说的把要延时的us数换算成时钟数是怎么换算的?
fac_us=SYSCLK/8;//计时基数 systick主频 HCLK/8=72/8=9MHZ,每次计数1/9us,所以计数为9时正好1us  ,这个计数为9是什么含义呢?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-5-24 18:10:21 | 显示全部楼层
回复【4楼】beisiqiu:
---------------------------------
你知道systick的时钟频率是多少么?!!!!!
弄清楚了,就知道这个9的含义了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
24
金钱
24
注册时间
2012-5-24
在线时间
0 小时
发表于 2012-5-25 08:39:48 | 显示全部楼层
回复【4楼】beisiqiu:
---------------------------------
SYSTICK的时钟固定为HCLK时钟的1/8,原子哥在书上已经写出来了。所以...
回复 支持 反对

使用道具 举报

6

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2013-7-12
在线时间
2 小时
发表于 2015-11-5 15:59:19 | 显示全部楼层
 回复【5楼】 正点原子 :
---------------------------------
关于库函数中的定义
#define SysTick_CLKSource_HCLK_Div8    ((uint32_t)0xFFFFFFFB)
#define SysTick_CLKSource_HCLK         ((uint32_t)0x00000004)
你好,请教下为什么这样定义就是外部时钟8分频了呢?我现在用的外部时钟没有倍频,用的是8MHz,那么这个寄存器的值这样设置还正确吗?
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //选择外部时钟  HCLK/8
fac_us=SYSCLK/8;    
fac_ms=(u16)fac_us*1000;
这样设置delay_init(8); //延时初始化
这样得到的延时时间是1us吗?


回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-11-9 23:21:43 | 显示全部楼层
回复【7楼】delamu:
---------------------------------
看对寄存器的设置结果。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2013-7-12
在线时间
2 小时
发表于 2015-11-12 10:11:21 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
#define SysTick_CLKSource_HCLK_Div8    ((uint32_t)0xFFFFFFFB)
对寄存器的设置,第二位为0选择外部时钟,但怎么体现8分频了呢?
我这样设置delay_init(8); //延时初始化
这样得到的延时时间是1us吗?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-11-17 23:42:02 | 显示全部楼层
回复【9楼】delamu:
---------------------------------
你可以测试下。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
68
金钱
68
注册时间
2015-10-12
在线时间
3 小时
发表于 2015-11-18 10:23:00 | 显示全部楼层
我觉得你这么理解,首先选择时钟要不就是sysclock要不就是sysclock/8!第一步设置寄存器,那么假设系统时钟是72M,那么就是每秒钟产生72M个脉冲,那么1us产生多少脉冲呢,1ms呢?都是计算出来的!1MS你就72M/1000,1us你就72M/1000000    同样8分频也是一样的
回复 支持 反对

使用道具 举报

3

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2015-11-20
在线时间
7 小时
发表于 2016-1-3 16:14:45 | 显示全部楼层
还有一点不太明白,fac_us=SYSCLK/8,那么计数fac_us次不刚好是1秒吗?,怎么会是1 us?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-22 00:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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