《国产嵌入式技术及应用实践》全套教学课件_第1页
《国产嵌入式技术及应用实践》全套教学课件_第2页
《国产嵌入式技术及应用实践》全套教学课件_第3页
《国产嵌入式技术及应用实践》全套教学课件_第4页
《国产嵌入式技术及应用实践》全套教学课件_第5页
已阅读5页,还剩376页未读 继续免费阅读

下载本文档

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

文档简介

项目1国产嵌入式技术概览项目1国产嵌入式技术概览项目2仓储火灾检测终端设计与开发项目3指纹门禁应用终端设计与开发项目4智能温湿度检测终端设计与实现项目5可穿戴应用终端设计与实现全套可编辑PPT课件

任务1初识国产嵌入式与微控制器技术项目1国产嵌入式技术概览项目2仓储火灾检测终端设计与开发项目3指纹门禁应用终端设计与开发项目4智能温湿度检测终端设计与实现项目5可穿戴应用终端设计与实现全套可编辑PPT课件

什么是嵌入式?起初,嵌入式系统的萌芽植根于单片机技术的诞生,20世纪70年代,随着单片机的问世,汽车、家用电器、工业机械、通信设备等万千产品步入电子化时代,实现了功能增强:操作简便、速度提升、成本降低。这些初步的嵌入式应用以8位芯片为核心,执行简单的单线程程序,尚不具备现代意义上的“系统”完整性。进入80年代初,随着商业化“操作系统”被引入嵌入式应用开发,编程实践发生了革新,显著缩短了开发周期、降低了成本并提升了效率,正式标示着“嵌入式系统”时代的到来。此阶段的操作系统核心实质为实时系统内核,融合了传统操作系统的关键特性,如任务管理、进程间通信、同步机制、中断处理及内存管理等,代表性的产品有ReadySystem的VRTX、ISI的PSOS、IMG的VxWorks以及QNX的QNX系统。这些系统共有的嵌入式特性包括抢占式调度、快速响应、确定性执行时间、小巧且高度可定制的核心,以及良好的跨处理器移植能力,强化了实时性和可靠性,为嵌入式应用打开了更宽广的开发天地,释放了开发者潜能。进入90年代后,随着对实时性要求的提升及软件复杂度的增长,实时内核进化为功能更全面的实时多任务操作系统(RTOS),成为了嵌入式系统领域的标准配置。众多企业洞悉到这一领域的巨大潜力,纷纷投身嵌入式操作系统开发,除了前述的行业先锋,市场上涌现了PalmOS、WindowsCE、嵌入式Linux、Lynx、Nucleus以及Hopen、DeltaOS等新面孔。嵌入式系统构成了众多日常装置及设备的核心,作为一种专业定制的计算机系统,它们被内置在诸如手表、微波炉、录像机乃至汽车等一切具备数字接口的设备中。这类系统本质上市通过一个嵌入式处理器控制板实现,其中控制程序存储在ROM中,确保了高度的稳定性和针对性功能。尽管某些情况下,嵌入式系统会搭载一个操作系统,但大多数设计倾向于利用单一程序来完成所有的控制逻辑。嵌入式系统是软件、硬件乃至必要时的机械部件的紧密结合体,专为满足特定应用需求而定制。国内嵌入式系统普遍被广泛定义为:一种以应用为核心,依托计算机技术,能够灵活裁剪软硬件配置,严格符合功能、可靠性、成本控制、体积及能耗等特定要求的专用计算机系统。那么,这些“专用”方向具体涵盖了哪些领域呢?办公自动化:促进高效办公的设备,如打印机、复印机、传真机;国防与航天:尖端科技产品,包括无人机、雷达系统、作战机器人;家用电器:提升生活品质的智能产品,如数字电视、扫地机器人、智能家居系统;医疗电子:关乎健康的精密仪器,如生化分析仪、血液分析仪及CT扫描设备;汽车电子:强化车辆性能与安全的系统,涉及引擎控制、安全防护、导航与车载娱乐;通信网络:支撑信息流通的基础设施,如交换机、路由器及网络安全设备;通讯与娱乐:丰富人们生活的智能设备,包括智能手机、数码相机、音乐播放器、可穿戴设备及游戏机;工业控制:自动化生产与监控的关键组件,涵盖工控机、POS机、ATM机、安防监控及各类仪器仪表。一个嵌入式系统的典型架构如下:从硬件角度来看,嵌入式系统就是以处理器(CPU)为核心,依靠总线(Bus)进行连接的多模块系统:国产嵌入式系统发展史国内参与嵌入式系统的公司数量较多,但普遍进入行业较晚,从2000年到现在,国内的操作系统如雨后春笋般发展出来。1.科银京成-Deltaos(道系统)“道系统”操作系统通用版(DeltaOS)是一款面向各领域的嵌入式实时操作系统,支持单核及多核CPU硬件配置,可替换相关领域的VxWorks6.8/6.9操作系统。国防装备领域中,对实时性有一定要求的嵌入式计算机系统。可应用于装备电子应用领域指控、火控、雷达、水声、光电、通信等系统,还可用于对应系统研制中的试验仿真系统。2.睿赛德RT-threadRT-Thread是一个集实时操作系统(RTOS)内核、中间件组件和开发者社区于一体的技术平台,由熊谱翔先生带领并集合开源社区力量开发而成,RT-Thread也是一个组件完整丰富、高度可伸缩、简易开发、超低功耗、高安全性的物联网操作系统。RT-Thread具备一个IoTOS平台所需的所有关键组件,例如GUI、网络协议栈、安全传输、低功耗组件等等。经过11年的累积发展,RT-Thread已经拥有一个国内最大的嵌入式开源社区,同时被广泛应用于能源、车载、医疗、消费电子等多个行业。3.科东软件IntewellOSIntewell嵌入式操作系统是科东软件自主研发工业嵌入式实时操作系统,解决工业现场层操作系统的自主可控、安全可信问题。Intewel操作系统基于微内核架构,具备软件定义控制、高实时(us级响应)、高可靠、自主可控、多业务承载、软硬件解耦等一系列的特性,实现了控制、计算、网络、云服务技术的融合统一。4.翼辉SylixOS嵌入式操作系统RTOS介绍,SylixOS是一个开源的跨平台的大型实时操作系统(RTOS),SylixOS诞生于2006年,经过十多年的持续开发,SylixOS已成为功能最为全面的国产操作系统之一。目前已有众多产品和项目应用案例,行业涉及航空航天、军事防务、轨道交通、智能电网、工业自动化等诸多领域。SylixOS完全符合POSIX规范,开源社区丰富的自由软件移植非常方便。5.HUAWEILiteOS鸿蒙操作系统Huawei-LiteOS是华为1+2+1物联网解决方案的组成部分,遵循BSD-3开源许可协议,自开源以来,已经和一些厂商、家电企业达成了合作,华为希望通过开源、开放将LiteOS打造成像安卓一样的物联网终端的物联网操作系统。6.中移OneOS中移OneOS是中国移动专为物联网领域设计的一款轻量级、高效率且安全的操作系统,它支持多平台CPU架构,具备低功耗特性,并通过模块化设计实现了高度的可裁剪性。OneOS不仅兼容POSIX等标准接口,提升开发便利性,还内置了丰富的组件与服务,覆盖从智能穿戴到工业物联网的广泛应用场景。自2018年研发启动,2020年正式面世以来,OneOS不断迭代升级,致力于构建开放的物联网生态系统,通过与产业链伙伴的深度合作,为5G时代的物联网创新与发展提供强大动力。什么是微控制器微控制器(Microcontroller,简称MCU,又称单片机)是一种集成电路芯片,它将微型计算机的主要组成部分集成在单一的硅片上。这种集成包括了中央处理器(CPU)、随机存取存储器(RAM)、只读存储器(ROM或FlashMemory用于存储固件)、输入/输出(I/O)接口、定时器、计数器以及其它外设功能模块。按处理器位数划分,MCU可分为4位、8位、16位、32位和64位微处理器,如今32位MCU已经成为主流,正在逐渐替代过去由8/16位MCU主导的应用和市场。1971年,Intel公司推出世界上第一个微处理器芯片4004,这标志着微处理器和微机时代的开始。随后,Intel公司继续推出多款微处理器,如8008(1972年)和8080(1974年),这些微处理器为后续微控制器的诞生奠定了基础。1980年,Intel推出了具有里程碑意义的MCS-51(通常称为8051),它的结构简单、指令集易于学习,且具有良好的兼容性,迅速成为业界标准。8051的成功促使了许多厂商开始生产兼容8051内核的微控制器。进入21世纪,ARM架构因其低功耗、高性能的特点,在微控制器领域迅速崛起。众多半导体厂商,如NXP、STMicroelectronics、TI等,开始基于ARM内核设计微控制器,推动了MCU在移动通信、物联网(IoT)、可穿戴设备等新兴领域的应用。同时,32位及以上的高性能MCU逐渐成为主流,但8位和16位MCU仍因其成本优势在某些应用中保持重要地位。目前微控制器的主流架构主要包括RISC(精简指令集计算机)和CISC(复杂指令集计算机)两种。RISC架构以其高效、低功耗的特性,在嵌入式系统和移动设备等资源受限的应用中占据主导地位,如ARM架构的微控制器。而CISC架构则因其更强的功能和灵活性,在一些需要复杂控制和数据处理的应用中仍有一席之地,如基于8051内核的微控制器。随着技术的不断发展,新的微控制器架构也在不断涌现,以满足不同应用的需求。国产微控制器发展史中国的微控制器产业起步相对较晚,大约在20世纪80年代,随着国家改革开放政策的实施,国外的微控制器技术和产品开始进入中国市场。起初,国内主要是通过进口和仿制国外的MCU产品,用于简单的控制应用,如家电控制、工业自动化等领域。进入21世纪,随着国家对半导体行业的重视和政策扶持,国内MCU企业加大研发投入,技术实现快速进步。一些企业开始掌握32位MCU设计技术,甚至在某些细分领域达到国际先进水平。1.兆易创新(GigaDevice)兆易创新成立于2005年,总部位于中国无锡新区。公司自创立之初就专注于嵌入式闪存产品的研发和生产,填补了国内在该领域的空白。其主要业务涵盖了闪存芯片的设计、开发和销售,特别是在NorFlash领域取得了显著成就,成为了全球重要的NorFlash供应商之一。在2014年,兆易创新宣布进军微控制器(MCU)市场,推出GD32系列微控制器。GD32系列基于ARMCortex-M内核,具有高性能和低功耗特点,迅速获得市场认可。2.新唐科技新唐科技于2008年7月成立,在2010年进入微控制器(MCU)市场,推出基于ARMCortex-M0内核的NuMicro®系列微控制器,后面相继推出基于ARMCortex-M4、ARMCortex-M0+、ARMCortex-M23内核的系列微控制器,并应用在汽车、工业控制、通用MCU领域。3.中科芯中科芯成立于2008年9月23日,位于江苏省无锡市,是中国电子科技集团公司(CETC)及其旗下多个研究所共同发起设立的。主要从事集成电路、半导体分立器件、电子元件及组件、照明用发光二极管(LED管)、电子产品等的设计、制造、销售和技术服务。中科芯MCU基于ARMCortex-M系列内核进行开发,涵盖了Cortex-M0、Cortex-M3、Cortex-M4等多个大类。通过不断的研发和创新,中科芯MCU产品已经形成了基于ARMCortex-M0、M3、M4内核的多个系列,包括CKS32F030、CKS32F031、CKS32F051、CKS32F103等。4.华大半导体华大半导体有限公司成立于2014年5月8日,是中国电子信息产业集团有限公司(CEC)整合旗下集成电路企业而组建的专业子集团。自成立以来,迅速布局集成电路设计、制造、封测及应用的全产业链,致力于成为集成电路设计、制造、应用一体化解决方案提供商,其中MCU业务主要由小华半导体负责。国产微控制器发展史小华半导体面向家电、工业、汽车、物联网等领域,专注于核心智能控制芯片的设计,基于ARMCortex-M0、M4内核研发MCU系列产品,为客户提供通用控制MCU、电机控制MCU、汽车电子MCU、超低功耗MCU四大产品线。由此可见微控制器发展到现在很多单片机都是基于Cortex内核ARM架构研发出来的,请根据任务表,分小组调研现在国产主流的MCU芯片和国产操作系统,并研究芯片与操作系统是否有相应驱动,应用在哪些领域?任务结束任务2嵌入式平台开发环境搭建163HC32F460芯片简介小华半导体面向家电、工业、汽车、物联网等领域,专注于核心智能控制芯片的设计,为客户提供通用控制、电机控制、汽车电子、超低功耗四大产品线,以及相应算法和软件在内的一整套系统及解决方案。163小华半导体推出的一款高性能微控制器(MCU)产品线,主要定位于需要较高计算能力和多样接口应用的场合,如工业控制、家电、高端消费电子、通信和汽车电子等领域里面有众多的产品线。HC32F4系列的芯片有很多,本次开发选择的是HC32F460PETB,这是一款基于ARMCortex-M4内核的高性能微控制器(MCU)。国产嵌入式系统发展史芯片特点:高性能内核:基于ARMCortex-M4内核,支持全温域下主频高达200MHz,为复杂计算和实时控制提供了强大的处理能力。大容量存储器:内置512KBFlash和192KBSRAM,满足程序和数据存储需求,确保程序的高效运行。丰富的ADC和比较器资源:配备2个12-bit2.0MspsADC单元,以及3个高速COMP和1个PGA,支持高精度模拟信号处理。强大的Timer资源:提供丰富的Timer资源,支持各种定时和计数功能,满足复杂应用需求。多通信接口:支持4路U(S)ART、4路SPI、1路QSPI、1路CAN2.0B、1个USB2.0等通信外设,实现与各种外部设备的灵活连接和数据交换。低功耗设计:采用先进的低功耗技术,支持多种低功耗模式,有效降低系统功耗,延长设备使用时间。近年来,STM32F4系列芯片在市场上应用广泛。然而,自2020年起,STMicroelectronics的芯片价格急剧上涨,导致许多国内研发项目纷纷转向价格更为实惠的国产芯片。华大半导体的HC32F4系列与STM32F4芯片同样采用ARMCortex-M4内核,并集成浮点运算单元(FPU)。HC32F4的最高主频达到200MHz,比STM32F4的180MHz高出20MHz。此外,HC32F4的功能引脚能够在一定范围内自由映射,支持多功能引脚的灵活应用,而STM32F4则无法做到这一点。这些优势使得国产芯片能够利用STMicroelectronics芯片的先前应用经验,并以更优化的性能推出同类产品。HC32F460芯片引脚简介HC32F460PETB为100个引脚,VCC供电为1.8V至3.6V电压,VSS为电源地。HC32F460总线介绍HC32F460总线由32位多层AHB总线矩阵构成,可实现以下主机总线和从机总线的互连:主机总线Cortex-M4F内核CPU-I总线,CPU-D总线,CPU-S总线系统DMA_1总线,系统DMA_2总线USBFS_DMA总线、从机总线FlashICODE总线、FlashDCODE总线、FlashMCODE总线(CPU以外其他主机访问Flash的总线)SRAMH总线(SRAMH32kB)SRAMA总线(SRAM164KB)SRAMB总线(SRAM264KB,SRAM328KB,Ret_SRAM4KB)APB1外设总线(AOS/EMB/Timers/SPI/USART/I2S)APB2外设总线(Timers/SPI/USART/I2S)APB3外设总线(ADC/PGA/TRNG)APB4外设总线(FCM/WDT/CMP/OTS/RTC/WKTM/I2C)AHB1外设总线(KEYSCAN/INTC/DCU/GPIO/SYSC)AHB2外设总线(CAN/SDIOC)AHB3外设总线(AES/HASH/CRC/USBFS)AHB4外设总线(SDIOC)AHB5外设总线(QSPI)总线负责实现主机对从机的读写访问。主机模块工作频率比从机模块高(如CPU-S访问RTC)时,总线自动进行降频同步处理。主机模块工作频率比从机模块低(如USBFS_DMA访问SRAMH)时,总线自动进行升频同步处理。通过总线矩阵,不同主机总线的访问目标不冲突时,各访问能够同时进行。例如CPU-I访问Flash,CPU-D访问SRAMH,CPU-S访问APB外设,DMA_1访问SRAMA,DMA_2访问SRAMB,USBFS_DMA访问AHB5的外部扩展空间,这些访问可以同时进行。HC32F460时钟介绍时钟控制单元提供了一系列频率的时钟功能,包括:一个外部高速振荡器、一个外部低速振荡器、两个PLL时钟、一个内部高速振荡器、一个内部中速振荡器、一个内部低速振荡器、一个SWDT专用内部低速振荡器、时钟预分频器、时钟多路复用和时钟门控电路。AHB、APB和Cortex-M4时钟都源自系统时钟,最大运行时钟频率可以达到200MHz,,系统时钟的源可选择6个时钟源:1)外部高速振荡器(XTAL)2)外部低速振荡器(XTAL32)3)MPLL时钟(MPLL)4)内部高速振荡器(HRC)5)内部中速振荡器(MRC)6)内部低速振荡器(LRC)时钟源规格外部高速振荡器(XTAL)晶振的频率范围:4~25MHz外部时钟输入:最高25MHz振荡器故障检测功能外部低速振荡器(XTAL32)晶振的频率:32.768KHzMPLL时钟(MPLL)输入时钟:外部高速振荡器或者内部高速振荡器MPLL输入时钟分频:1~24任意分频可选PFD输入频率=输入时钟/MPLL输入时钟分频,频率范围1MHz~25MHzMPLL倍频系数:20~480倍VCO振荡频率:240MHz~480MHzMPLLQ输出分频比:2~16任意分频MPLLP输出分频比:2~16任意分频MPLLR输出分频比:2~16任意分频MPLLP输出频率=(输入时钟/MPLL输入时钟分频)*MPLL倍频系数/MPLLP输出分频比MPLLQ输出频率=(输入时钟/MPLL输入时钟分频)*MPLL倍频系数/MPLLQ输出分频比MPLLR输出频率=(输入时钟/MPLL输入时钟分频)*MPLL倍频系数/MPLLR输出分频比时钟源规格UPLL时钟(UPLL)输入时钟:外部高速振荡器或者内部高速振荡器UPLL输入时钟分频:1~24任意分频可选PFD输入频率=输入时钟/UPLL输入时钟分频,频率范围1MHz~25MHzUPLL倍频系数:20~480倍VCO振荡频率:240MHz~480MHzUPLLP输出分频比:2~16任意分频UPLLQ输出分频比:2~16任意分频UPLLR输出分频比:2~16任意分频UPLLP输出频率=(输入时钟/UPLL输入时钟分频)*UPLL倍频系数/UPLLP输出分频比UPLLQ输出频率=(输入时钟/UPLL输入时钟分频)*UPLL倍频系数/UPLLQ输出分频比UPLLR输出频率=(输入时钟/UPLL输入时钟分频)*UPLL倍频系数/UPLLR输出分频比内部高速振荡器(HRC)频率:16MHz或者20MHz用户可写寄存器对频率微调内部中速振荡器(MRC)频率:8MHz用户可写寄存器对频率微调内部低速振荡器(LRC)频率:32.768KHz用户可写寄存器对频率微调可用作RTC的计数时钟,唤醒定时器WKTM的计数时钟,XTAL32的备份时钟SWDT专用内部低速振荡器(SWDTRC)频率:10KHz时钟控制单元还提供时钟频率测量功能。时钟频率测量电路(FCM)使用测定基准时钟对测定对象时钟进行监视测定。在超出设定范围时发生中断或者复位。SWDT有独立的时钟源:SWDT专用内部低速振荡器(SWDTLRC)。实时时钟(RTC)使用外部低速振荡器或者内部低速振荡器作为时钟源。USB-FS的48MHz时钟可以选择系统时钟,MPLL,UPLL作为时钟源。对于每一个时钟源,在未使用时都可以单独打开和关闭,以降低功耗。硬件平台介绍ZW-M601是一张智能仓储防火检测系统应用板卡,如图12所示,板载温度传感器,可通过滑动开关选择温度传感器输出方式,该传感器输出信号为模拟量,可以使用比较器输出驱动蜂鸣器报警,也可以使用单片机ADC采集传感器,根据自己设定的值再去驱动蜂鸣器报警。ZW-M604是一张智慧园区门禁系统应用板卡,如图所示,板载RFID和指纹模组,使用继电器模拟门的开关,通过蜂鸣器可提示解锁是否成功。ZW-M606是一张智能大棚温湿度监测系统应用板卡,如图所示,板载温湿度传感器和蓝牙模组,该传感器使用I2C信号输出,通过外置接口使用单片机采集温湿度数据,可将温湿度数据通过蓝牙模组上传到手机上。ZW-M607是一张可穿戴系统应用板卡,也是本书的主控制板卡,所有实验任务都是基于这张板卡完成,如图所示,板载OLED、心率血氧、陀螺仪模组,主芯片使用HC32F460PETB,板载下载器直接使用USB转方口线下载程序。可对心率血氧和陀螺仪采集数据,然后通过OLED显示这些数据。开发环境搭建MDK源自德国的KEIL公司,是RealViewMDK的简称。在全球MDK被超过10万的嵌入式开发工程师使用。本次项目使用版本为:MDK5.14,该版本使用uVision5IDE集成开发环境,是目前针对ARM处理器,尤其是CortexM内核处理器的最佳开发工具。MDK5向后兼容MDK和MDK3等,以前的项目同样可以在MDK5上进行开发(但是头文件方面得全部自己添加),MDK5同时加强了针对Cortex-M微控制器开发的支持,并且对传统的开发模式和界面进行升级,MDK5由两个部分组成:MDKCore和SoftwarePacks。其中,SoftwarePacks可以独立于工具链进行新芯片支持和中间库的升级。从上图可以看出,MDKCore又分成四个部分:uVisionIDEwithEditor(编辑器),ARMC/C++Compiler(编译器),PackInstaller(包安装器),uVisionDebuggerwithTrace(调试跟踪器)。uVisionIDE从MDK4.7版本开始就加入了代码提示功能和语法动态检测等实用功能,相对于以往的IDE改进很大。SoftwarePacks(包安装器)又分为:Device(芯片支持),CMSIS(ARMCortex微控制器软件接口标准)和Mdidleware(中间库)三个小部分,通过包安装器,我们可以安装最新的组件,从而支持新的器件、提供新的设备驱动库以及最新例程等,加速产品开发进度。同以往的MDK不同,以往的MDK把所有组件到包含到了一个安装包里面,显得十分“笨重”,MDK5则不一样,MDKCore是一个独立的安装包,它并不包含器件支持和设备驱动等组件,但是一般都会包括CMSIS组件,大小350M左右,相对于MDK4.70A的500多M,瘦身不少,MDK5安装包可以在:/demo/eval/arm.htm下载到。而器件支持、设备驱动、CMSIS等组件,则可以点击MDK5的BuildToolbar的最后一个图标调出PackInstaller,来进行各种组件的安装。也可以在/dd2/pack这个地址下载,然后进行安装。MDK安装安装文件路径:国产嵌入式技术及应用实践资源\开发工具及软件资料\MDK522.EXE。第一步:安装MDK安装方法与安装普通软件一样,默认Next。随便填写信息。选择安装路径。正在安装。第二步:HC32F460PACK安装安装文件路径:国产嵌入式技术及应用实践资源\开发工具及软件资料\HC32F460_IDE_Rev1.0.11.zip解压这个压缩包,直接双击运行pack文件即可,安装文件会自动安装到KEIL指定目录。第三步:注册打开MDK5,在File/LicenseManagement…,打开Lincense管理界面如图所示。使用CID从正规渠道获得序列号,如图所示,说明:CID与LIC一般为一机一码,本码对其它计算机上的软件无用。复制以上序列号到License管理界面的LIC框,然后AddLIC。如图所示。

工程文件介绍工程模版文件路径:国产嵌入式技术及应用实践资源\项目代码\工程模版在工程模板中,每个目录都扮演着重要的角色,它们对于提高文档的可读性和项目的组织性至关重要。一个合理的目录结构能够帮助用户更快地找到所需的文件和信息,使项目的管理和维护变得更加高效。这不仅使项目看起来更加有条理,还能提高用户的工作效率,使其更加易于理解和使用。文件夹目录:APP:这里存放着应用程序的主要代码,是项目功能实现的核心部分。BSP:存放与硬件相关的驱动程序,确保硬件能够正常工作并与软件通信。cmsis:官方提供的系统文件,包含了一些标准接口和库,方便开发者进行嵌入式系统开发。hc32_ll_driver:这是官方提供的低层级驱动库文件,通常包含了直接与硬件通信的函数和接口。config:配置工具。source:主程序代码存放处,包含项目的主要逻辑和功能实现。output:编译完成后,这里会存放生成的调试信息(.axf)、预览信息(.crf)以及可执行文件(.hex)等。这些文件对于项目的调试、测试和部署都非常重要。README:程序说明文件,详细描述了项目的功能、使用方法、依赖关系等重要信息。阅读这个文件有助于用户更快地理解和使用项目。template.uvprojx:这是项目的工程文件,包含了项目的所有配置和设置信息。工程模版├──APP├──BSP├──cmsis│├──Device│└──Include├──config├──hc32_ll_driver│├──inc│└──src├──output│└──debug├──source│├──main.c│└──main.h├──JLinkSettings.ini├──README.txt├──EventRecorderStub.scvd├──startup_hc32f460.s├──template.uvguix.acer├──template.uvoptx└──template.uvprojx程序工程目录cmsis:此目录存放系统文件和启动文件。source:此目录用于存放主函数和其他主要的程序代码。所有的逻辑处理、功能实现等都在这里进行。driver:此目录存放的是驱动库文件,包括各种外设的驱动程序,如GPIO、UART、SPI等。这些驱动程序是主程序与硬件之间进行交互的桥梁。BSP:硬件驱动文件存放的目录。这里包含了与特定硬件板卡相关的驱动代码,用于初始化硬件板卡上的各个模块和接口。Readme:存放程序的系统说明文件。程序工程├──cmsis│├──startup_hc32f460.s│└──startup_hc32f460.c├──source│└──main.c├──driver│├──hc32_ll.c………………│└──hc32_ll_fcg.c├──BSP│└──BSP_CLK.c└──Readme└──README.txt新建工程测试M607板卡是一款集成了高性能核心处理器HC32F460PETB的嵌入式开发平台。开发板拥有丰富的板载资源,包括陀螺仪、心率血氧传感器、LED、KEY(按键)、AMOLED显示屏、蓝牙模块和外置引脚的牛角座等,为嵌入式系统开发者提供了一个方便、高效的开发环境。接下来进行LED闪烁测试程序编写,新复制工程模板保留原始工程模板,打开工程模板,找到template.uvprojx双击打开。编写LED闪烁程序,在主程序main.c文件中进行实现。这时候可以观察到板卡M607的LED6闪烁。说明:如果自己写的代码有问题,请参考测试工程代码。路径:国产嵌入式技术及应用实践资源\项目代码\项目一任务结束项目2仓储火灾检测终端设计与开发引导案例随着物流行业的快速发展和仓储需求的不断增长,仓储安全成为了一个至关重要的问题。火灾作为仓储中常见的安全隐患之一,一旦发生,不仅会造成巨大的财产损失,还可能威胁到人员的生命安全。因此,开发一款高效、可靠的仓储火灾检测终端显得尤为重要。本项目基于嵌入式技术,设计并实现一款仓储火灾检测终端,旨在解决传统火灾检测方法存在的局限性,提高仓储火灾预警的准确性和时效性。通过集成多种传感器和实时嵌入式系统,实现对仓储环境的多维度监测和火灾预警,为仓储安全管理提供有效的技术手段。项目方案设计请根据示范案例,分析仓储火灾的防护需求。经过详尽的调查研究后,设计初步方案。选择适宜的技术路径,选定适当的接口进行系统集成,最终形成完整的项目方案。具体任务可参考任务清单。终端结构简介在现代社会中,火灾是各类场所常见的安全风险,尤其是在仓库等大型设施中更为突出。为了有效预防火灾事故的发生,仓库火焰监测报警系统成为了必不可少的安全装置。该系统的设计旨在及时侦测火焰并迅速发出警报,以协助工作人员迅速应对,最大限度地减少火灾可能造成的损失。设计目的仓库火焰监测报警系统的主要设计目的在于确保仓库内物品和人员的安全。通过实时监测火焰的情况,及时发现火灾隐患,并迅速采取必要措施进行处理。这不仅有助于提高工作效率,还能有效预防火灾对仓库造成的重大损失。系统组成典型的仓库火焰监测报警系统通常由火焰探测器、报警器和控制器等多个关键组件组成,如图32所示。火焰探测器能够根据火焰的特定特征进行监测,一旦探测到火焰,即会向控制器发送信号,触发报警器发出紧急警报。通过这些组件的有机配合,系统能够实现对火灾的快速响应和实时监测功能。系统优势仓库火焰监测报警系统设计具有多重优势。首先,它能够全天候、全时段进行火灾监测,有效保障仓库的安全性。其次,系统响应速度快,一旦发生火灾,立即触发报警器,提醒工作人员及时处置。此外,系统还具备自动化特性,可以减轻工作人员的负担,提高工作效率。通过以上设计和功能,仓库火焰监测报警系统不仅增强了火灾预警和处理能力,还为仓库管理者提供了可靠的安全保障,有效应对各种突发火灾风险。火灾传感器简介火焰作为一种化学燃烧现象,具备发光发热、闪烁上升的特征,并需要可燃物、氧化剂及足够高温三要素。其结构包含焰心、内焰、外焰,各具特色。火焰是燃烧过程中产生的可见光和高温的物理现象,具有特定的光谱特征和高温辐射,同时伴随着烟雾和有害气体的产生。本次任务使用的是温度传感器用来监测火焰,温度传感器可以用晶体管测温,基本原理是利用晶体管(尤其是其PN结)的电学特性随温度变化的性质。晶体管内部的PN结(如在双极型晶体管中的发射极-基极结或集电极-基极结)的正向电压降(通常称为导通电压)和反向饱和电流等参数会随温度变化而变化,这一现象可以被用来设计成温度传感器。德州仪器TI生产的LM50内部包含一个温度敏感的PN结,当温度发生变化时,这个PN结的电特性也会随之改变。LM50的输出一个电压信号,其大小与传感器所测量的温度成正比。具体来说,它的输出电压与温度之间存在线性关系,使得通过测量这个电压值,可以准确地推算出环境的实际温度。LM50外形及引脚分布如图所示。报警灯简介报警灯是一种用于传达紧急情况、警告或状态信息的视觉信号装置,当仓库有火灾时,传感器监测到,报警灯立即报警,常见报警灯如图所示。有些报警灯采用红、黄、绿三种颜色,每种颜色代表特定的信息:红色:通常表示紧急情况、危险或需要立即停止的信号,如火灾报警、设备严重故障。黄色:表示警告或需要注意的情况,如设备即将故障、工作环境中的潜在危险。绿色:代表安全、正常运行或允许通行的状态,如系统运行良好、出口指示。火灾报警按键简介火灾报警按键(FireAlarmButton,也称火灾手动报警按钮、紧急报警按钮)是一种用于手动触发火灾报警系统的设备。它通常安装在建筑物的显眼位置,供人员在发现火灾或烟雾时手动启动报警,以提醒其他人员和自动联动消防系统。火灾报警按键是火灾报警系统中不可或缺的组成部分,提供了快速、直接的报警触发手段。主要特性1)手动触发功能:通过手动按压或击碎玻璃的方式触发报警,向火灾报警控制器发送报警信号。优势:能够在自动报警系统未检测到火灾的情况下,提供人工干预的紧急报警手段。2)结构简单按压式:通常设计为按压按钮,按下即触发报警。击碎玻璃式:按压后击碎内部玻璃片,触发报警机制(也称“破玻璃”设计)。3)可靠性高耐用性:设计用于长期使用,能够在恶劣环境下稳定工作。防误操作:通常需要一定的力度按压或击碎玻璃,减少误报警的可能性。火灾报警按键作为火灾报警系统中的重要组成部分,为各种场所提供了手动触发火灾报警的手段。其简单可靠的设计能够在自动报警系统失效或未触发时,提供人工干预的紧急报警功能。火灾报警按键的多种触发方式、安装形式和高可靠性,使其广泛应用于商业建筑、工业设施、住宅区、教育机构、医疗机构和公共交通等领域,为这些场所提供了关键的安全保障。项目决策依据项目具体需求,制定多种可行性任务实施方案,并开展全面评估,比较各方案的优势与劣势,以确保选出最优方案。随后,正式确认该方案并详细填写任务抉择单,以指导后续行动。国产微控制器发展史项目计划根据项目方案,制定详细的任务计划,明确时间节点和责任人,并落实具体的任务安排。项目检查与评价项目实施结束后,对项目进行检查。可以使用小组互评等方式进行项目评价,项目评价单如下。任务结束任务1仓储火灾报警灯设计与开发任务情报ZW-M607板卡使用的核心芯片为HC32F460PETB,总共100个引脚,通用的GPIO有83个,支持通用输入输出功能,每个IO最多可选择64个复用功能,可以同时选择2个功能有效(不支持2个输出功能同时有效),GPIO基本结构图如图所示。注意事项:PB11端口与MD复用,仅具有输入功能,无输出功能。GPIO主要特性:每组Port配有16个I/OPin,根据实际配置可能不足16个。支持上拉。支持推挽,开漏输出模式。支持高,中,低型驱动模式。支持外部中断的输入。支持I/Opin周边功能复用,一个I/Opin最多可具有64个可选择的复用功能。各个I/Opin可独立编程。各个I/Opin可以选择2个功能同时有效(不支持2个输出功能同时有效)。GPIO结构图分为三个区域:PORT寄存器、PORT控制器、IOCell。PORT寄存器在HC32F460软件手册中通用IO(GPIO)有详细说明,里面的寄存器数量众多,挑选常用的寄存器进行说明。HC32F460软件手册路径:国产嵌入式技术及应用实践资源\项目资料\RM_HC32F460_F45x_A460系列参考手册_Rev1.6本次任务常用寄存器:通用控制寄存器(PCRxy)写保护寄存器(PWPR)通用输出置位寄存器(POSRx)通用输出复位寄存器(PORRx)通用输出翻转寄存器(POTRx)每次使用GPIO时,都会用到通用控制寄存器(PCRxy)配置GPIO参数,该寄存器可以配置GPIO引脚基本输入输出和中断功能,控制GPIO引脚输出电平,获取GPIO引脚状态。GPIO基本结构图最右边有一个上拉电阻,可以设置GPIO引脚初始状态为高电平。除BFE寄存器没有包含外,其他寄存器全部包含。写保护寄存器(PWPR)关联PSPCR,PCCR,PINAER,PCRxy,PFSRxy寄存器,WP[7:0]位当b15~b8写入值为0xA5时,b0值写入WE,当写0xA5以外值时,WE自动清零;WE位写1允许关联的寄存器修改,写0则禁止。通用输出置位寄存器(POSRx)是设置HC32F460引脚输出高电平,此寄存器的读出值始终为0x0000。32bit访问时,同一I/O的POR[y]与POS[y]同时写1时,POR[y]优先级更高,即对应POUT[y]清零。通用输出复位寄存器(PORRx),是设置HC32F460引脚输出高电平。此寄存器的读出值始终为0x0000。通用输出翻转寄存器(POTRx),可将HC32F460引脚电平进行取反。此寄存器的读出值始终为0x0000。GPIO编程说明小华半导体公司提供的驱动库包含了HC32F460芯片的GPIO驱动,相关的定义和说明可以在hc32_ll_gpio.h和hc32_ll_gpio.c文件中找到。GPIO编程定义说明HC32F460中定义了6个组,PORTA到PORTH,这个型号HC32F460PETB涵盖这6个组,其他芯片请查看相应的封装。#defineGPIO_PORT_A(0x00U)/*!<PortAselected*/#defineGPIO_PORT_B(0x01U)/*!<PortBselected*/#defineGPIO_PORT_C(0x02U)/*!<PortCselected*/#defineGPIO_PORT_D(0x03U)/*!<PortDselected*/#defineGPIO_PORT_E(0x04U)/*!<PortEselected*/#defineGPIO_PORT_H(0x05U)/*!<PortHselected*/每组引脚号0到15,总共16个引脚。#defineGPIO_PIN_00(0x0001U)/*!<Pin00selected*/……………………#defineGPIO_PIN_15(0x8000U)/*!<Pin15selected*/GPIO常用库函数说明关于的HC32F460的GPIO常用库函数和预定义都在文件hc32_ll_gpio.h和hc32_ll_gpio.c文件中,下列函数可在文件中找到。LED灯初始化ZW-M607可穿戴系统应用板卡板载4颗LED灯LED3~LED6,对应引脚PD11~PD8,LED默认接入高电平3.3V,MCU引脚低电平时,LED灯点亮,如图所示。在对报警灯初始化需要在工程模板的BSP文件夹中,新建文件BSP_LED.c和BSP_LED.h用于存放与LED相关的程序。在BSP_LED.h文件中,对所需的端口和引脚进行宏定义,以便于后续的管理。以下是一个LED3引脚定义的示例。/*LED3Port/Pindefinition*/#defineLED3_PORT(GPIO_PORT_D)#defineLED3_PIN(GPIO_PIN_11)剩余的宏定义LED可以根据原理图上的引脚标号进行续写,在BSP_LED.c文件写LED初始化函数代码。voidLED_Init(void){stc_gpio_init_tstcGpioInit;//定义结构体(void)GPIO_StructInit(&stcGpioInit);//初始化结构体stcGpioInit.u16PinState=PIN_STAT_SET;//设置为高电平stcGpioInit.u16PinDir=PIN_DIR_OUT;//设置为输出(void)GPIO_Init(LED3_PORT,LED3_PIN|LED4_PIN|LED5_PIN|LED6_PIN,&stcGpioInit);//初始化LED3、LED4、LED5、LED6引脚}在BSP_LED.h文件中预定义了LED3的功能函数开灯、关灯、取反。/*LED3functiondefinition*/#defineLED3_ON(GPIO_ResetPins(LED3_PORT,LED3_PIN))#defineLED3_OFF(GPIO_SetPins(LED3_PORT,LED3_PIN))#defineLED3_TOGGLE(GPIO_TogglePins(LED3_PORT,LED3_PIN))在报警灯初始化完成后,把灯的头文件BSP_LED.h,放进main.h进行声明。#ifndef__MAIN_H__#define__MAIN_H__#include"hc32_ll.h"#include"BSP_CLK.h"#include"BSP_LED.h"#endif/*__MAIN_H__*/任务实现第一步: 可穿戴系统应用板卡(ZW-M607)使用12VDC电源供电,插入后按下电源开关。第二步: 使用USB转方口线连接板卡(CMSIS-DAP端口)和电脑。第三步: 使用keil5打开工程,编译下载程序。参考程序:国产嵌入式技术及应用实践资源\项目代码\项目二\任务1在本任务中LED成功实现了流水灯的效果。这意味着LED灯按照预定的顺序和时间间隔依次点亮和熄灭,形成流动的视觉效果。如图所示红色框中4颗LED灯。任务结束任务2报警开关功能设计与开发任务情报HC32F460的外部中断是由中断控制器(INTC)选择中断事件请求作为中断输入到NVIC,支持16个外部管脚中断,中断触发方式支持上升沿触发、下降沿触发等功能,系统中断框图如图所示。NVTC主要功能说明:可编程优先级:16个可编程优先级(使用了4位中断优先级寄存器)。不可屏蔽中断:除NMI管脚作为不可屏蔽中断源以外,可以独立选择多种系统中断事件请求作为不可屏蔽中断,且各中断事件请求配备独立的使能选择、标志以及标志清除寄存器。配备16个外部管脚中断。配置多种外设中断事件请求。配备32个软件中断事件请求。中断可唤醒系统休眠模式和停止模式。说明:实际使用中断向量数请参考【中断向量表】(不包括Cortex™-M4F的16根中断线),每个中断向量可以根据中断选择寄存器选择对应的外设中断事件请求。HC32F460的中断控制器一共使用了144个中断向量,提供了3种中断事件请求选择方式,通过灵活的组合来满足各种中断配置需求。第一种方式共32个中断向量,所有中断事件请求任选1作为中断源,通过中断/事件选择寄存器INT_SEL0~31进行选择,通过INT_IER寄存器使能,对应NVIC的中断向量为0~31。第二种方式共96个中断向量,32选1作为中断源,通过中断选择寄存器INT_SEL32~127进行选择,对应的中断向量为32~127。第三种方式共16个中断向量,32个外设中断事件请求共享1个中断向量,各外设都可以申请中断,通过外设标志位区分,通过中断使能寄存器INT_VSSEL128~143进行中断事件请求使能,对应NVIC的中断向量为128~143。本次任务常用寄存器:1)外部管脚中断控制寄存器(INT_EIRQCRx)2)中断/事件选择寄存器(INT_SEL0~31)3)中断使能寄存器(INT_IER)4)外部管脚中断标志寄存器(INT_EIFR)5)外部管脚中断标志清除寄存器(EIFCR)在使用外部中断时,要将EIRQ数字滤波器使能,设置滤波器的采样时钟,选择外部引脚的中断触发方式,该触发方式一种有四种:下降沿:当外部中断引脚的信号从高电平(1)变为低电平(0)的瞬间,即电平发生下降沿变化时,触发一次中断。这种方式常用于捕捉短暂的脉冲信号,确保只对信号的每次下降沿做出响应。上升沿:与下降沿相反,当信号从低电平(0)变为高电平(1)的瞬间,即发生上升沿变化时,触发中断。适合用于避免在信号稳定为低电平时的误触发,确保系统对每个上升沿事件作出响应。双边沿:不论信号是从低变高(上升沿)还是从高变低(下降沿),只要电平发生变化,都会触发中断。这种方式适用于需要检测信号的每一个变化,无论方向如何,常用于计数或频率测量等场景。低电平:只要外部中断引脚保持在低电平状态,中断就会被持续触发。一旦信号变为高电平,中断停止触发。这种模式适合用于监测长时间的信号状态,如按钮被按下并保持的情况,但需注意防止长按导致的连续中断问题,通常需要软件去抖动处理。HC32F460的中断有3种中断方式,一般选择第一种,通过中断/事件选择寄存器(INT_SEL0~31)进行设置。中断设置好后,便需要使用中断使能寄存器(INT_IER)进行中断使能。中断发生后,需要通过外部管脚中断标志寄存器(INT_EIFR)查询相应管脚是否发生中断。每当产生一次中断后,必须通过操作外部管脚中断标志清除寄存器(EIFCR),以清除相应的中断标志位。外部中断编程说明有关HC32F460的中断函数和预定义在hc32_ll_interrupts.h和hc32_ll_interrupts.c文件中。外部中断编程定义说明HC32F460的外部中断初始化参数结构体为stc_extint_init_t,一共有三个参数,设置滤波器、滤波器时钟、外部中断触发方式。typedefstruct{uint32_tu32Filter; //使能滤波器uint32_tu32FilterClock; //设置滤波器时钟uint32_tu32Edge; //设置触发沿为下降沿或上升沿}stc_extint_init_t;HC32F460的中断参数结构体为stc_irq_signin_config_t。typedefstruct{en_int_src_tenIntSrc; //设置中断源IRQn_TypeenIRQn; //设置中断号func_ptr_tpfnCallback; //设置中断回调函数}stc_irq_signin_config_t;外部中断常用库函数说明开关初始化ZW-M607可穿戴系统应用板卡板载4个按键SW3到SW6,对应IO口硬件PB12到PB15,如图所示。当按键按下时,低电平有效,在配置按键GPIO引脚时,需要上拉电阻。在对报警灯初始化需要在工程模板的BSP文件夹中,新建文件BSP_KEY.c和BSP_KEY.h用于存放与KEY相关的程序。在BSP_KEY.h文件中,对所需的端口和引脚进行宏定义,以便于后续的管理。以下是一个KEY外部中断引脚定义的示例。#ifndef__BSP_KEY_H#define__BSP_KEY_H#include"main.h"/*SW3PORTPININTCONFIG*/#defineSW3_PORT(GPIO_PORT_B)#defineSW3_PIN(GPIO_PIN_12)#defineSW3_EXTINT_CH(EXTINT_CH12)#defineSW3_INT_SRC(INT_SRC_PORT_EIRQ12)#defineSW3_INT_IRQn(INT033_IRQn)#defineSW3_INT_PRIO(DDL_IRQ_PRIO_DEFAULT)/*SW4PORTPININTCONFIG*//*SW5PORTPININTCONFIG*//*SW6PORTPININTCONFIG*/externuint8_tSW3_Flag;//按键SW3标志位voidKEY_Init(void);#endif这里不仅定义SW3的引脚和通道,还定义了外部中断号和外部中断源,并定义按键SW3标志位,接下来在BSP_KEY.c文件写KEY初始化函数代码。staticvoidSW3_Init(void){stc_extint_init_tstcExtIntInit;//定义外部中断初始化结构体

stc_irq_signin_config_tstcIrqSignConfig;//定义中断初始化结构体

stc_gpio_init_tstcGpioInit;//定义GPIO初始化结构体

/*GPIOconfig*/(void)GPIO_StructInit(&stcGpioInit);//初始化GPIO结构体

stcGpioInit.u16ExtInt=PIN_EXTINT_ON;//使能外部中断

stcGpioInit.u16PullUp=PIN_PU_ON;//使能上拉

(void)GPIO_Init(SW3_PORT,SW3_PIN,&stcGpioInit);//初始化GPIO/*ExtIntconfig*/(void)EXTINT_StructInit(&stcExtIntInit);//初始化外部中断结构体

stcExtIntInit.u32Filter=EXTINT_FILTER_ON;//使能滤波器

stcExtIntInit.u32FilterClock=EXTINT_FCLK_DIV8;//设置滤波器时钟

stcExtIntInit.u32Edge=EXTINT_TRIG_FALLING;//设置触发沿为下降沿

(void)EXTINT_Init(SW3_EXTINT_CH,&stcExtIntInit);//初始化外部中断

/*IRQsign-in*/stcIrqSignConfig.enIntSrc=SW3_INT_SRC;//设置中断源

stcIrqSignConfig.enIRQn=SW3_INT_IRQn;//设置中断号

stcIrqSignConfig.pfnCallback=&EXTINT_SW3_IrqCallback;//设置中断回调函数

(void)INTC_IrqSignIn(&stcIrqSignConfig);//初始化中断

/*NVICconfig*/NVIC_ClearPendingIRQ(stcIrqSignConfig.enIRQn);//清除挂起的中断

NVIC_SetPriority(stcIrqSignConfig.enIRQn,SW3_INT_PRIO);//设置中断优先级

NVIC_EnableIRQ(stcIrqSignConfig.enIRQn);//使能中断}函数名称:staticvoidEXTINT_SW3_IrqCallback(void)输入:无输出:无作用:外部中断的回调函数;staticvoidEXTINT_SW3_IrqCallback(void){if(SET==EXTINT_GetExtIntStatus(SW3_EXTINT_CH))//检查外部中断状态是否为SET{SW3_Flag=1;//设置标志位,表明SW3已被按下

while(PIN_RESET==GPIO_ReadInputPins(SW3_PORT,SW3_PIN))//等待直到SW3按钮被释放

{;//空循环,什么也不做,直到按钮被释放

}EXTINT_ClearExtIntStatus(SW3_EXTINT_CH);//清除外部中断状态

}}在BSP_KEY.c继续写按键状态的处理函数,按键状态判断回调函数和按键状态执行函数,再在BSP_KEY.h声明voidProcessButtons(void)函数,再在主函数调用ProcessButtons();函数名称:uint8_tCheckAndClearFlag(uint8_t*flag)输 入:外部中断完成标志位输 出:1按键被按下,0按键未被按下作 用:外部中断标志位的回调函数;uint8_tCheckAndClearFlag(uint8_t*flag){if(*flag){*flag=0;//清除标志位

return1;//返回1表示标志位被设置

}return0;//返回0表示标志位未设置}开关报警功能实现函数名称:voidProcessButtons(void)输入:无输出:无作用:执行按键按下后的事件;//主循环或其他函数中检查和处理按键标志位voidProcessButtons(void){if(CheckAndClearFlag(&SW3_Flag)){LED6_TOGGLE;//处理SW3按键事件

}if(CheckAndClearFlag(&SW4_Flag)){LED5_TOGGLE;//处理SW4按键事件

}if(CheckAndClearFlag(&SW5_Flag)){LED4_TOGGLE;//处理SW5按键事件

}if(CheckAndClearFlag(&SW6_Flag)){LED3_TOGGLE;//处理SW6按键事件

}}获取到按键状态后,每个按键对应一个LED灯,每次按下LED灯便会取反一次。函数名称:int32_tmain(void)输入:无输出:无作用:主函数int32_tmain(void){/*MCUPeripheralregisterswriteunprotected*/LL_PERIPH_WE(LL_PERIPH_ALL);//解除MCU寄存器写保护

BSP_CLK_Init();//时钟初始化,8M晶振,系统时钟200MLED_Init();//LED初始化

KEY_Init();//KEY初始化

/*MCUPeripheralregisterswriteprotected*/LL_PERIPH_WP(LL_PERIPH_ALL);//MCU寄存器写保护

/*Addyourcodehere*/while(1){ProcessButtons();}}在main函数中初始化了LED和按键函数,主循环里一直使用ProcessButtons()函数扫描按键是否按下,并处理相应事情。任务实现第一步: 可穿戴系统应用板卡(ZW-M607)使用12VDC电源供电,插入后按下电源开关。第二步: 使用USB转方口线连接板卡(CMSIS-DAP端口)和电脑。第三步: 使用keil5打开工程,编译下载程序。参考程序:国产嵌入式技术及应用实践资源\项目代码\项目二\任务1在本次任务中,成功实现了按键外部中断控制LED开关的功能。按键按下弹起时LED亮起,再次按下弹起时LED熄灭的效果。如图51所示红色方框为4个按键和LED的位置。任务结束任务3温感探测功能设计与开发任务情报HC32F460系列微控制器集成了高性能的模数转换器(ADC)功能,如图52所示内部集成了ADC1和ADC2两个独立的ADC模块,支持12位、10位和8位的分辨率配置,提供最多16个外部模拟输入通道以及1个内部基准电压/8位DAC输出的检测通道,一共两个序列A和B,一个序列支持单次扫描或连续扫描。ADC模块需要使用两个时钟:模拟电路时钟ADCLK,数字接口时钟PCLK4。两个时钟都来自时钟控制器中的分频器。ADCLK等效于PCLK2,与PCLK4是同步关系,PCLK4与ADCLK的频率比率关系为1:1,2:1,4:1,8:1,1:2,1:4。ADCLK可以选择与系统时钟HCLK异步的PLL时钟源,此时PCLK4与ADCLK相同,为同步同频率关系。ADCLK的最高频率为60MHz。ADC模块有多个通道,可配置为两个序列:序列A,序列B进行转换。序列A和B配有独立的通道选择寄存器ADC_CHSELRA,ADC_CHSELRB。寄存器每位代表一个通道,如bit0位写1表示转换CH0,写0表示不转换CH0。两个序列可独立选择任意1个或多个通道进行转换。例如:ADC_CHSELRA设置为0x0055,ADCHSELRB设置为0x0002,则序列A的触发条件发生时,将依次转换CH0,CH2,CH4和CH6这4个通道。序列B的触发条件发生时,将转换CH1这一个通道。序列A可支持单次扫描模式和连续扫描模式,通过A/D控制寄存器ADC_CR0.MS[1:0]设置。序列A单次扫描模式下,如图所示,当寄存器ADC_TRGSR选择的序列A启动条件发生,或者ADC_STR.STRT位写1软件触发,ADC启动,对序列A通道选择寄存器ADC_CHSELRA中选择的所有通道依次进行采样和转换,转换结果存入相应的数据寄存器ADC_DR中。ADC转换过程中ADC_STR.STRT保持为1,当所有通道转换结束后自动清0,ADC进入转换待机状态,等待下次触发条件的发生。当所有通道转换结束时,序列A转换结束标志位ADC_ISR.EOCAF置1,并产生序列A转换结束事件ADC_EOCA,可以用此事件启动DMA。若ADC_ICR.EOCAIEN为1,中断许可的状态下,同时还产生序列A转换结束中断请求。序列A连续扫描模式下,如图所示,序列A连续扫描模式与序列A单次扫描模式动作类似,不同点在于,连续模式在所用通道转换结束后不是进入转换待机状态,而是重新开始转换序列A。STRT位也不会自动清0。当需要停止连续扫描时,对STRT位写0,并读STRT确认为0以判断ADC进入转换待机状态。HC32F460系列MCU的ADC1有17个采样通道,最多支持16个外部模拟输入引脚,通道0~15可与外部模拟输入引脚自由映射,通道16用于内部基准电压/8bitDAC的输出检测。ADC2有9个采样通道,最多支持8个外部模拟输入引脚,通道0~7可与外部模拟输入引脚自由映射,通道8用于内部基准电压/8bitDAC的输出检测。HC32F460系列MCU的ADC模块模拟输入引脚等配置如表所示。ADC通道对应引脚需要查看芯片硬件手册,手册地址:国产嵌入式技术及应用实践资源\项目资料\DS_HC32F460系列数据手册_Rev1.5.pdf看到手册中的引脚功能表,如图所示,例如PA0为ADC1_IN0、PA1为ADC1_IN1、PA2为ADC1_IN2、PA3为ADC1_IN3,其他引脚对应的ADC功能请在芯片硬件手册中查看。本次任务常用寄存器:1)A/D控制寄存器0ADC_CR02)A/D启动寄存器ADC_STR3)A/D中断状态寄存器ADC_ISR4)A/D数据寄存器ADC_DR初始化ADC时,需要用到A/D控制寄存器0ADC_CR0,如图所示,一共有五个功能位:AVCNT[2:0]:ADC平均转换次数,平均转换次数越多,

温馨提示

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

评论

0/150

提交评论