《基于构件化的嵌入式系统设计》 课件 项目1、2 GPIO基础应用-实现闪灯和开关状态检测与控制功能、利用定时中断实现频闪灯_第1页
《基于构件化的嵌入式系统设计》 课件 项目1、2 GPIO基础应用-实现闪灯和开关状态检测与控制功能、利用定时中断实现频闪灯_第2页
《基于构件化的嵌入式系统设计》 课件 项目1、2 GPIO基础应用-实现闪灯和开关状态检测与控制功能、利用定时中断实现频闪灯_第3页
《基于构件化的嵌入式系统设计》 课件 项目1、2 GPIO基础应用-实现闪灯和开关状态检测与控制功能、利用定时中断实现频闪灯_第4页
《基于构件化的嵌入式系统设计》 课件 项目1、2 GPIO基础应用-实现闪灯和开关状态检测与控制功能、利用定时中断实现频闪灯_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

嵌入式系统设计

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

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

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

UART

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

Timer

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

ADC

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

SPI

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

CAN

实现多机通信教

项目1:GPIO基础应用——实现闪灯和开关状态检测与控制功能【项目导读】在现代生活中,灯光除了用于照明,还广泛用于氛围营造(如城市景观灯、舞台变幻灯、广告霓虹灯等)或状态指示(如交通信号灯、设备状态指示灯等)。在嵌入式系统中,LED小灯是必备的状态指示设备。另外,在现实生活的很多场合中,通过开关(switch)控制用电设备。通过对微控制器编程,可以控制小灯的状态(点亮或熄灭),也可以检测开关的状态(闭合或断开),从而实现软件干预硬件。【学习目标】(1)熟悉嵌入式系统的概念、组成以及嵌入式技术学习方法。(2)熟悉嵌入式芯片STM32F103C8T6资源和硬件最小系统。(3)理解GPIO(通用输入/输出)的通用知识,掌握微控制器GPIO底层驱动构件的使用方法。(4)掌握小灯、开关等应用外设的嵌入式硬件构件和嵌入式软件构件的设计方法和使用方法。(5)熟悉嵌入式软件最小系统的工程文件组织方法,并能进行闪灯、流水灯和开关检测与控制功能的应用层程序设计。(6)掌握嵌入式软件集成开发环境KeilMDK及目标程序下载软件J-Flash的使用方法,为后续学习奠定良好的基础。*(7)熟悉微控制器GPIO底层驱动构件源文件的设计方法。任务1.1熟悉嵌入式系统和课程学习方法1.1.1嵌入式系统的概念和组成1、通用计算机和嵌入式计算机

微型计算机具有很大的通用性,所以又称通用计算机。

测控领域的计算机系统是嵌入到应用系统中,以计算机技术为基础,软、硬件可裁剪,适应应用系统对功能、成本、体积、可靠性、功耗严格要求的专用计算机系统,即嵌入式计算机系统,简称嵌入式系统(EmbeddedSystem)。

通俗地说,除了通用计算机(如台式计算机和笔记本计算机)外,所有包含CPU的系统都是嵌入式系统,其中其中以32位/64位ARM微处理器为核心的嵌入式系统应用越来越广泛。任务1.1熟悉嵌入式系统和课程学习方法1.1.1嵌入式系统的概念和组成1、通用计算机和嵌入式计算机

目前,ARM主要有以下3个系列的内核,对应不同的应用领域:(1)Cortex-A内核的应用处理器(ApplicationProcessor,AP),主要面向智能手机、平板电脑、智能终端等多媒体领域。(2)Cortex-R内核的实时处理器(Real-TimeProcessor,RTP),主要面向汽车电子等对实时性要求很高的领域。(3)Cortex-M内核的微控制器(MicroControllerUnit,MCU,国内也称为单片机),主要面向工业控制、农业控制、智能仪器仪表、智能家电、机电产品和汽车电子等领域。【知识巩固】简述通用计算机与嵌入式计算机的区别。任务1.1熟悉嵌入式系统和课程学习方法1.1.1嵌入式系统的概念和组成2、以MCU为核心的嵌入式系统(1)MCU的基本结构

MCU的基本含义:在一块芯片上集成了CPU、ROM、RAM、定时/计数器、中断系统、看门狗及通用输入输出(GPIO)、模/数(A/D)转换、数/模(D/A)转换、串行通信I/O等多种输入输出接口的比较完整的数字处理系统。CPU与其他部件交互是通过MCU内部总线实现的。任务1.1熟悉嵌入式系统和课程学习方法1.1.1嵌入式系统的概念和组成2、以MCU为核心的嵌入式系统(2)以MCU为核心的嵌入式系统的基本组成任务1.1熟悉嵌入式系统和课程学习方法1.1.1嵌入式系统的概念和组成【知识巩固】(1)简述MCU的基本含义。(2)画出以MCU为核心的嵌入式系统组成框图。1.1.2

嵌入式系统的知识体系和学习建议任务1.1熟悉嵌入式系统和课程学习方法

嵌入式硬件构件设计主要包括MCU硬件最小系统(硬件核心构件)设计和应用外设硬件构件(小灯LIGHT、蜂鸣器BZ、开关SW、键盘KB、数码管LED、液晶LCD等)设计。

嵌入式软件构件设计采用分层设计思想,自下而上依次是“底层驱动构件”、“应用外设软件构件”和“应用层软件构件”共3层软件设计。为了实现嵌入式系统设计的可移植和可复用,大幅度降低嵌入式技术学习难度和开发难度,嵌入式硬件和软件均需采用“构件化”设计。

其中底层驱动构件和应用外设软件构件都包括对应的.h头文件和.c源文件,而应用层软件构件包括总头文件includes.h、主程序源文件main.c和中断服务程序源文件isr.c。

通用软件构件与CPU和MCU基本无关,是服务于以上3层软件设计的。

随着技术的发展,MCU的硬件集成度越来越高,使得嵌入式硬件设计难度不断降低,因此嵌入式软件设计在整个嵌入式系统开发中所占的分量越来越大。1.1.2

嵌入式系统的知识体系和学习建议

嵌入式软件设计主要采用C语言及少量的汇编语言。

任务1.1熟悉嵌入式系统和课程学习方法1.1.2

嵌入式系统的知识体系和学习建议

嵌入式软件设计与调试是在嵌入式硬件的基础上协同进行的,其过程是在PC上利用嵌入式软件开发环境(如KeilMDK、IAR等)进行程序的编辑、编译和连接,生成工程对应的目标代码;最后将生成的目标代码通过写入器下载到嵌入式芯片中运行与调试。任务1.1熟悉嵌入式系统和课程学习方法MCU写入器任务1.2熟悉MCU资源和硬件最小系统1.2.1

STM32F1系列MCU简介

内核:ARMCortex-M3、32位。

特点:

CPU最高工作频率为72MHz,支持单周期乘法和硬件除法工作电压范围为2.0~3.6V,工作温度范围为-40~85℃

支持使用内部时钟

使用外部时钟

支持SWD和JTAG调试

STM32F103C8T6资源:

封装形式:

LQFP48,共有48个引脚

片内存储器:64KB的Flash存储器;20KB的SRAM

片内外设:

GPIO(可用引脚为34个)、4个16位Timer、2个12位ADC、

3个UART、2个SPI、2个I2C、1个CAN、1个USB、1个看门狗等

性价比高:

可满足工业、医疗和消费类市场等多种应用需求,可完全替代传统的8位/16位MCU。任务1.2熟悉MCU资源和硬件最小系统

(1)片内Flash存储映射(0x0800_0000~0x0800_FFFF),共64KB,一般被用来存储中断向量、程序代码、常数等,其中前236B为中断向量区(将在2.2.1节中具体介绍)。

(2)片内SRAM存储映射(0x2000_0000~0x2000_4FFF),共20KB,一般被用来存储全局变量、静态变量、临时变量(堆栈空间)等。1、MCU的存储映射

ARMCortex-M处理器直接寻址空间为4GB,地址范围为0x0000_0000~0xFFFF_FFFF。

存储映射,是指将4GB空间看作存储器,对各类物理资源(Flash存储器、SRAM、外设等)在4GB空间内进行统一编址,CPU可通过直接地址访问物理资源。

(3)外设(GPIO、UART、Timer、ADC等)寄存器存储映射,只需了解,实际应用中,可直接使用芯片头文件中给出的相关宏定义。1.2.2

MCU存储映射、引脚功能与硬件最小系统任务1.2熟悉MCU资源和硬件最小系统2、MCU的引脚功能1.2.2

MCU存储映射、引脚功能与硬件最小系统任务1.2熟悉MCU资源和硬件最小系统2、MCU的引脚功能

(1)硬件最小系统引脚:需要服务的引脚,包括电源、复位、晶振、程序写入接口(SWD)等引脚。1.2.2

MCU存储映射、引脚功能与硬件最小系统

从需求和供给的角度,将MCU引脚分为硬件最小系统引脚和I/O端口资源类引脚两大类。任务1.2熟悉MCU资源和硬件最小系统2、MCU的引脚功能

I/O引脚一般具有多个复用功能,详见表1-4。在实际应用时只能使用其中的一个功能。在嵌入式系统设计中,需要根据所使用的外设(含片内外设),对MCU的引脚资源进行统筹规划,以免多个外设使用相同的引脚而相互冲突。

(2)I/O端口资源类引脚:对外提供服务。

STM32F103C8T6具有A、B、C、D四个端口,37个I/O引脚。若使用内部时钟,则除去硬件最小系统所使用的的SWD接口的2个引脚(PA13、PA14)和启动方式所使用的1个引脚(PB2),在实际应用中,可有34个对外提供服务的通用I/O引脚。

从需求和供给的角度,将MCU引脚分为硬件最小系统引脚和I/O端口资源类引脚两大类。1.2.2

MCU存储映射、引脚功能与硬件最小系统任务1.2熟悉MCU资源和硬件最小系统3、MCU的硬件最小系统

MCU硬件最小系统是可以使MCU内部程序正常运行的最小规模的电路,主要包括MCU和电源、晶振、复位、写入调试器接口等外围电路。1.2.2

MCU存储映射、引脚功能与硬件最小系统任务1.2熟悉MCU资源和硬件最小系统【知识巩固】(1)MCU的Flash存储器和RAM分别存储哪些内容?(2)从需求和供给的角度,可将MCU的引脚分为几类?(3)简述MCU硬件最小系统的含义和组成。任务1.3

掌握MCU的GPIO底层驱动构件使用方法

GPIO(GeneralPurposeInputOutput

),通用输入/输出,它是I/O的最基本形式。1.3.1

GPIO的通用知识1、GPIO概念

MCU的大多数GPIO引脚可以通过编程来设定其工作方式为输入或输出,称之为双向GPIO。

某个引脚作为通用输入引脚,MCU可以通过读取其内部寄存器的值“1”或“0”,以确定该引脚的输入状态是高电平还是低电平,即开关量输入。

某个引脚作为通用输出引脚,MCU可以通过向其内部寄存器写“1”或“0”,以控制该引脚输出高电平或低电平,即开关量输出。

若MCU的某个引脚通过一个电阻接电源(VCC),则该电阻被称为“上拉电阻”。

若MCU的某个引脚通过一个电阻接地(GND),则该电阻被称为“下拉电阻”。1.3.1

GPIO的通用知识2、上拉电阻、下拉电阻与输入引脚的基本接法任务1.3

掌握MCU的GPIO底层驱动构件使用方法【思考】MCU是如何判断开关状态的?

作为通用输出引脚,MCU内部程序向该引脚输出高电平或低电平驱动外部设备工作,即开关量输出。输出引脚O1和O2分别采用了直接驱动和放大驱动方式。1.3.1

GPIO的通用知识3、输出引脚的基本接法任务1.3

掌握MCU的GPIO底层驱动构件使用方法【思考】

MCU控制LED小灯和蜂鸣器的原理?

为了实现程序的可移植和可复用,减小重复劳动,MCU底层驱动程序封装成构件。GPIO底层驱动构件由gpio.h头文件和gpio.c源文件组成,若要使用GPIO底层驱动构件,只需将这两个文件添加到所建工程的04_Driver(MCU底层驱动构件)文件夹中,即可实现对GPIO引脚的操作。见工程文件:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx

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

用户只要熟悉gpio.h头文件的内容,即可使用GPIO底层驱动构件进行编程,实现通过GPIO对不同外设进行检测或控制的功能(如检测开关的状态、控制小灯的亮灭等)。1.3.2

MCU的GPIO底层驱动构件使用方法任务1.3

掌握MCU的GPIO底层驱动构件使用方法任务1.4嵌入式构件化设计及闪灯的实现

为了实现嵌入式系统设计在不同MCU和不同应用场合中的可移植和可复用,降低嵌入式技术学习难度和开发难度,嵌入式硬件和软件均需采用“构件化”设计。现以小灯构件设计为例,说明嵌入式硬件构件和软件构件的设计方法。1.4.1

小灯硬件构件和软件构件的设计及使用方法1、小灯硬件构件的设计及使用方法a)小灯硬件构件b)小灯硬件构件与MCU的引脚连接

图中虚线框内的粗体标识为硬件构件的接口注释,以便于理解该接口的含义和功能;虚线框外的正体标识为硬件构件的接口网标,具有电气连接特性,表示硬件构件的接口与MCU的引脚相连接。硬件构件在不同应用系统中移植和复用时,仅需修改接口网标。1.4.1

小灯硬件构件和软件构件的设计及使用方法2、小灯软件构件的组成、设计及使用方法

小灯软件构件由

light.h

头文件

light.c

源文件组成,若要使用小灯软件构件,只需将这两个文件添加到所建工程的05_App(应用外设软件构件)文件夹中即可实现对小灯的控制。

其中,light.h

头文件主要包括相关头文件的包含、小灯硬件构件相关的宏定义、小灯构件对外接口函数的声明。light.c

源文件是小灯构件对外接口函数的具体实现。见工程文件:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx用户只要熟悉light.h头文件的内容,即可使用小灯软件构件进行编程。任务1.4嵌入式构件化设计及闪灯的实现【学以致用】根据

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

(1)将小灯LIGHT1初始化为熄灭状态。

(2)控制小灯LIGHT1点亮。

(3)改变小灯LIGHT1的状态。1.4.2

嵌入式软件最小系统设计——实现闪灯1、嵌入式软件最小系统

在嵌入式基础实践中,一般以“MCU控制小灯闪烁”作为入门实验,对应的程序框架称为“嵌入式软件最小系统”(具体解释详见表1-5)。

在此框架下可通过添加其他软件构件和修改应用层程序(工程源程序)完成不同功能的软件设计。

对初学者,学习重点是:①熟悉04_Driver(MCU底层驱动构件)、05_App(应用外设软件构件)和

06_Soft(通用软件构件)这几个文件夹中的头文件内容,掌握对外接口函数的调用方法;②根据系统功能需求,进行应用层程序设计和优化,即设计07_Source(应用层软件构件)文件夹中的文件。见工程文件:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx

其中,“04底层驱动构件”、“05应用外设软件构件”、“06通用软件构件”、“07应用层软件构件”的文件都是由本构件的.h和.c文件组成。

任务1.4嵌入式构件化设计及闪灯的实现2、公共要素软件构件的组成及使用方法

公共要素软件构件由common.h头文件和

common.c源文件组成,使用时,需将这两个文件添加到所建工程的06_Soft(通用软件构件)文件夹中。用户只要熟悉common.h头文件的内容,即可掌握该软件构件的使用方法。见工程文件:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx1.4.2

嵌入式软件最小系统设计——实现闪灯任务1.4嵌入式构件化设计及闪灯的实现3、闪灯的应用层程序设计

在嵌入式软件最小系统框架下,设计07_Source(应用层软件构件)的文件,以实现小灯闪烁的效果。1)工程总头文件includes.h:包含04、05、06文件夹中的头文件2)主程序源文件main.c:

小灯初始化,在主循环中实现闪灯效果在工程文件中分析代码并编程:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx1.4.2

嵌入式软件最小系统设计——实现闪灯任务1.4嵌入式构件化设计及闪灯的实现【思路总结】画出小灯闪烁的程序执行流程图。(1)编译工程文件,生成MCU可执行的代码文件(.hex文件)(2)将编译生成的.hex文件下载至目标MCU中,运行程序【学以致用与创新】请通过修改主程序的代码,分别完成:(1)改变小灯闪烁的频率。(2)控制其他小灯闪烁。(3)实现流水灯的效果。任务1.4嵌入式构件化设计及闪灯的实现1.4.2

嵌入式软件最小系统设计——实现闪灯4、闪灯效果的测试任务1.5开关状态检测与控制功能的设计与实现1.5.1

开关硬件构件和软件构件的设计及使用方法1、开关硬件构件的设计及使用方法a)开关硬件构件b)开关硬件构件与MCU的引脚连接任务1.5开关状态检测与控制功能的设计与实现1.5.1

开关硬件构件和软件构件的设计及使用方法2、开关软件构件的组成、设计及使用方法

开关软件构件由

sw.h头文件

sw.c

源文件组成,若要使用开关软件构件,只需将这两个文件添加到所建工程的05_App(应用外设软件构件)文件夹中,即可实现对开关的操作。

其中,sw.h

头文件主要包括相关头文件的包含、开关硬件构件相关的宏定义、开关构件对外接口函数的声明。sw.c

源文件是开关构件对外接口函数的具体实现。见工程文件:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx用户只要熟悉sw.h

头文件的内容,即可使用开关软件构件进行编程。【学以致用】根据sw.h头文件,写出实现下列功能的函数调用语句。(1)将开关SW1初始化。(2)获取开关SW1的状态。任务1.5开关状态检测与控制功能的设计与实现1.5.2

开关状态检测与控制功能的应用层程序设计

利用小灯软件构件和开关软件构件,编程实现开关状态检测与控制功能:开关SW1闭合时,小灯LIGHT1亮;SW1断开时,小灯LIGHT1灭。任务1.5开关状态检测与控制功能的设计与实现1.5.2

开关状态检测与控制功能的应用层程序设计见工程文件:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx

在嵌入式软件最小系统框架下,设计07_Source(应用层软件构件)的文件,以实现开关状态检测与控制功能。1)工程总头文件includes.h:包含04、05、06文件夹中的头文件2)主程序源文件main.c:

初始化,在主循环中查询开关状态,并控制小灯亮、灭【学以致用与创新】实现多路开关状态检测与控制功能。

嵌入式系统设计

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

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

本书可作为高等学校电子信息类、计算机类、自动化类等专业的嵌入式系统设计教材,也可作为嵌入式技术培训教材,还可供从事嵌入式技术开发的工程技术人员参考。项目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:

定义全局变量;初始化;根据全局变量

温馨提示

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

评论

0/150

提交评论