原创 STM32F0学习笔记(2)-2

2012-8-6 11:05 4236 19 26 分类: MCU/ 嵌入式

变量TimingDelay被赋值了Delay函数传递进来的那个nTime值,也就是50100。如果变量TimingDelay不等于0,那么它就将一直循环,无法退出Delay函数,只有当TimingDelay变为0了,才能够退出Delay函数。我们正怀疑那个TimingDelay变量怎么会变成0的呢?看:就在这里了。

有个名为TimingDelay_Decrement()的函数在做这个工作,可以这个函数又被什么调用的呢?就是SysTick_Handler函数了。看到这儿,我们已隐隐猜到,这个SysTick_Handler函数应该是个中断函数,每隔一段时间定时运行一次。因为我们找不到有其他函数调用这个函数,所以它只能是被硬件机制调用的。那每隔多长时间呢?这个不难猜,应该是1ms一次。

总结一下:SysTick_Handler()函数每ms运行一次,运行时就调用TimingDelay_Decrement()函数,而这个函数令变量TimingDelay1

这样,当我们给Delay()函数传递一个50的参数(Delay(50))时,相当于延时50ms

可是,可是,问题还有很多,为什么SysTick_Handler1ms运行一次呢?

看来,得研究一下SysTick究竟是个什么东西,它是怎么运作的了。

三、SysTick

         SysTick被称之为系统嘀嗒定时器。查找STM32F0的数据手册,居然就这么一点点介绍,,,好在,我们还有其他资料。

Cortex-M3权威指南中是这么描述Syteick的:

20120806105907561011.jpg

         难怪,这个SystickCortex-M3内核所提供的,ST自然没必要多讲了。

         SysTick定时器:系统滴答定时器是一个非常基本的倒计时定时器,用于在每隔一定的时间产生一个中断,即使是系统在睡眠模式下也能工作。它使得 OS 在各 CM3 器件之间的移植中不必修改系统定时器的代码,移植工作一下子容易多了。

         下面还有另外一个问题,Systick究竟多长时间产生一次中断。

         main.c中的代码:

if (SysTick_Config(SystemCoreClock / 1000))

  {

    /* Capture error */

    while (1);

  }

我们可以猜测,那个1000就是关键。让我们把1000改成100,重新编译再运行,结果是灯闪烁的速度慢了10倍,也就是Systick变成了10ms中断一次。这样,我们就学会了怎么样来改变这个Systick。可是,总觉得这还有点不够,为什么会是这样呢?让我们把鼠标移到SystemCoreClock上去按下F12吧。

         20120806105913185012.png

这次跑到了system_stm32f0xx.c文件中去了,这就是User组中的第3个文件。查看一下,原来符号:SystemCoreClock是一个变量,它的值是48000000,也就是48M,这好像是个挺熟悉的数值,是什么呢?

20120806105917581013.jpg

打开STM32F051芯片介绍的资料,原来在这儿,48M是该芯片运行的最高频率。

那么我们可以猜测:

1)在这个例子中,我们把芯片运行到了它的最高频率,即48M

248M1000就是48 000,应该是将这个48000这个数放到了某个寄存器中,然后根据这个数来分频。也就是时钟脉冲的频率是48M,然后每隔48000出来一个Systick,这样,这个Systick就是1ms/次了。

讲到这里,似乎把Systick理解了,但其实还有更多的疑问,为什么这个芯片是运行在48M?既然是最高,那肯定还有其他的值,如何设置?好奇是人进步的阶梯,不过要是一直纠缠下去,这一篇就没法结束了。我们先强压住自己的好奇心,暂时到此为止吧。

文章评论7条评论)

登录后参与讨论

用户377235 2014-3-30 12:56

我试过定在us级呢,结果延时用不了了

teach51_109853927 2013-5-6 11:42

这个,,真猜不到,

用户377235 2013-5-6 10:48

周教授 哈哈猜不到我谁

teach51_109853927 2013-4-21 21:31

恐怕微秒级的定时在这里实际意义不是很大。

用户377235 2013-4-14 17:07

问一下,能用if (SysTick_Config(SystemCoreClock / 1000 000))来实现微秒的定时吗

用户377235 2013-1-17 14:25

不错不错,讲得很详细,其实我是在找那里分频了,既然LZ也没说,我就不去找了,那个用于提供时基我没看到,现在明白了。

jiadongchina_618047972 2013-1-5 16:04

对我这个初学者来说,真是太有用了,谢谢,谢谢
相关推荐阅读
teach51_109853927 2015-10-25 22:37
带“锁定输出”的数控稳压电源(二)
3.控制程序编写        硬件电路设计完成后,就要编写软件了。软件基本上可以分为键盘驱动,PWM生成,功能实现等部分。 3.1 键盘处理程序        STC单片机的引脚可以...
teach51_109853927 2014-03-02 12:17
带“锁定输出”的数控稳压电源(一)
本文是探索“开源培训”思想的作品。 所谓“开源培训”是指在某个社区,各志愿者提供有一定实用价值和教学价值的作品,同时详细说明制作过程,并提供制作所需的各类资源,帮助入门者快速找到适合自己的项目...
teach51_109853927 2014-02-22 21:15
《单片机项目教程》、《单片机项目教程C语言版》电子课件
《单片机项目教程》电子课件 http://pan.baidu.com/s/1kT2Yb6f 《单片机项目教程C语言版》电子课件 http://pan.baidu.com/s/1gd5O...
teach51_109853927 2014-02-22 21:05
《单片机应用与接口技术》相关资源
单片机应用与接口技术    机械工业出版社出版,江苏省教育厅推荐教材 《单片机应用与接口技术》课件 http://pan.baidu.com/s/1c0kpzUg 《单片机应用与接...
teach51_109853927 2014-02-22 15:25
便携式无线抢答器
本产品专门为开展活动时需要用到抢答器的场合设计,已制作成品,读者可以参考作为练手之用。 如图1所示左边为信号接收装置(主持人用),右边两个为发射装置(比赛选手用)。都只需要使用干电池供电即可。...
teach51_109853927 2014-02-22 15:22
Modbus通讯协议
Modbus协议最初由Modicon公司开发出来,在1979年末该公司成为施耐德自动化(Schneider Automation)部门的一部分,现在Modbus已经是工业领域全球最流行的协议。此协...
我要评论
7
19
关闭 站长推荐上一条 /2 下一条