你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于SysTick 程序的疑惑

[复制链接]
wyxy163@126.com 提问时间:2015-1-8 10:05 /
提示: 作者被禁止或删除 内容自动屏蔽
收藏 评论16 发布时间:2015-1-8 10:05

举报

16个回答
ustcyinghuan 回答时间:2015-1-8 11:15:46
在STM32系统中充当这个时基的我们称之为“系统滴答定时器”,英文名为Systick Time.
在51系列芯片的编程中,通常会用到延时函数,当时我们是用死循环来达到这个效果的;
在STM32电路系统里面,我们就可以用Systick Time这个模块,能够精确延时的目的。
这个模块即使在系统睡眠的时候也是工作的,这样可以用之做一个系统闹钟或者是实现待机唤醒这个功能。这个模块就是一个简单的倒计时器,对于它,有三个常用的寄存器
 CTRL 控制状态寄存器
 LOAD重装载寄存器

可参照这个理解一下

void delay_init()     
{
  SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
  //选择外部时钟  HCLK/8即为9M的时钟
  fac_us=SystemCoreClock/8000000;                                      
  //每个us需要的systick时钟数  
  fac_ms=(u16)fac_us*1000;                                               
  //每个ms需要的systick时钟数   
}
void delay_us(u32 nus)
{
  SysTick->VAL=0X00;                    //清空计数器
  SysTick->LOAD=nus*fac_us;            //初始值加载
  SysTick->CTRL|=0X01;                  //ENABLE,开始计数
  while(!(SysTick->CTRL>>16));     //等待标志位为1   
  SysTick->CTRL&=0X00;                  //关闭计数器
}
 VALUE当前数值寄存器
qianfan 回答时间:2015-1-8 10:59:21
Systick_config的参数是两次中断之间的时钟周期数。比如48M的,
每隔1ms之间共有48M/1000个周期。
每隔1us之间共有48M/1000000个周期。
Systick_Config的返回值是函数是不是执行成功。比如参数的值超过了SYSTICK->VAL的最大值,那么返回的是真。所以要捕捉这个函数的错误。
kevin0129 回答时间:2015-1-8 10:44:34
if (SysTick_Config(SystemCoreClock / 1000))
看着一句,如果是F0那么systic计数值就等于(48M/1000),当计数到这么多产生中断,而计一个数的时间为 SystemCoreClock(或者它的1/8),SystemCoreClock/(48M/1000)就等于1000Hz,即为1ms,对于f103同理还是1ms中断一次!
kqh1120 回答时间:2015-1-8 10:06:23
没用过072.。我觉得是因为主频不同吧。。103的是72M的
wyxy163@126.com 回答时间:2015-1-8 10:08:08
提示: 作者被禁止或删除 内容自动屏蔽
wamcncn 回答时间:2015-1-8 10:10:21
072主频 48M,103主频72M,看看手册吧,网上的都是103的教程,下个I2C源码,错误百出,还是照着072的库文件看吧
wamcncn 回答时间:2015-1-8 10:11:55
本帖最后由 wambob 于 2015-1-8 10:37 编辑

CPU不一样,库文件里定义的uint32_t SystemCoreClock  也不一定相同

__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
uint32_t ticks 就是滴答

wyxy163@126.com 回答时间:2015-1-8 10:16:36
提示: 作者被禁止或删除 内容自动屏蔽
netlhx 回答时间:2015-1-8 10:29:31
主频不同,相应的分频系数也不同,这样才能实现与硬件无关
wamcncn 回答时间:2015-1-8 10:39:25
本帖最后由 wambob 于 2015-1-8 10:40 编辑
数码小叶 发表于 2015-1-8 10:16
你没理解我的意思,一个定义的是48,一个定义的是72 ,我刚说了啊


明白了啊,你不就是说两的时钟不一样吗,一个48,一个72,CPU不一样,怎么能一样,除非你超频
天天晓宇 回答时间:2015-1-8 10:46:03
【经验分享】STM32中实用的精确延时方法
https://www.stmcu.org.cn/module/ ... amp;fromuid=2091303
(出处: 意法半导体STM32/STM8技术社区)
  看看我的帖子,比这个好多了
wyxy163@126.com 回答时间:2015-1-8 11:13:58
提示: 作者被禁止或删除 内容自动屏蔽
wyxy163@126.com 回答时间:2015-1-9 08:00:17
提示: 作者被禁止或删除 内容自动屏蔽
lovewyufeng 回答时间:2015-1-9 08:42:17
那是指的系统主频哈   应该多少就多少
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版