定时器的基本功能(主要功能---调试模式与定时器)
定时器的基本功能(主要功能---调试模式与定时器)来看一下数据手册,这里对定时器以及看门狗定时器进行了详细的介绍。这里说单片机当中最多包含2个高级控制定时器,也就是这个表格当中的TIM1和TIM8。四个普通定时器,也就是表格当中的TIM2、TIM3、TIM4、TIM5。两个基本定时器,就是TIM6和TIM7。另外还有两个看门狗定时器和一个系统嘀嗒定时器,这三个定时器在上面的表格当中并没有体现。来看一下STM32单片机中的定时器,首先有多达4个16位定时器,这四个是普通定时器,有TIM2、TIM3、TIM4、TIM5,每个定时器有多达4个用于输入捕获/输出比较/PWM或脉冲计数的通道和增量编码器输入。PWM是脉宽调制,可以用于控制舵机转动的角度或者是音频信号,比如说控制空调扇叶转动的角度,或者是机器人机器手臂的转动等等。还有两个十六位带死区控制和紧急刹车,用于电机控制的PWM高级控制定时器。这两个是高级控制定时器,分别是TIM1、TIM8
这篇章节我们继续介绍STM32微控制器的主要功能,上两章介绍了STM32F103微控制器重要功能中的低功耗、A/D、D/A转换、DMA、和I/O接口。今天我们来介绍调试模式和定时器功能,
首先。我们来看调试模式,什么是调试模式呢?我们在写好单片机程序之后。首先经过编译器进行编译,然后经过烧写器下载到单片机当中,运行查看效果,如果有问题需要修改程序重新编译下载,再次查看效果。这个过程就是调试过程,但是这种调试方法不能查看单片机运行过程中的细节,以及寄存器中的变化情况。STM32单片机ARM内核自带调试模块。提供串行单线调试(SWD)和JTAG接口。只要连接SWD或JTAG接口就可以调试单片机,查看寄存器中的数据。另外,Cortex-M3内核中还内嵌跟踪模块(ETM),可以给用户提供清晰的指令运行以及数据流动信息,可以通过调试软件进行查看。
这是数据手册当中关于调试模式的介绍。
我们接着来看STM32的模块框图。
在框图的左上角我们可以找到Cortex-M3的RAM内核,它的最大工作频率是72兆赫兹。在框图中上部可以找到Flash程序存储器,在Flash下面是SRAM数据存储器,另外其他功能模块都是通过总线与ARM内核连接在一起。ARM内核、存储器以及其他功能模块共同组成微控制器芯片,也可以说是单片机芯片。
再来看一下这个RAM内核。在RAM内核中内嵌了一个SW/JTAG接口,这是一个结合了JTAG和串行单线调试的接口,可以实现串行单线调试接口(SWD)或者JTAG接口的连接。SWD串行单线调试接口只需要两条线就可以完成调试接口的连接,分别是SWCLK和SWDIO,其中SWCLK是时钟信号线,SWDIO是数据信号线。这两条线与JTAG接口当中的JTCK以及JTMS共用,由于SWD相较于JTAG接口所占用的资源比较少,接口也比较少,因此使用的范围比较广。
接下来我们来了解定时器。跟51单片机一样,定时器的主要功能就是定时和计数,只是STM32单片机中定时器的更多更复杂,它有多达11个定时器,51单片机中只有2个定时器。我们可以把定时器看作一个水杯,水杯的总容量就是定时器的最大计数容量,计数器是16位的,所以计数值可以从16位的全0(0000H)开始,一直能计数到全1(FFFFH),每来一次时钟脉冲就进行一次加一计数,就好像滴一滴水滴,从0000H到FFFFH共有六万五千五百三十六个单位,直到水杯装满定时时间到,同时产生一个信号告诉单片机。在实际使用中,定时器不一定从0开始计时,水杯可以已经装有了一定的水,我们称这个值为初值。用户可以设置这个初值来调整定时时间的长短,来完成精准定时。比如说几微秒、几毫秒或者是几秒。例如说让LED灯实现一秒闪烁。这个一秒钟的定时就可以让定时器完成。一秒定时时间到就可以告诉CPU控制LED灯的亮灭,这样就可以让定时器完成定时。而CPU就可以去干自己的事情,提高了运行效率,我们这里说的是向上计数,当然也可以向下计数,每来一个时钟脉冲,就进行减一计数,直到减到零,定时时间到。向下计数同样也可以有一个计数初值,可以通过设计这个初值控制计时时间的长短,这是定时器的基本工作原理。
来看一下STM32单片机中的定时器,首先有多达4个16位定时器,这四个是普通定时器,有TIM2、TIM3、TIM4、TIM5,每个定时器有多达4个用于输入捕获/输出比较/PWM或脉冲计数的通道和增量编码器输入。PWM是脉宽调制,可以用于控制舵机转动的角度或者是音频信号,比如说控制空调扇叶转动的角度,或者是机器人机器手臂的转动等等。还有两个十六位带死区控制和紧急刹车,用于电机控制的PWM高级控制定时器。这两个是高级控制定时器,分别是TIM1、TIM8 主要可以控制机器人或机器小车的运动,还包含2个16位基本定时器用于驱动DAC,也就是数模转换,这两个是基本定时器,分别是TIM6和TIM7。大家可以看到从TIM1到TIM5到TIM8一共是8个定时器,再加上两个看门狗定时器,一个系统时间定时器,一共是11个定时器。
来看一下数据手册,这里对定时器以及看门狗定时器进行了详细的介绍。这里说单片机当中最多包含2个高级控制定时器,也就是这个表格当中的TIM1和TIM8。四个普通定时器,也就是表格当中的TIM2、TIM3、TIM4、TIM5。两个基本定时器,就是TIM6和TIM7。另外还有两个看门狗定时器和一个系统嘀嗒定时器,这三个定时器在上面的表格当中并没有体现。
我们来看一下这个表格对定时器做一个比较,单片机中包含两个高级定时器,四个普通定时器还有两个基本定时器,这八个定时器它们的计数器都是16位的,也就是说它们的计数范围都是2的16次方,也就是65536,高级和普通定时器的类型支持向上,向下,上下这样的方向计数,基本定时器只支持向上计数。这八个定时器它们的预分频系数都是1~65536之间的任意整数,同时它们都可以产生DMA请求,使得定时器的数据可以通过DMA来进行传输,不需要单片机内核的参与。另外前两种它的捕获/比较通道都是4通道的,最后高级定时器它是有互补输出的,其他两种定时器没有。现在大家只需要了解单片机当中都包含有哪些定时器以及他们的计数位数就可以了,后面的那些功能在以后的章节会给大家讲解。
这个表格当中没有列出看门狗定时器和系统嘀嗒定时器,接下来我们再来看一下这两类定时器。什么是看门狗呢?这是一个形象的比喻,其实就是一个定时器,它可以实现对单片机监控,一旦CPU的程序出现错误或者是电压过低或者是出现了一些意外的情况,看门狗就会给单片机复位,使得单片机回到第一行程序开始执行,这样就会使得单片机从错误中跳离出来,就好像看门狗的作用一样,那么怎么实现看门狗这个功能呢?刚才我们说了看门狗其实就是一个定时器,它的主要功能就是计数定时,而这时单片机就去完成自己的工作,但是单片机需要控制程序,每隔一段时间喂狗一次,喂狗就是将看门狗定时器中的计数清零,使得看门狗重新开始计数,比如说看门狗从零开始计数,计数到100的时候,看门狗就会叫,就会使单片机复位,但是单片机是在正常的工作情况下,看门狗还没有计数到100,程序就会喂狗,就会将计数清零,定时器就会重新开始计数,看门狗就计不到100就不会叫,但是如果单片机程序出现错误,程序跑飞了就喂不了狗,这时看门狗定时器就会计数到100,就会使单片机复位。所以说看门狗定时器的主要作用就是监控单片机程序的运行情况,如果程序运行正常,那么它就会去喂狗,如果程序跑飞出现错误,那么看门狗就会使单片机复位,重新开始运行,而不至于使程序跑飞。至于什么是独立看门狗和窗口型看门狗,我们简单看一下数据手册。独立看门狗是一个基于12位的递减计数器和一个8位的预分频器,它的计数是递减的,它由一个内部独立的40kHz的RC振荡器提供时钟,它可以使单片机复位。窗口型看门狗,它是一个7位递减计数器。它由主时钟驱动,具有早期预警中断功能。而独立看门狗它是复位级别的,只要产生信号就会使单片机复位。窗口型看门狗除了复位之外,还可以产生中断,这是两者的主要区别。
接下来再看系统时基定时器,它也可以翻译成系统时间定时器或者系统嘀嗒定时器。它是基于24位的递减计数器,专门用于实时操作系统。它的主要作用是通过嘀嗒定时时间,对实时操作系统的多个任务进行分时管理。在不应用于实时操作系统的时候,嘀嗒定时器也可以用于延时定时。