OpenEdv-开源电子网

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

有关Systick定时器的一个疑惑

[复制链接]

5

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2014-3-21
在线时间
33 小时
发表于 2014-4-2 18:19:34 | 显示全部楼层 |阅读模式
 最近看Systick定时器,有点小疑问。就是库函数版书本第五章5.1.2 delay_us函数感觉这个延时不是很精确。SysTick->LOAD=nus*fac_us;  感觉应该再减去个1.因为此定时器是倒计时到0的 ,延时n应该让其从n-1开始倒计时。自己闭门造车 不知道对不对。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-4-2 23:33:22 | 显示全部楼层
回复【楼主位】lzshore:
---------------------------------
楼主,验证下。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2014-3-21
在线时间
33 小时
 楼主| 发表于 2014-4-3 17:57:22 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
要是systick定时器用AHB时钟的话,每次定时中断就会多1/72us,要是用AHB的八分频的话,每次就会比实际的多1/9us  对不原子哥?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-4-3 23:55:44 | 显示全部楼层
回复【3楼】lzshore:
---------------------------------
不存在你说的问题。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-4-3 23:57:20 | 显示全部楼层
假定设置fac_us=9。
第1个脉冲来,减去1=8
第2个脉冲来,减去1=7
第3个脉冲来,减去1=6
第4个脉冲来,减去1=5
第5个脉冲来,减去1=4
第6个脉冲来,减去1=3
第7个脉冲来,减去1=2
第8个脉冲来,减去1=1
第9个脉冲来,减去1=0 
game 
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2014-3-21
在线时间
33 小时
 楼主| 发表于 2014-4-7 21:45:51 | 显示全部楼层
static __INLINE uint32_t SysTick_Config(uint32_t ticks)

  if (ticks > SysTick_LOAD_RELOAD_Msk)  return (1);            /* Reload value impossible */
                                                               
  SysTick->LOAD  = (ticks & SysTick_LOAD_RELOAD_Msk) - 1;      /* set reload register */
这是库函数中的代码,SysTick_LOAD_RELOAD_Msk=0xFFFFFF;它和ticks按位与之后的值就是ticks的值,最后它又减了一个1.不明白为什么?一直在纠结,难受....求原子哥解答一下。
回复 支持 反对

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2014-4-7 21:59:57 | 显示全部楼层
回复【6楼】lzshore:
---------------------------------
API不需要寄存器值,只需要你传入周期
于20150522停用该账号:http://www.microstar.club
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-4-7 22:14:22 | 显示全部楼层
回复【6楼】lzshore:
---------------------------------
他这个要求循环计数。
我们的延时,只需要减到0,就可以了。
而库函数这个,减到0,还需要另外一个脉冲,来重装载新的值。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2014-3-21
在线时间
33 小时
 楼主| 发表于 2014-4-8 17:57:46 | 显示全部楼层
俺明白了,谢了原子哥。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-12 10:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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