《基于构件化的嵌入式系统设计》 课件 项目2 利用定时中断实现频闪灯_第1页
《基于构件化的嵌入式系统设计》 课件 项目2 利用定时中断实现频闪灯_第2页
《基于构件化的嵌入式系统设计》 课件 项目2 利用定时中断实现频闪灯_第3页
《基于构件化的嵌入式系统设计》 课件 项目2 利用定时中断实现频闪灯_第4页
《基于构件化的嵌入式系统设计》 课件 项目2 利用定时中断实现频闪灯_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式系统设计

为了实现嵌入式系统设计的可移植和可复用,嵌入式硬件和嵌入式软件均采用构件化的设计思想,即对嵌入式硬件和嵌入式软件进行封装,供系统设计者调用,并倡导嵌入式软件分层设计的理念,以大幅度降低嵌入式技术学习难度和开发难度。

本书特色:项目任务驱动,突出学以致用,注重实践创新。每个项目且均采用了“通用知识”→“嵌入式构件设计”→“应用层程序设计”→“学以致用与创新”的学习流程。采用“搭积木”的思想,逐步提高嵌入式系统设计能力。

本书可作为高等学校电子信息类、计算机类、自动化类等专业的嵌入式系统设计教材,也可作为嵌入式技术培训教材,还可供从事嵌入式技术开发的工程技术人员参考。项目1:GPIO基础应用—实现闪灯和开关状态检测与控制功能项目2:利用定时中断实现频闪灯项目3:GPIO和定时器的综合应用—实现数码管显示、键盘测控、测温功能项目4:利用

UART

实现上位机和下位机的通信项目5:利用

Timer

实现PWM和输入捕获功能项目6:利用

ADC

设计简易数字电压表项目7:利用

SPI

实现多机串行通信项目8:利用

CAN

实现多机通信教

项目2:利用定时中断实现频闪灯

在项目1中实现的小灯闪烁程序采用了完全软件延时方式,即利用循环计数程序实现软件延时功能。【项目导读】

该方式有两大缺点:

①软件延时一般用于粗略延时的场合;

②执行延时子程序期间,CPU一直被占用而不能做其他事情,从而降低了CPU的利用率。项目2:利用定时中断实现频闪灯

为此,可使用MCU内部可编程的定时/计数器实现延时。用户根据需要设置定时时间,并启动定时/计数器计数,当定时时间到时,它将自动产生一个定时输出信号(通常是中断请求信号)告知CPU,使CPU转去执行定时中断服务程序,从而实现某些定时功能。定时/计数器在计数期间,与CPU并行工作,不占用CPU的工作时间。该方式通过简单的程序设置即可实现准确的定时。【项目导读】

【学习目标】(1)理解定时器的定时原理。(2)理解中断的通用知识,包括中断的基本概念、基本过程及管理机制。(3)熟悉MCU内部定时器的功能特性,掌握MCU内部定时器底层驱动构件的使用方法。(4)学会利用MCU内部定时中断功能实现频闪灯或流水灯的应用层程序设计方法。*(5)熟悉MCU内部定时器底层驱动构件源文件的设计方法。项目2:利用定时中断实现频闪灯任务2.1理解定时器的定时原理定时器本质上是一个对计数时钟进行周期统计的计数器。

在上图中,计数器采用增1计数。计数器从初值0开始计数,每经过一个计数时钟周期,计数器的值就加1,若计数器的值达到终值4,则在下一个时钟到来时,计数器溢出,计数器的值恢复至初值0,然后进行下一轮的加1计数,如此重复。

定时器每一轮的定时时间t=

计数次数×计数时钟周期

在上图中,一轮的计数次数是5,若计数时钟频率为1kHz(计数时钟周期为1ms),则一轮的定时时间为5ms。任务2.1理解定时器的定时原理对于n位(二进制)定时/计数器,计数器的终值最大值为2n-1,结合上图,定时/计数器一轮计数次数最大值为2n。n位定时/计数器一轮的最大定时时间t:

t=2n×计数时钟周期

=2n/计数时钟频率

f若

f=

时钟源频率/分频系数,则

t=2n/(时钟源频率/分频系数)

【学以致用】

若定时器为16位,其时钟源频率为f,分频系数为p,则一轮定时时间的范围是多少?任务2.1理解定时器的定时原理

当计数器溢出时,定时器可向CPU发出中断请求信号,使CPU暂停当前的工作,而转去执行中断服务程序,在中断服务程序中实现具体的定时功能(如改变小灯的状态等)。任务2.2理解中断的通用知识2.2.1中断的基本概念1、中断的含义

中断,是指MCU在正常运行程序时,由于MCU内核异常(内核中断)或

MCU各功能模块发出请求事件(非内核中断),使MCU停止正在运行的程序,而转去处理异常(使芯片复位或使MCU做出其他处理)或

执行处理内核外部事件的程序(中断服务程序)。任务2.2理解中断的通用知识2.2.1中断的基本概念2、中断源、中断向量表

引起MCU中断的事件称为中断源。MCU的中断源分为两类:内核中断源和非内核中断源。

STM32F103C8T6的中断源见表2-1。

中断向量号是每个中断源的固定编号。中断向量表是指按照中断源的中断向量号的固定顺序,用于存放中断服务程序入口地址(中断向量)的一段连续存储区域。

IRQ中断号是每个中断源的另一个编号,每一个编号代表一个中断源。在芯片头文件stm32f10x.h中,使用一个枚举类型实现了IRQ中断号的编排。任务2.2理解中断的通用知识2.2.1中断的基本概念

在进行MCU设计时,一般都定义了中断源的优先级。MCU在程序执行过程中,若有两个以上的中断同时发生,则优先级最高的中断源最先得到响应。

3、中断优先级、可屏蔽中断和不可屏蔽中断

可屏蔽中断,是指可通过编程方式关闭的中断。不可屏蔽中断,是指不能通过编程方式关闭的中断。任务2.2理解中断的通用知识2.2.2中断的基本过程1、中断请求

当某一中断源需要CPU为其服务时,它会将对应中断源的中断标志位置1,以便向CPU发出中断请求信号。2、中断检测、中断响应和中断处理

当CPU检测到有中断请求并响应中断请求时,首先保护现场(将CPU内部寄存器的数据依次压入RAM堆栈中);然后从目前等待的中断源中取出优先级最高中断源的中断向量,执行相应的中断服务程序;最后恢复现场(从RAM堆栈依次弹出CPU内部寄存器的数据)、中断返回(返回到中断前的程序)。说明:上述过程是由系统自动完成的,用户只需专注于主程序和中断服务程序的设计。

【理解概念、触类旁通】

举出日常生活中利用中断思想处理事情的例子。任务2.2理解中断的通用知识2.2.3

CM3的非内核模块中断管理机制1、CM3的中断结构及中断过程

CM3的中断结构由模块中断源、嵌套向量中断控制器(NestedVectoredInterruptController,NVIC)和

CM3内核组成。

中断过程分两步:首先,模块中断源向NVIC发出中断请求信号;然后,NVIC对发来的中断信号进行管理,判断该中断是否使能,若使能,则通过私有外设总线发送给CM3内核,由内核进行中断处理。任务2.2理解中断的通用知识2.2.3

CM3的非内核模块中断管理机制2、非内核中断使能(或禁止)配置步骤

若要使能一个非内核中断,则需要对其进行使能配置:

①将模块中断使能位置1,使模块能够发出中断请求信号;

②调用内核头文件core_cm3.h中的NVIC_EnableIRQ函数,允许模块的中断请求。

若要禁止一个非内核中断,则首先将模块中断使能位清零,禁止该模块发出中断请求信号;然后调用内核头文件core_cm3.h中的NVIC_DisableIRQ函数,禁止模块的中断请求。任务2.3利用Timer定时中断实现频闪灯2.3.1MCU的Timer基本定时底层驱动构件的使用方法1、MCU的Timer的数量和功能特性

在STM32F103C8T6中,有4个16位的定时器(Timer):TIM1~TIM4,均具有基本定时、脉宽调制(PWM)、输入捕获和输出比较等多种功能。

4个定时器均有以下3种计数模式:

(1)向上计数:从0递增计数到模值(计数终值),生成上溢事件,然后重新从0开始递增计数。

(2)向下计数:从模值(计数初值)递减计数到0,生成下溢事件,然后重新从模值开始递减计数。

(3)向上/向下双向计数:从0递增计数到模值-1,生成上溢事件;然后从模值递减计数到1,生成下溢事件。之后,计数器从0开始重新计数。

【学以致用】结合图2-1,分别画出定时器在计数初值为5时对应的向下计数模式示意图

定时器在计数初值为0、模值为5时对应的向上/向下双向计数模式示意图。任务2.3利用Timer定时中断实现频闪灯2.3.1MCU的Timer基本定时底层驱动构件的使用方法1、MCU的Timer的数量和功能特性

利用定时器实现基本定时功能时,一般采用向上或向下计数模式。对于16位定时器,一轮计数次数最大值为65536。根据定时器原理,在时钟源频率、分频系数确定的情况下,可计算出定时器一轮的定时时间范围。任务2.3利用Timer定时中断实现频闪灯2.3.1MCU的Timer基本定时底层驱动构件的使用方法2、MCU的Timer基本定时底层驱动构件的组成及使用方法

Timer基本定时底层驱动构件由timer.h头文件和timer.c源文件组成,若要使用Timer基本定时底层驱动构件,只需将这两个文件添加到所建工程的04_Driver(MCU底层驱动构件)文件夹中,即可实现对Timer的操作。见工程文件:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx

其中,timer.h头文件主要包括相关头文件的包含、一些必要的宏定义、对外接口函数的声明,而timer.c源文件则是对外接口函数的具体实现,初学者不必深究。

用户只要熟悉timer.h头文件的内容,即可使用Timer基本定时底层驱动构件进行编程。任务2.3利用Timer定时中断实现频闪灯2.3.1MCU的Timer基本定时底层驱动构件的使用方法2、MCU的Timer基本定时底层驱动构件的组成及使用方法【学以致用】

根据timer.h头文件,写出实现下列功能的函数调用语句。

(1)对定时器TIMER1进行基本定时功能初始化,定时时间10ms。

(2)使能定时器TIMER1的更新中断。

(3)获取定时器TIMER1的更新标志。

(4)清除定时器TIMER1的更新标志。任务2.3利用Timer定时中断实现频闪灯2.3.2利用Timer定时中断实现频闪灯的应用层程序设计

在嵌入式软件最小系统框架下,设计07_Source(应用层软件构件)的文件,以实现小灯闪烁的效果。1)工程总头文件includes.h:

包含04、05、06文件夹中的头文件2)主程序源文件main.c:

初始化,指定定时器的定时时间;使能定时器更新中断在工程文件中分析代码并编程:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx【思路总结】

画出上述程序的设计和执行流程图,总结使用中断的嵌入式应用层程序设计方法。3)中断服务程序源文件isr.c:在定时中断服务程序中,实现定时功能

使用中断的嵌入式应用层程序,一共有两条独立的程序运行线,一条是main.c文件中的主程序运行路线,另一条是isr.c文件中的中断程序运行线。任务2.3利用Timer定时中断实现频闪灯2.3.2利用Timer定时中断实现频闪灯的应用层程序设计1)工程总头文件includes.h:

包含04、05、06文件夹中的头文件2)主程序源文件main.c:

定义全局变量;初始化;根据全局变量的值,控制外设在工程文件中分析代码并编程:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx【学以致用与创新】

(1)改变小灯闪烁的频率,控制其他小灯闪烁。

(2)实现流水灯(如多个小灯轮流点亮)的效果。

(3)使用其他定时器获得相同的效果。3)中断服务程序源文件isr.c:声明全局变量;实现定时功能(更新全局变量的值)【程序改进,提高系统的实时性和可靠性】任务2.4利用内核定时器(SysTickTimer)中断实现频闪灯2.4.1SysTick的功能特性及其底层驱动构件的使用方法

ARMCortex-M内核中包含了一个简单的定时器SysTickTimer,又称为“滴答”定时器。SysTick定时器被捆绑在NVIC中,有效位数是24位(计数次数最大值为224),采用减1计数的工作方式,当减1计数到0时,可产生SysTick异常(中断)。1、SysTick定时器的功能特性

SysTick定时器的计数时钟频率有两种选择:AHB总线时钟频率(内核时钟频率);AHB总线时钟频率/8。

SysTick定时器的定时时间t=计数次数(滴答数)/

计数时钟频率

=(1~224)/

计数时钟频率

若使用AHB总线时钟频率64MHz,则定时时间(ms级)的合理范围为1~262ms。任务2.4利用内核定时器(SysTickTimer)中断实现频闪灯2.4.1SysTick的功能特性及其底层驱动构件的使用方法2、SysTick定时器底层驱动构件的组成及使用方法

SysTick定时器底层驱动构件由systick.h头文件和systick.c源文件组成,若要使用SysTick定时器底层驱动构件,只需将这两个文件添加到所建工程的04_Driver(MCU底层驱动构件)文件夹中,即可实现对S

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论