打印

前几天有人发帖说stm32不能用SysTick库函数定时1us问题原因

[复制链接]
6676|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lip0201|  楼主 | 2011-6-9 22:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 lip0201 于 2011-6-9 22:17 编辑

SysTick的时钟源频率设为SysTick_CLKSource_HCLK_Div8,即9M,假如定时1ms的话,可以这样设置
if (SysTick_Config((SystemCoreClock /8)/ 1000 ))//重装值为9000-1=8999, 定时1ms
{                              
     /* Capture error */
     while (1);
}
假如想定时1us的话,很多人想到除以1000000,即
if (SysTick_Config((SystemCoreClock /8)/ 1000000 ))//重装值为9-1=8,定时1us
{
/* Capture error */
while (1);
}
当时我也是这么做的,可是这么设置片子根本不工作,除以100000还可以,多加一个0就不行了。仿真了半天才知道其原因,原来重装的值太小,还没等SysTick配置完成,重装值已经减为0(此时没运行到Delay(nms)处),从而跳到了中断函数处,nms的值还没传到 TimingDelay_Decrement(void)函数中,所以程序就死在中断函数里了
所以用这种方法不能将重装值设的太小





}
沙发
香水城| | 2011-6-13 12:11 | 只看该作者
鼓励分析思考。

使用特权

评论回复
板凳
kakio| | 2011-6-13 13:27 | 只看该作者
这种氛围真好呀

使用特权

评论回复
地板
sulh| | 2011-6-13 15:03 | 只看该作者
问的人就是我,感谢楼主解惑~!!!!

使用特权

评论回复
5
xwj| | 2011-6-13 15:11 | 只看该作者
呵呵,赞一个~
就是要这样

使用特权

评论回复
6
无冕之王| | 2011-6-13 16:38 | 只看该作者
做工程研发就得像楼主那样多思考

使用特权

评论回复
7
hsbjb| | 2011-6-13 19:37 | 只看该作者
碰到过类似的问题

使用特权

评论回复
8
bsz84| | 2011-6-13 22:40 | 只看该作者
_____________________________________________________________________________
仿真了半天才知道其原因,原来重装的值太小,还没等SysTick配置完成,重装值已经减为0(此时没运行到Delay(nms)处),从而跳到了中断函数处,nms的值还没传到 TimingDelay_Decrement(void)函数中,所以程序就死在中断函数里了
所以用这种方法不能将重装值设的太小
________________________________________________________________________
我想知道真相,是不是这样的,

使用特权

评论回复
9
lip0201|  楼主 | 2011-6-14 10:08 | 只看该作者
8# bsz84

我单步运行了好几次,跟踪程序的运行,看到寄存器的值确实在运行到Delay()前已经减为0,跳到了中断函数处,而此时中断函数调用的TimingDelay_Decrement(void)中循环递减的的变量还没有被赋值(因为还没运行到Delay(),这个变量的赋值是在Delay()中赋值的),所以程序就死在了中断里,你可以仿真试一下,打开SysTick的寄存器,一步步运行,就可以看到问题原因了

使用特权

评论回复
10
MicroMMU| | 2011-6-14 13:18 | 只看该作者
钻牛角尖了,定一个us有什么意义呀,

使用特权

评论回复
11
dfsa| | 2011-6-14 16:35 | 只看该作者
多分析思考,然后再分享,才能很快进步

使用特权

评论回复
12
Snow-wing| | 2014-12-31 13:14 | 只看该作者
给楼主赞一个  刚好遇到这个问题  谢谢

使用特权

评论回复
13
zh113214| | 2014-12-31 15:32 | 只看该作者
赞一个!!!楼主威武啊!!!

使用特权

评论回复
14
xppx1987| | 2015-1-6 15:55 | 只看该作者
不错!LZ善于思考~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

12

帖子

1

粉丝