版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式系统设计
为了实现嵌入式系统设计的可移植和可复用,嵌入式硬件和嵌入式软件均采用构件化的设计思想,即对嵌入式硬件和嵌入式软件进行封装,供系统设计者调用,并倡导嵌入式软件分层设计的理念,以大幅度降低嵌入式技术学习难度和开发难度。
本书特色:项目任务驱动,突出学以致用,注重实践创新。每个项目且均采用了“通用知识”→“嵌入式构件设计”→“应用层程序设计”→“学以致用与创新”的学习流程。采用“搭积木”的思想,逐步提高嵌入式系统设计能力。
本书可作为高等学校电子信息类、计算机类、自动化类等专业的嵌入式系统设计教材,也可作为嵌入式技术培训教材,还可供从事嵌入式技术开发的工程技术人员参考。项目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:
定义全局变量;初始化;根据全局变量的值,控制外设在工程文件中分析代码并编程:..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底层驱动构件)文件夹中,即可实现对SysTick定时器的操作。见工程文件:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx
其中,systick.h头文件主要包括相关头文件的包含、对外接口函数的声明,而systick.c源文件则是对外接口函数的具体实现,初学者不必深究。
用户只要熟悉systick.h头文件的内容,即可使用SysTick定时器底层驱动构件进行编程。【学以致用】
根据systick.h头文件,写出对SysTick定时器进行初始化,定时时间为100ms的函数调用语句。任务2.4利用内核定时器(SysTickTimer)中断实现频闪灯2.4.2利用SysTick定时中断实现频闪灯的应用层程序设计
在嵌入式软件最小系统框架下,设计07_Source(应用层软件构件)的文件,以实现小灯闪烁的效果。1)工程总头文件includes.h:
包含04、05、06文件夹中的头文件2)主程序源文件main.c:
对Systick定时器初始化,指定定时时间在工程文件中分析代码并编程:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx3)中断服务程序源文件isr.c:在中断服务程序中,实现定时功能【学以致用与创新】
(1)改变小灯闪烁的频率。
(2)控制其他小灯闪烁。
(3)流水灯的效果。
嵌入式系统设计
为了实现嵌入式系统设计的可移植和可复用,嵌入式硬件和嵌入式软件均采用构件化的设计思想,即对嵌入式硬件和嵌入式软件进行封装,供系统设计者调用,并倡导嵌入式软件分层设计的理念,以大幅度降低嵌入式技术学习难度和开发难度。
本书特色:项目任务驱动,突出学以致用,注重实践创新。每个项目且均采用了“通用知识”→“嵌入式构件设计”→“应用层程序设计”→“学以致用与创新”的学习流程。采用“搭积木”的思想,逐步提高嵌入式系统设计能力。
本书可作为高等学校电子信息类、计算机类、自动化类等专业的嵌入式系统设计教材,也可作为嵌入式技术培训教材,还可供从事嵌入式技术开发的工程技术人员参考。项目1:GPIO基础应用—实现闪灯和开关状态检测与控制功能项目2:利用定时中断实现频闪灯项目3:GPIO和定时器的综合应用—实现数码管显示、键盘测控、测温功能项目4:利用
UART
实现上位机和下位机的通信项目5:利用
Timer
实现PWM和输入捕获功能项目6:利用
ADC
设计简易数字电压表项目7:利用
SPI
实现多机串行通信项目8:利用
CAN
实现多机通信教
材
内
容
项目3GPIO和定时器的综合应用——实现数码管显示、键盘检测与控制、测温功能【项目导读】
数码管和键盘分别是嵌入式智能产品中常用的输出设备和输入设备。有些实际工程应用中需要对温度进行检测,实现某种控制功能。本项目是在项目1和项目2的基础上,综合利用GPIO和定时器实现数码管显示、键盘检测与控制、测温功能。【学习目标】(1)掌握数码管的通用知识,包括数码管的结构、基于MCU直接控制的数码管硬件构件设计方法、数码管的笔形码、基于MCU直接控制的数码管显示原理。(2)掌握键盘的通用知识,包括键盘的基本问题和两种接口方式。(3)熟悉带键盘扫描接口的数码管驱动控制专用芯片TM1637的功能特点,掌握基于TM1637的数码管和键盘硬件构件设计方法和软件构件设计方法。(4)掌握基于TM1637的数码管显示和键盘检测与控制的应用层程序设计方法。(5)熟悉1线数字式测温器件DS18B20的主要特点,掌握基于DS18B20的测温硬件构件设计方法和软件构件设计方法。(6)掌握基于DS18B20的测温功能应用层程序设计方法。项目3GPIO和定时器的综合应用——实现数码管显示、键盘检测与控制、测温功能任务3.1掌握数码管的通用知识3.1.1数码管的结构任务3.1掌握数码管的通用知识3.1.2基于MCU直接控制的数码管硬件构件设计
MCU需要9个GPIO引脚控制1位数码管,因此,若MCU直接控制4位独立数码管,则需要36个GPIO引脚,这将导致硬件电路连接复杂、MCU的GPIO引脚资源紧张。数据线位选线任务3.1掌握数码管的通用知识3.1.2基于MCU直接控制的数码管硬件构件设计
MCU直接控制四位一体组合数码管时,只需12个GPIO引脚,其中8个GPIO引脚控制数码管的8根数据线,4个GPIO引脚控制数码管的4根位选线。任务3.1掌握数码管的通用知识3.1.3数码管的笔形码共阳极数码管的笔形码(不带小数点)
若需要编制带小数点的笔形码,只需将此表中的h段改为“0”即可。
若使共阳极数码管的某段点亮,则该段对应的数据线应为低电平(逻辑0)。000000110xC00011111
10xF9111
0
00
00
0xA4111
0
0000
0xB01111
00
00
0x99111
00
00
0
0x9211
00000
0
0x8211111
000
0xF81
0000000
0x8011
00
0000
0x90111111110xFF
利用数组存放笔形码
若使共阳极数码管的某段不点亮,则该段对应的数据线应为高电平(逻辑1)。任务3.1掌握数码管的通用知识3.1.3数码管的笔形码【学以致用】
填写表3-3中共阴极数码管带小数点的“0.”
~
“9.”对应的笔形码。任务3.1掌握数码管的通用知识3.1.4基于MCU直接控制的数码管显示原理1、使某位数码管显示数据
例如,若要使第1位数码管显示数据“0”,则:
首先需要将位选线LED_CS1置为低电平,而其他位选线置为高电平;
然后将数码管数据
“0”对应的笔形码0xC0(11000000)送至数码管的8根数据线即可。011100000011任务3.1掌握数码管的通用知识3.1.4基于MCU直接控制的数码管显示原理2、使多位数码管轮流显示数据
例如,若要使4位数码管轮流显示“1”
“2”
“3”
“4”,则程序设计流程图如下:LED_CS1=0;LED_CS2=1;LED_CS3=1;LED_CS4=1;LED_D7~LED_D0=0xF9;
延时LED_CS1=1;LED_CS2=0;LED_CS3=1;LED_CS4=1;LED_D7~LED_D0=0xA4;
延时
LED_CS1=1;LED_CS2=1;LED_CS3=0;LED_CS4=1;LED_D7~LED_D0=0xB0;
延时
LED_CS1=1;LED_CS2=1;LED_CS3=1;LED_CS4=0;LED_D7~LED_D0=0x99;
延时
任务3.1掌握数码管的通用知识3.1.4基于MCU直接控制的数码管显示原理3、使多位数码管“同时”显示数据
若将延时时间缩短至5ms,则给人感觉4位数码管
“同时”显示“1”
“2”
“3”
“4”(视觉暂留)LED_CS1=0;LED_CS2=1;LED_CS3=1;LED_CS4=1;LED_D7~LED_D0=0xF9;
延时LED_CS1=1;LED_CS2=0;LED_CS3=1;LED_CS4=1;LED_D7~LED_D0=0xA4;
延时
LED_CS1=1;LED_CS2=1;LED_CS3=0;LED_CS4=1;LED_D7~LED_D0=0xB0;
延时
LED_CS1=1;LED_CS2=1;LED_CS3=1;LED_CS4=0;LED_D7~LED_D0=0x99;
延时
——动态扫描显示5ms5ms5ms5ms【知识巩固】
简述数码管动态扫描显示的原理和实现方法。任务3.2掌握键盘的通用知识3.2.1键盘的基本问题1、键盘操作、抖动问题4引脚直插式键盘按键实物图及内部结构图2引脚贴片式键盘按键实物图在嵌入式系统中,有两种常用的键盘按键。任务3.2掌握键盘的通用知识3.2.1键盘的基本问题1、键盘操作、抖动问题VCC按下抖动释放抖动稳定闭合5~10ms5~10ms理想实际
操作者几乎感觉不到抖动,但MCU以为操作者在此期间连续操作若干次键,从而引起按键命令的错误执行或重复执行,因此需要对按键抖动进行处理。(1)滤波去抖:实现键操作时电压的变化为理想的矩形波。(2)延时躲抖:MCU检测到有键被按下时,先软件延时10ms以避开按键抖动(惹不起但可以躲得起),然后再判断该键是否被按下。例如:电容滤波去抖。0.1uF任务3.2掌握键盘的通用知识3.2.1键盘的基本问题2、键盘连击问题
当按下某个键时,如果操作者还没有释放该键,则MCU以为操作者在连续操作该键(连击),对应的按键功能程序将会反复被执行。大多数应用场合需要防止连击,即一次按键只让MCU执行一次功能程序,该键不释放就不执行第二次。
在软件设计时,可这样做:当MCU检测到某个键被按下时,只执行一次功能程序,然后等待按键释放。任务3.2掌握键盘的通用知识3.2.2键盘的两种接口方式(基于MCU引脚直接连接)1、独立式键盘
各个键相互独立,按照一对一的方式连接到MCU的GPIO引脚或外部中断引脚上,另一端接地。
采用查询扫描时,MCU可通过直接读取KEY引脚的电平状态来判断键是否被按下。
采用外部中断扫描时,一般利用按键的下降沿触发MCU中断。
查键方便,但占用MCU的I/O引脚资源较多,因此一般适用于键较少的场合。
任务3.2掌握键盘的通用知识3.2.2键盘的两种接口方式(基于MCU引脚直接连接)2、矩阵式键盘
4×4=16个键,只需要MCU的8个GPIO引脚,应用于键较多的场合。
结构原理:
R1~R4引脚作为行线,C1~C4引脚作为列线,在每个行线和列线的交叉点放置一个键,当某个键被按下时,其对应的行线和列线短路,MCU通过检测是否有行线和列线短路来确定是否有键被按下,并确定被按下键的位置。行线列线任务3.2掌握键盘的通用知识【知识巩固】(1)按键抖动处理方法有哪些?它们的优点和缺点分别是什么?(2)什么是键盘连击?如何防止键盘连击现象?按键连击可以用于什么场合?(3)键盘有几种接口方式?分别对应的适用场合是什么?任务3.3基于TM1637的数码管和键盘构件设计
前面学习的数码管硬件构件和键盘硬件构件,均采用MCU的GPIO引脚直接连接方式,其优点是原理简单。但在同时需要使用数码管和键盘的应用系统设计中,若使用上述硬件构件,则明显存在占用过多GPIO引脚资源的缺点。
为了解决这一问题,可改用专门的数码管和键盘驱动芯片(如TM1637芯片)来简化硬件电路。
任务3.3基于TM1637的数码管和键盘构件设计3.3.1基于TM1637的数码管和键盘硬件构件设计1、TM1637功能特点
TM1637是一种带键盘扫描接口的数码管驱动控制专用芯片。可支持最多
6位
8段共阳极数码管显示;支持
2×8矩阵键盘扫描;两线串行接口(CLK、DIO),即MCU只需两个GPIO引脚即可与TM1637进行串行通信。数码管数据线/键盘扫描引脚数码管位选线引脚时钟线引脚串行数据输入/输出线引脚键盘数据输入引脚电源引脚(3.3~5V)接地引脚任务3.3基于TM1637的数码管和键盘构件设计3.3.1基于TM1637的数码管和键盘硬件构件设计1、TM1637功能特点任务3.3基于TM1637的数码管和键盘构件设计3.3.1基于TM1637的数码管和键盘硬件构件设计2、基于TM1637的数码管和键盘硬件构件设计图【思考总结】
使用TM1637驱动数码管和键盘,与基于MCU的GPIO引脚直接驱动数码管和键盘,有什么好处?两种驱动方式有何区别?任务3.3基于TM1637的数码管和键盘构件设计
基于TM1637的数码管和键盘软件构件TM1637_LED_KB由tm1637_led_kb.h头文件和tm1637_led_kb.c源文件组成,若使用该软件构件,则只需将这两个文件添加到所建工程的05_App(应用外设软件构件)文件夹中,即可实现MCU通过TM1637控制数码管显示功能和键盘扫描功能。
其中,tm1637_led_kb.h头文件主要包括头文件的包含、必要的宏定义、存放数码管笔形码的数组、存放键盘编码和对应键名的数组以及对外接口函数的声明,而tm1637_led_kb.c源文件是该软件构件对外接口函数的具体实现。见工程文件:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx用户只要熟悉tm1637_led_kb.h
头文件的内容,即可使用该软件构件进行编程。3.3.2基于TM1637的数码管和键盘软件构件的组成及使用方法任务3.3基于TM1637的数码管和键盘构件设计【学以致用】
根据tm1637_led_kb.h头文件,写出实现下列功能的函数调用语句。
(1)对TM1637进行初始化。
(2)TM1637驱动数码管动态显示保存在数组disp[4]中的数据。
(3)TM1637控制数码管清屏。
(4)将用于保存数码管显示数据的数组disp[4]中的元素值更新为{5,6,7,8}。
(5)将TM1637扫描2×8矩阵式键盘而获取的按下键的键名赋给变量key_name。3.3.2基于TM1637的数码管和键盘软件构件的组成及使用方法任务3.4基于TM1637的数码管显示的应用层程序设计3.4.1使用软件延时实现数码管先后显示不同的数据
在嵌入式软件最小系统框架下,设计07_Source(应用层软件构件)的文件,以实现数码管先后显示不同的数据。1)工程总头文件includes.h:包含04、05、06文件夹中的头文件2)主程序源文件main.c:
定义数组(数码管显示数据缓冲区);初始化;
在主循环中实现数码管先后显示不同的数据在工程文件中分析代码并编程:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx【学以致用与创新】
(1)在主循环中,实现4位数码管先后显示2组数据。例如在1秒内显示年份“2023”,在下1秒内显示月日“0317”。
(2)在主循环中,实现4位数码管显示秒计数值。
(3)实现数码管的高位灭零功能:对于数据“0015”,数码管上只显示“15”,而高位的“00”不显示。任务3.4基于TM1637的数码管显示的应用层程序设计3.4.2使用定时中断实现数码管先后显示不同的数据
在嵌入式软件最小系统框架下,设计07_Source(应用层软件构件)的文件,以实现数码管先后隔秒显示年份和月日的效果。1)工程总头文件includes.h:
包含04、05、06文件夹中的头文件2)主程序源文件main.c:
定义全局数组(存放数码管显示的数据);
在主程序中,初始化;
在主循环中,数码管显示全局数组中对应的数据在工程文件中分析代码并编程:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx【学以致用与创新】
(1)实现数码管显示秒计数值。
(2)实现数码管显示分和秒的计数值,并且隔秒显示分和秒之间的小数点,即实现显示相对时钟的效果。3)中断服务程序源文件isr.c:声明全局数组;
在定时中断服务程序中,实现定时功能(更新全局数组的数据)任务3.5基于TM1637的键盘检测与控制的应用层程序设计3.5.1键盘检测与控制的查询程序流程任务3.5基于TM1637的键盘检测与控制的应用层程序设计3.5.2应用实例参考程序
在嵌入式软件最小系统框架下,设计07_Source(应用层软件构件)的文件,以实现对某个键(如1号键)的按键次数进行统计,并在数码管上显示该键的按键次数。1)工程总头文件includes.h:
包含04、05、06文件夹中的头文件2)主程序源文件main.c:
定义局部变量,初始化;
在主循环中,扫描键盘并执行按键功能程序在工程文件中分析代码并编程:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx【学以致用与创新】
(1)实现在某位数码管上显示按键的键名。
(2)实现在4位数码管上分别显示按照顺序按下的4个键的键名。例如,按照顺序依次按'1'、'2'、'3'、'4'键时,4位数码管依次显示“1”“2”“3”“4”。【实践验证】
将等待按键释放对应的语句去掉,重新运行程序,观察实验现象,体会语句的作用。任务3.6基于DS18B20的测温功能设计与实现3.6.1DS18B20的主要特点和基于DS18B20的测温硬件构件设计1、DS18B20的功能特点
DS18B20是
1线数字式
测温器件。其特点如下:
(1)只有3个工作引脚:电源引脚VDD、接地引脚GND和数据总线引脚DQ。
(2)MCU只需要一个GPIO引脚即可与DS18B20的DQ引脚进行串行总线通信,其中MCU作为主设备,DS18B20作为从设备,可灵活采用单主单从或一主多从的总线结构,实现单点或多点测温。
(3)测量温度范围为-55℃~+125℃,其中在-10℃至+85℃精确度为±0.5℃。其最高分辨率(默认设置)为12位(二进制),对应0.0625℃的温度分辨率。任务3.6基于DS18B20的测温功能设计与实现3.6.1DS18B20的主要特点和基于DS18B20的测温硬件构件设计2、基于DS18B20的测温硬件构件设计图任务3.6基于DS18B20的测温功能设计与实现3.6.2基于DS18B20的测温软件构件的组成及使用方法
基于DS18B20的测温软件构件由ds18b20.h头文件和ds18b20.c源文件组成,若使用该软件构件,则只需将这两个文件添加到所建工程的05_App(应用外设软件构件)文件夹中,即可实现MCU通过1个GPIO引脚获取所测温度的功能。
其中,ds18b20.h头文件主要包括头文件的包含、必要的宏定义以及对外接口函数的声明,而ds18b20.c源文件是该软件构件对外接口函数的具体实现。见工程文件:..EmbeddedSource\03-Software\STM32F103\STM32F103.uvprojx用户只要熟悉ds18b20.h
头文件的内容,即可使用该软件构件进行编程。任务3.6基于DS18B20的测温功能设计与实现3.6.3基于DS18B20的测温功能应用层程序设计
在嵌入式软件最小系统框架下,设计07_Source(应用层软件构件)的文件,使用SysTick定时中断实现每隔1s进行一次DS18B20温度转换并通过数码管显示温度的功能。1)工程总头文件includes
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小孩不要乱吃醋教案
- 小蜜蜂幼儿音乐教案
- 常用物品做冰淇淋教案
- 幼儿园太阳手工教案
- 幼儿晨练早操音乐教案
- 内科护理三基练习题含参考答案
- 模型03 全等模型(十二大易错分析+举一反三+易错题通关)(全国)(解析版)
- 房地产整体营销方案
- 2025年智能机器人生产线生产流程评估可行性分析报告
- 2024香河辅警考试题库及答案
- 《形势与政策》大作业:怎样正确理解全过程人民民主的历史逻辑、实践逻辑与理论逻辑
- 职业病噪声课件
- 世界毒品报告
- 工业设备保温隔热工程承包合同
- 外伤手术抢救护理配合
- MEL专项培训课件
- 温暖为主题班会课件
- 书法七级考试题及答案
- 金螳螂造价管理制度
- T/CAR 16-2023制冷集装箱用外挂式柴油发电机组技术要求
- 玫瑰痤疮光电治疗临床应用
评论
0/150
提交评论