《基于STM32单片机的数字频率计设计及仿真研究》8300字_第1页
《基于STM32单片机的数字频率计设计及仿真研究》8300字_第2页
《基于STM32单片机的数字频率计设计及仿真研究》8300字_第3页
《基于STM32单片机的数字频率计设计及仿真研究》8300字_第4页
《基于STM32单片机的数字频率计设计及仿真研究》8300字_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

PAGE8基于STM32单片机的数字频率计设计及仿真研究摘要:数字频率计是一种用十进制数字显示被测信号频率的数字测量仪器。由集成芯片和一些外围电路构成。各种自动控制电路遍及深入到电子产品和设备。并且频率计已广泛应用于各个领域。它的基本功能是测量正弦信号,方波信号,尖脉冲信号及其他各种单位时间内变化的物理量。频率计的原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。频率计测量与传统的测量方式相比。运用了单片机频率计有着体积更小,运算速度更快,测量范围更宽,制作成本更低的优点。但是由于传统的频率计中有许多功能是依靠硬件来实现的。而采用单片机测量频率之后,有许多以前需要用硬件才能实现的功能现在仅仅依靠软件编程就能实现。而且不同的软件代码能够实现不同的功能,从而大大降低了制作成本。数字频率计主要实现方法有直接式、锁相式、直接数字式和混合式四种。锁相式和直接数字式都同时具有容易实现产品系列化、小型化、模块化和工程化的特点。其中锁相式更是以其容易实现相位同步的自动控制且低功耗的特点成为众多业内人士的首选,应用最为广泛。直接式的优点是速度快,但是结构复杂。一般只应用在地面雷达中。混合式就都可以应用于多种情况,且比较常见。关键词:测量频率;数字频率计;单片机 1.1课题背景及研究意义 21.2课题的设计要求 21.3课题的研究内容 22系统概述 32.1方案选择 32.1.1方案一 32.1.2方案二 32.2系统设计原理 32.3系统组成 33系统硬件设计 53.1STM32F103C8T6单片机核心板模块 53.2脉冲收集模块 63.3测量结果显示模块 73.4开关模块 93.5蜂鸣器报警模块 94系统软件设计 114.1主程序设计 114.2开始测试流程 114.3LCD显示 124.4程序仿真 134.4.1仿真软件 134.4.2仿真结果 145结论 16参考文献 17附录A系统电路和相关附图 18附录B全部程序清单 20绪论1.1课题背景及研究意义主要研究用基于STM32单片机来设计的频率计。因为在电子技术中,频率测量十分重要,这就要求频率计要不断面提高其测量的精度和速度。我们在设计其电路时,都趋向于用尽可能少的硬件来实现,并且尽力把以前由硬件实现的功能部分,通过编程软件来解决。因为软件实现比硬件实现具有易修改的特点,例如简单的修改几行源代码就比在印制电路板上改变几条连线要容易的多,所以基于微处理器的电路往往比传统的电路设计具有更大的灵活性。并且数字频率计是计算机、通讯设备、音频视频等科研生产领域必不可少的测量仪器,所以频率的测量就显得更为重要。在数字电路中,频率计属于时序电路,它主要由具有记忆功能的触发器构成。在计算机及各种数字仪表中,都得到了广泛的应用。1.2课题的设计要求本课题的设计重点是设计一种基于STM32单片机的数字频率计,利用十进制数字等数据去显示测出各种信号源及其他各种单位时间内的变化量。可以测量周期性正弦/方波信号.测量范围100Hz

~100kHz。

测量正弦信号、

方波信号,测量范围100Hz

~100kHz

。且其板子的基本是基于一个单片机,并且用它进行各种逻辑算数运算,用另外的LCD液晶显示屏显示所测量出的频率值。1.3课题的研究内容数字频率计采用以单片机为基础的硬件板块,频率计主要由四个部分构成:时基电路、输入电路、计数显示电路以及控制电路。信号每单位时间完成周期的个数,一般取一秒为基本单位时间,现在多半都是用电子计数器表示其频率大小。当被测信号在特定时间段T内的周期个数为N时,则可得被测频率F。利用输入的信号波形也就是任意的周期信号和输入的电压,在一个测量周期过程中,被测周期信号在输入的电路中经过放大、整形、微分等操作之后形成特定周期的窄脉冲,送到单片机控制的输入端。特定周期的窄脉冲通过端口时,从而进入计数器进行计数,然后计数器的显示电路则是通过LCD显示屏来显示被测信号的频率值,内部控制电路则用来完成各种测量功能之间的切换并实现测量设置。频率计也是一种基础测量仪器,能够测出各种规定信号的频率值的大小。2系统概述2.1方案选择本设计主要通过输入电路和控制电路和时基电路和计数显示电路四部分电路组成。可以有很多种方案进行实现功能,主要分为模拟法和数字法两大类,而且由于这次的设计的实验环境等要求,现在就有几种电子计数式的数字法中的方案,下面就列举两种方案进行阐述。2.1.1方案一利用计数器去捕获已经被放大或者缩小的被测信号得上升沿,在设定的时间内,通过定时器设定捕获的上升沿即可用数码管显示出频率的大小,方案一在低频时精度较高,但是在其被测信号为高频时会出现技术溢出的情况,即脉冲周期测频法。2.1.2方案二计数器通过捕获脉冲,在一定的设定时间内捕获信号脉冲个数,高频时可以利用信号分频之后再进行捕获,方案二对于高低频都十分有效,而且具有很好的实用性与良好的精度性,所以采用方案二即脉冲数倍频测频法。2.2系统设计原理利用施密特触发器将边缘缓慢变化的周期性信号如正弦波、三角波或任意形状的模拟信号变换成同频率的矩形脉冲。通过单片机内部的两个16位定时/计数器测量某段时间内的外加脉冲数,经过处理并通过数码管直接显示出所加信号的频率。单片机内部T0用来定时,T1用来计数(下降沿触发)。当来一个计数脉冲则计数1次。在T0开始定时的同时,T1开始计数,T0定时1s时间到时,T1停止计数。2.3系统组成本课题以STM32单片机为核心设计的一种数字频率计,系统整体组成主要由脉冲收集电路,电源,STM32单片机,LCD显示电路,控制电路组成。系统组成如图2.3所示。系统基本组成图2.3脉冲收集电路首先由于被测信号的幅度和频率大小原因,以及信号波的类型未知,所以被测信号必须要进行放大和整形最好变成方波或者矩形波,利于正确测量频率。LCD显示电路接收来自上一部分经过计数的信号,将其数值在屏幕上显示出来。液晶显示控制用于点阵型液晶显示驱动的控制,实现在点阵型液晶显示器件上的各种显示功能。单片机核心板块内的计数电路当接收到脉冲收集电路所传来的特定形式的信号时,开始计数被测信号中有多少个上升沿。在计数的时候LCD显示电路不显示数字。当计数完成后,此时要使LCD显示屏显示计数完成后的数字值。控制电路控制计数的开始和结束的,在等精度测频中,控制电路可以根据被测信号的频率调整计数时间宽度,使计数开始到结束这段时间一定是被测信号的整数个周期,提高了精度。3系统硬件设计3.1STM32F103C8T6单片机核心板模块STM32系列处理器是意法半导体ST公司生产的一种基于ARM7架构的32位,支持实时仿真和跟踪的微控制器。选择此款控制芯片是因为本系统设计并非追求成本的最低或更小的功耗,而是在实现本设计功能的前提下能够提供更丰富的接口和功能以便于设计实验系统各实验项目所需的外围扩展电路。本设计使用的引脚有:PC13,PC14,PC15,PA0,PA1,PA9,PA10用于连接与控制按键和脉冲发生器以及蜂鸣器的正常工作。PB15,PB14,PB13,PB12,PB11,PB10,PB9,PB8,PB7,PB6,PB5则用于连接与控制LCD1602液晶显示屏的正常工作。所用部分引脚功能如下:PC13:连接开关设置阈值的按键,且主控制输入作用。PC14:外部晶振引脚进行输入信号,作8MHZ使用,连接增加值的按键。PC15:外部晶振引脚进行输出信号,也作8MHZ使用,连接减少值的按键。PA0:引脚唤醒作用。PA1:蜂鸣器模块输入端口,用于通知其是否可发送信息进行报警。PA9:脉冲收集串口一的发送脉冲。PA10:脉冲串口二的发送脉冲。PB15:令LCD进行主输出从输入。PB14:令LCD进行主输入从输出。PB13:同步时钟信号。PB12:片选信号,低电平有效,选中模块进行工作。PB11:在单片机和LCD显示屏间传输串行数据。PB10:产生同步时钟脉冲。PB9:单片机输出至LCD的三通道口。PB8:单片机输出至LCD的四通道口。PB7:传输串行数据。PB6:传输同步时钟脉冲。PB5:标识通讯模式,增强模式等。单片机核心模块如图3.1所示。STM32F103C8T6单片机核心模板图3.13.2脉冲收集模块因为所输入的被测信号是可能的正弦波,矩形波,三角波等等,然后后面的闸门和计数器的电路模板则需要要求被测信号的波形为矩形波,所以就要设计一个模块在被测信号进入要求的所需模板块时变成对应所需要的信号波形的类型,例如这个模板就是把正弦波和三角波等波形转化为矩形波进行测量频率大小。其必要性就是采用单片机计数的话,则它只能对脉冲波进行计数,而实际中需要测量的频率的信号是各种各样的,只有通过这个模块将它们转化为可以进行单片机计数的脉冲波。此模块的整形电路有两种情况说明,第一种为单稳态触发器,而第二种是施密特触发器。而且这两种触发器有共同的地方就是都可以有定时器或者门电路组成,又因为此次设计是基于STM32单片机的频率计,所以单片机对于组成频率计的脉冲采集模块部分的要求很简单,所以我们选择由定时器组成的施密特触发器去当做构成模块的被测信号的电路脉冲收集部分。 施密特触发器是脉冲收集电路里面的脉冲波形进行变化的过程中经常使用的一种电路,它的工作原理与输出特性以及其输入特性都是符合单片机计数的标准,所以可以进行被测信号的准确测量。、 另一方面,由于可能出现不清楚被测信号的强弱的情况,所以也要可以在信号整形之前进行放大或者衰减处理等操作。采用NE555脉冲发生器:1.可用作方波信号发生器,产生方波信号用作此设计使用测量。2.可以产生可调脉冲,用来控制相关的电路。此定时器是一种模拟和数字功能相结合的中规模集成器件。并且定时器成本低,性能可靠,只需要外接几个电阻、电容,就可以实现多谐振荡器、单稳态触发器及施密特触发器等脉冲产生与变换电路。它也作为定时器应用于电器、电子测量方面。它是单路信号输出,可输出方波信号,还带有可调电阻,通过调节它的电阻值去控制它的输出频率,且它的基本工作电压为5—12V左右。接口:VCC为外接5—12V的电源,OUT为频率输出端,GND为外接地。其原理图如下图3.2所示。脉冲收集原理图3.23.3测量结果显示模块使用了LCD1602显示模板:LCD显示器分为字段显示和字符显示两种。其中字段显示与LED显示相似,只要送对应的信号到相应的管脚就能显示。字符显示是根据需要显示基本字符。本设计采用的是字符型显示。系统中采用LCD1602作为显示器件输出信息。与传统的LED数码管显示器件相比,液晶显示模块具有体积小、功耗低、显示内容丰富等优点,而且不需要外加驱动电路等优点。此芯片的基本要求为:芯片工作电压为4.5~5.5V,且工作电流大概为2.0mA(5.0V),模块最佳工作电压为5.0V所使用的部分引脚的说明如下:VSS:为地电源。VDD:接5V正电源。V0:为液晶显示器对比度调整端。RS:为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。RW:为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第7—14引脚为:D0~D7为8位双向数据线。第15—16引脚为:分别接5V的电压和接地。此系统中采用LCD1602作为显示器件输出被测频率值。原理图由图3.3所示。LCD1602显示屏原理图3.33.4开关模块此开关主要是用来设置阈值,并且可以对设定的频率值进行相应的调整,以便去和实际测得的频率值比较。还可以通过加减按键进行对值的增加或者减少。每当按下去一次,显示的第一行值就发生一次变化,直到和开始设定的阈值大致相同。未按下时只有两组引脚连接,按下之后,四个引脚连接在一起。3.5蜂鸣器报警模块有源蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。本系统所采用的报警模块为5V有源蜂鸣器模块,电路中采用三极管9012来驱动,只要单片机控制引脚为高电平,蜂鸣器就会鸣叫报警,反之则不鸣叫,可以通过控制单片机引脚方波输出形式控制蜂鸣器的鸣叫方式。电阻为限流电阻,保护作用。原理图如3.6所示。蜂鸣报警器原理图3.54系统软件设计4.1主程序设计本系统大致流程包括先开始,先输入被测信号,然后在进行脉冲采集,通过不同的按键设置阈值,增加或者减少设定频率值,在经过STM32单片机的控制计数下,通过LCD显示屏得出频率的读数。即单片机实时采集脉冲发送过来的脉冲数,在单位时间内的脉冲数也就是频率值。通过液晶LCD1602液晶实时显示当前频率值以及设置值,如果当前频率值超过设置阈值,蜂鸣器进行报警。当前频率值显示分两种,低于1000hz时显示单位为hz,高于1000hz时显示单位kHz,自动切换,方便查看。按键有设置按键、设置+、设置-,在设置情况下可以对设置值进行加减运算,设置值同样两种自动切换显示,低于1000时直接显示,高于1000时显示单位k,方便查看对比。过程由图4.1所示主程序流程图4.14.2开始测试流程开始测试的时候先将板子进行初始化,并将其连接到示波器和接地操作,判断时间是否经过了1秒钟,当其时间满足条件时,即可通过单片机控制,然后在LCD显示屏中显示出来被测频率的值。过程由图4.2所示开始测试流程图4.24.3LCD显示 LCD1602芯片主要功能是显示数值或者符号,实现功能是先接通电源,保持初始化状态,即让计数器清零且屏幕清空,并且设置芯片的模式。完成这些操作时候显示屏开始显示,但是并不显示光标,第二步显示文字且光标后移动一位。当初始化完成之后,单片机进行判断按键是否按下,则即可从中读取被测频率值的大小,再显示第一行数据,若显示成功则相继显示第二行的数据。最后液晶显示屏上显示出两行频率值的大小。过程由下图4.3所示、LCD显示流程图4.34.4程序仿真4.4.1仿真软件Proteus软件是英国Labcenterelectronics公司出版的EDA工具软件。它是目前最好的仿真单片机及外围器件的工具,从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台。KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。应用Keil进行软件仿真开发的主要步骤为:编写源程序并保存—建立工程并添加源文件—设置工程—编译/汇编、连接,产生目标文件—程序调试。4.4.2仿真结果5结论经过这次的设计,带来了很多的收获,数字频率计在现在是很常用的设备,在通讯设备,音频设备等科研领域中发挥了很重要的作用,它是一种采用十进制数字去显示被测信号的大小的数字测量仪器,它的基本功能是将被测信号转化成方波或者正弦信号以及其他各种单位时间内变化的物理量。而且,在设计数字电路和模拟电路的安装调试的时候,他们采用十进制数去显示,并且它的测量速度十分快,显示的值更加直观,所以这是种很常见的频率测量仪器。然后在这次的设计中,熟练的学会了c语言和汇编语言的合理运用,加上仿真软件等理解,加上基本单片机和各种元件的基本知识,加上对数字频率计的各种相关文献的采集与查询,不断改正自己对频率计的错误理解,在最后的程序实现与仿真实现的过程中完成了数字频率计的功能实现。在设计的过程中最重要的是,做设计的时候要保持清晰的思路,要有逻辑性,对程序的模块进行每一步的推敲,也要自己动手去实现功能,才能完成最后的设计。参考文献[1]孙菁主编.STM32实战通关初级篇[M].北京:北京理工大学出版社,2018.05.[2]正点原子.STM32F1开发指南(精英版)-库函数版本_V1.1[EB/OL]./thread13912-1-1.html,2019-11-20.[3]张洋等编著.原子教你玩STM32库函数版[M].北京:北京航空航天大学出版社,2015.11.[4]林虹.突出双创能力培养的应用型特色课程教学改革探索——以“单片机原理及应用”课程为例[J].工业和信息化教育,2019(10):33-38.[5]潘宇.基于FPGA和STM32的脉宽频率测量方法[J].实验室研究与探索,2017,36(2):83-86[6]王肖君.超高精度频率计的研究与设计[硕士学位论文].华中师范大学,武汉,2018[7]沈亚钧.基于单片机的数字频率计设计.山西电子技术,2012(05):14-16[8]林建英,伍勇.数字频率计在综合设计实验教学中的多方案实现.实验科学与技术,2005(04):62-64,69附录A系统电路和相关附图系统电路图系统PCB图实物照片图附录B全部程序清单#ifndef__CM3_CORE_H__#define__CM3_CORE_H__#ifdef__cplusplusextern"C"{#endif#define__CM3_CMSIS_VERSION_MAIN(0x01)#define__CM3_CMSIS_VERSION_SUB(0x30)#define__CM3_CMSIS_VERSION((__CM3_CMSIS_VERSION_MAIN<<16)|__CM3_CMSIS_VERSION_SUB)#define__CORTEX_M(0x03)#include<stdint.h>#ifdefined(__ICCARM__)#include<intrinsics.h>#endif#ifndef__NVIC_PRIO_BITS#define__NVIC_PRIO_BITS#endif#ifdef__cplusplus#define__Ivolatile#else#define__Ivolatileconst#endif#define__Ovolatile#define__IOvolatiletypedefstruct{__IOuint32_tISER[8];uint32_tRESERVED0[24];__IOuint32_tICER[8];uint32_tRSERVED1[24];__IOuint32_tISPR[8];uint32_tRESERVED2[24];__IOuint32_tICPR[8];uint32_tRESERVED3[24];__IOuint32_tIABR[8];uint32_tRESERVED4[56];__IOuint8_tIP[240];uint32_tRESERVED5[644];__Ouint32_tSTIR;}NVIC_Type;typedefstruct{__Iuint32_tCPUID;__IOuint32_tICSR;__IOuint32_tVTOR;__IOuint32_tAIRCR;__IOuint32_tSCR;__IOuint32_tCCR;__IOuint8_tSHP[12];__IOuint32_tSHCSR;__IOuint32_tCFSR;__IOuint32_tHFSR;__IOuint32_tDFSR;__IOuint32_tMMFAR;__IOuint32_tBFAR;__IOuint32_tAFSR;__Iuint32_tPFR[2];__Iuint32_tDFR;__Iuint32_tADR;__Iuint32_tMMFR[4];__Iuint32_tISAR[5];}SCB_Type;#defineSCB_CPUID_IMPLEMENTER_Pos24#defineSCB_CPUID_IMPLEMENTER_Msk(0xFFul<<SCB_CPUID_IMPLEMENTER_Pos)#defineSCB_CPUID_VARIANT_Pos20#defineSCB_CPUID_VARIANT_Msk(0xFul<<SCB_CPUID_VARIANT_Pos)#defineSCB_CPUID_PARTNO_Pos4#defineSCB_CPUID_PARTNO_Msk(0xFFFul<<SCB_CPUID_PARTNO_Pos)#defineSCB_CPUID_REVISION_Pos0#defineSCB_CPUID_REVISION_Msk(0xFul<<SCB_CPUID_REVISION_Pos)#defineSCB_ICSR_NMIPENDSET_Pos31#defineSCB_ICSR_NMIPENDSET_Msk(1ul<<SCB_ICSR_NMIPENDSET_Pos)#defineSCB_ICSR_PENDSVSET_Pos28#defineSCB_ICSR_PENDSVSET_Msk(1ul<<SCB_ICSR_PENDSVSET_Pos)#defineSCB_ICSR_PENDSVCLR_Pos27#defineSCB_ICSR_PENDSVCLR_Msk(1ul<<SCB_ICSR_PENDSVCLR_Pos)#defineSCB_ICSR_PENDSTSET_Pos26#defineSCB_ICSR_PENDSTSET_Msk(1ul<<SCB_ICSR_PENDSTSET_Pos)#defineSCB_ICSR_PENDSTCLR_Pos25#defineSCB_ICSR_PENDSTCLR_Msk(1ul<<SCB_ICSR_PENDSTCLR_Pos)#defineSCB_ICSR_ISRPREEMPT_Pos23#defineSCB_ICSR_ISRPREEMPT_Msk(1ul<<SCB_ICSR_ISRPREEMPT_Pos)#defineSCB_ICSR_ISRPENDING_Pos22#defineSCB_ICSR_ISRPENDING_Msk(1ul<<SCB_ICSR_ISRPENDING_Pos)/#defineSCB_ICSR_VECTPENDING_Pos12#defineSCB_ICSR_VECTPENDING_Msk(0x1FFul<<SCB_ICSR_VECTPENDING_Pos)#defineSCB_ICSR_RETTOBASE_Pos11#defineSCB_ICSR_RETTOBASE_Msk(1ul<<SCB_ICSR_RETTOBASE_Pos)#defineSCB_ICSR_VECTACTIVE_Pos0#defineSCB_ICSR_VECTACTIVE_Msk(0x1FFul<<SCB_ICSR_VECTACTIVE_Pos)#defineSCB_VTOR_TBLBASE_Pos29#defineSCB_VTOR_TBLBASE_Msk(0x1FFul<<SCB_VTOR_TBLBASE_Pos)#defineSCB_VTOR_TBLOFF_Pos7#defineSCB_VTOR_TBLOFF_Msk(0x3FFFFFul<<SCB_VTOR_TBLOFF_Pos)#defineSCB_AIRCR_VECTKEY_Pos16#defineSCB_AIRCR_VECTKEY_Msk(0xFFFFul<<SCB_AIRCR_VECTKEY_Pos)#defineSCB_AIRCR_VECTKEYSTAT_Pos16#defineSCB_AIRCR_VECTKEYSTAT_Msk(0xFFFFul<<SCB_AIRCR_VECTKEYSTAT_Pos)#defineSCB_AIRCR_ENDIANESS_Pos15#defineSCB_AIRCR_ENDIANESS_Msk(1ul<<SCB_AIRCR_ENDIANESS_Pos)#defineSCB_AIRCR_PRIGROUP_Pos8#defineSCB_AIRCR_PRIGROUP_Msk(7ul<<SCB_AIRCR_PRIGROUP_Pos)#defineSCB_AIRCR_SYSRESETREQ_Pos2#defineSCB_AIRCR_SYSRESETREQ_Msk(1ul<<SCB_AIRCR_SYSRESETREQ_Pos)#defineSCB_AIRCR_VECTCLRACTIVE_Pos1#defineSCB_AIRCR_VECTCLRACTIVE_Msk(1ul<<SCB_AIRCR_VECTCLRACTIVE_Pos)#defineSCB_AIRCR_VECTRESET_Pos0#defineSCB_AIRCR_VECTRESET_Msk(1ul<<SCB_AIRCR_VECTRESET_Pos)#defineSCB_SCR_SEVONPEND_Pos4#defineSCB_SCR_SEVONPEND_Msk(1ul<<SCB_SCR_SEVONPEND_Pos)#defineSCB_SCR_SLEEPDEEP_Pos2#defineSCB_SCR_SLEEPDEEP_Msk(1ul<<SCB_SCR_SLEEPDEEP_Pos)#defineSCB_SCR_SLEEPONEXIT_Pos1#defineSCB_SCR_SLEEPONEXIT_Msk(1ul<<SCB_SCR_SLEEPONEXIT_Pos)#defineSCB_CCR_STKALIGN_Pos9#defineSCB_CCR_STKALIGN_Msk(1ul<<SCB_CCR_STKALIGN_Pos)#defineSCB_CCR_BFHFNMIGN_Pos8#defineSCB_CCR_BFHFNMIGN_Msk(1ul<<SCB_CCR_BFHFNMIGN_Pos)#defineSCB_CCR_DIV_0_TRP_Pos4#defineSCB_CCR_DIV_0_TRP_Msk(1ul<<SCB_CCR_DIV_0_TRP_Pos)#defineSCB_CCR_UNALIGN_TRP_Pos3#defineSCB_CCR_UNALIGN_TRP_Msk(1ul<<SCB_CCR_UNALIGN_TRP_Pos)#defineSCB_CCR_USERSETMPEND_Pos1#defineSCB_CCR_USERSETMPEND_Msk(1ul<<SCB_CCR_USERSETMPEND_Pos)#defineSCB_CCR_NONBASETHRDENA_Pos0#defineSCB_CCR_NONBASETHRDENA_Msk(1ul<<SCB_CCR_NONBASETHRDENA_Pos)#defineSCB_SHCSR_USGFAULTENA_Pos18#defineSCB_SHCSR_USGFAULTENA_Msk(1ul<<SCB_SHCSR_USGFAULTENA_Pos)#defineSCB_SHCSR_BUSFAULTENA_Pos17#defineSCB_SHCSR_BUSFAULTENA_Msk(1ul<<SCB_SHCSR_BUSFAULTENA_Pos)#defineSCB_SHCSR_MEMFAULTENA_Pos16#defineSCB_SHCSR_MEMFAULTENA_Msk(1ul<<SCB_SHCSR_MEMFAULTENA_Pos)#defineSCB_SHCSR_SVCALLPENDED_Pos15#defineSCB_SHCSR_SVCALLPENDED_Msk(1ul<<SCB_SHCSR_SVCALLPENDED_Pos)#defineSCB_SHCSR_BUSFAULTPENDED_Pos14#defineSCB_SHCSR_BUSFAULTPENDED_Msk(1ul<<SCB_SHCSR_BUSFAULTPENDED_Pos)/#defineSCB_SHCSR_MEMFAULTPENDED_Pos13#defineSCB_SHCSR_MEMFAULTPENDED_Msk(1ul<<SCB_SHCSR_MEMFAULTPENDED_Pos)#defineSCB_SHCSR_USGFAULTPENDED_Pos12#defineSCB_SHCSR_USGFAULTPENDED_Msk(1ul<<SCB_SHCSR_USGFAULTPENDED_Pos)#defineSCB_SHCSR_SYSTICKACT_Pos11#defineSCB_SHCSR_SYSTICKACT_Msk(1ul<<SCB_SHCSR_SYSTICKACT_Pos)#defineSCB_SHCSR_PENDSVACT_Pos10#defineSCB_SHCSR_PENDSVACT_Msk(1ul<<SCB_SHCSR_PENDSVACT_Pos)#defineSCB_SHCSR_MONITORACT_Pos8#defineSCB_SHCSR_MONITORACT_Msk(1ul<<SCB_SHCSR_MONITORACT_Pos)#defineSCB_SHCSR_SVCALLACT_Pos7#defineSCB_SHCSR_SVCALLACT_Msk(1ul<<SCB_SHCSR_SVCALLACT_Pos)#defineSCB_SHCSR_USGFAULTACT_Pos3/*!<SCBSHCSR:USGFAULTACTPosition*/#defineSCB_SHCSR_USGFAULTACT_Msk(1ul<<SCB_SHCSR_USGFAULTACT_Pos)#defineSCB_SHCSR_BUSFAULTACT_Pos1#defineSCB_SHCSR_BUSFAULTACT_Msk(1ul<<SCB_SHCSR_BUSFAULTACT_Pos)#defineSCB_SHCSR_MEMFAULTACT_Pos0#defineSCB_SHCSR_MEMFAULTACT_Msk(1ul<<SCB_SHCSR_MEMFAULTACT_Pos)#defineSCB_CFSR_USGFAULTSR_Pos16#defineSCB_CFSR_USGFAULTSR_Msk(0xFFFFul<<SCB_CFSR_USGFAULTSR_Pos)#defineSCB_CFSR_BUSFAULTSR_Pos8#defineSCB_CFSR_BUSFAULTSR_Msk(0xFFul<<SCB_CFSR_BUSFAULTSR_Pos)#defineSCB_CFSR_MEMFAULTSR_Pos0#defineSCB_CFSR_MEMFAULTSR_Msk(0xFFul<<SCB_CFSR_MEMFAULTSR_Pos)#defineSCB_HFSR_DEBUGEVT_Pos31#defineSCB_HFSR_DEBUGEVT_Msk(1ul<<SCB_HFSR_DEBUGEVT_Pos)#defineSCB_HFSR_FORCED_Pos30#defineSCB_HFSR_FORCED_Msk(1ul<<SCB_HFSR_FORCED_Pos)#defineSCB_HFSR_VECTTBL_Pos1#defineSCB_HFSR_VECTTBL_Msk(1ul<<SCB_HFSR_VECTTBL_Pos)#defineSCB_DFSR_EXTERNAL_Pos4#defineSCB_DFSR_EXTERNAL_Msk(1ul<<SCB_DFSR_EXTERNAL_Pos)#defineSCB_DFSR_VCATCH_Pos3#defineSCB_DFSR_VCATCH_Msk(1ul<<SCB_DFSR_VCATCH_Pos)#defineSCB_DFSR_DWTTRAP_Pos2#defineSCB_DFSR_DWTTRAP_Msk(1ul<<SCB_DFSR_DWTTRAP_Pos)#defineSCB_DFSR_BKPT_Pos1#defineSCB_DFSR_BKPT_Msk(1ul<<SCB_DFSR_BKPT_Pos)#defineSCB_DFSR_HALTED_Pos0#defineSCB_DFSR_HALTED_Msk(1ul<<SCB_DFSR_HALTED_Pos)typedefstruct{__IOuint32_tCTRL;__IOuint32_tLOAD;__IOuint32_tVAL;__Iuint32_tCALIB;}SysTick_Type;#defineSysTick_CTRL_COUNTFLAG_Pos16#defineSysTick_CTRL_COUNTFLAG_Msk(1ul<<SysTick_CTRL_COUNTFLAG_Pos)#defineSysTick_CTRL_CLKSOURCE_Pos2#defineSysTick_CTRL_CLKSOURCE_Msk(1ul<<SysTick_CTRL_CLKSOURCE_Pos)#defineSysTick_CTRL_TICKINT_Pos1#defineSysTick_CTRL_TICKINT_Msk(1ul<<SysTick_CTRL_TICKINT_Pos)#defineSysTick_CTRL_ENABLE_Pos0#defineSysTick_CTRL_ENABLE_Msk(1ul<<SysTick_CTRL_ENABLE_Pos)#defineSysTick_LOAD_RELOAD_Pos0#defineSysTick_LOAD_RELOAD_Msk(0xFFFFFFul<<SysTick_LOAD_RELOAD_Pos)#defineSysTick_VAL_CURRENT_Pos0#defineSysTick_VAL_CURRENT_Msk(0xFFFFFFul<<SysTick_VAL_CURRENT_Pos)#defineSysTick_CALIB_NOREF_Pos31#defineSysTick_CALIB_NOREF_Msk(1ul<<SysTick_CALIB_NOREF_Pos)#defineSysTick_CALIB_SKEW_Pos30#defineSysTick_CALIB_SKEW_Msk(1ul<<SysTick_CALIB_SKEW_Pos)#defineSysTick_CALIB_TENMS_Pos0#defineSysTick_CALIB_TENMS_Msk(0xFFFFFFul<<SysTick_VAL_CURRENT_Pos)typedefstruct{__Ounion{__Ouint8_tu8;__Ouint16_tu16;__Ouint32_tu32;}PORT[32];uint32_tRESERVED0[864];__IOuint32_tTER;uint32_tRESERVED1[15];__IOuint32_tTPR;uint32_tRESERVED2[15];__IOuint32_tTCR;uint32_tRESERVED3[29];__IOuint32_tIWR;__IOuint32_tIRR;__IOuint32_tIMCR;__IOuint32_tLAR;__IOuint32_tLSR;uint32_tRESERVED5[6];__Iuint32_tPID4;__Iuint32_tPID5;__Iuint32_tPID6;__Iuint32_tPID7;__Iuint32_tPID0;__Iuint32_tPID1;__Iuint32_tPID2;__Iuint32_tPID3;__Iuint32_tCID0;__Iuint32_tCID1;__Iuint32_tCID2;__Iuint32_tCID3;}ITM_Type;#defineITM_TPR_PRIVMASK_Pos0#defineITM_TPR_PRIVMASK_Msk(0xFul<<ITM_TPR_PRIVMASK_Pos)#defineITM_TCR_BUSY_Pos23#defineITM_TCR_BUSY_Msk(1ul<<ITM_TCR_BUSY_Pos)#defineITM_TCR_ATBID_Pos16#defineITM_TCR_ATBID_Msk(0x7Ful<<ITM_TCR_ATBID_Pos)#defineITM_TCR_TSPrescale_Msk(3ul<<ITM_TCR_TSPrescale_Pos)#defineITM_TCR_SWOENA_Pos4#defineITM_TCR_SWOENA_Msk(1ul<<ITM_TCR_SWOENA_Pos)#defineITM_TCR_DWTENA_Pos3#defineITM_TCR_DWTENA_Msk(1ul<<ITM_TCR_DWTENA_Pos)#defineITM_TCR_SYNCENA_Pos2#defineITM_TCR_SYNCENA_Msk(1ul<<ITM_TCR_SYNCENA_Pos)#defineITM_TCR_TSENA_Pos1#defineITM_TCR_TSENA_Msk(1ul<<ITM_TCR_TSENA_Pos)#defineITM_TCR_ITMENA_Pos0#defineITM_TCR_ITMENA_Msk(1ul<<ITM_TCR_ITMENA_Pos)#defineITM_IWR_ATVALIDM_Pos0#defineITM_IWR_ATVALIDM_Msk(1ul<<ITM_IWR_ATVALIDM_Pos)#defineITM_IRR_ATREADYM_Pos0#defineITM_IRR_ATREADYM_Msk(1ul<<ITM_IRR_ATREADYM_Pos)#defineITM_IMCR_INTEGRATION_Pos0#defineITM_IMCR_INTEGRATION_Msk(1ul<<ITM_IMCR_INTEGRATION_Pos)#defineITM_LSR_ByteAcc_Pos2#defineITM_LSR_ByteAcc_Msk(1ul<<ITM_LSR_ByteAcc_Pos)#defineITM_LSR_Access_Pos1#defineITM_LSR_Access_Msk(1ul<<ITM_LSR_Access_Pos)#defineITM_LSR_Present_Pos0#defineITM_LSR_Present_Msk(1ul<<ITM_LSR_Present_Pos)typedefstruct{uint32_tRESERVED0;__Iuint32_tICTR;#if((defined__CM3_REV)&&(__CM3_REV>=0x200))__IOuint32_tACTLR;#elseuint32_tRESERVED1;#endif}InterruptType_Type;#defineInterruptType_ICTR_INTLINESNUM_Pos0#defineInterruptType_ICTR_INTLINESNUM_Msk(0x1Ful<<InterruptType_ICTR_INTLINESNUM_Pos)#defineInterruptType_ACTLR_DISFOLD_Pos2#defineInterruptType_ACTLR_DISFOLD_Msk(1ul<<InterruptType_ACTLR_DISFOLD_Pos)#defineInterruptType_ACTLR_DISDEFWBUF_Pos1#defineInterruptType_ACTLR_DISDEFWBUF_Msk(1ul<<InterruptType_ACTLR_DISDEFWBUF_Pos)#defineInterruptType_ACTLR_DISMCYCINT_Pos0#defineInterruptType_ACTLR_DISMCYCINT_Msk(1ul<<InterruptType_ACTLR_DISMCYCINT_Pos)LCD1602实现代码:软件实现:#include<pic.h>#defineucharunsignedchar#defineuintunsignedint#defineDBPORTD//定义端口#definersRB0#defineeRB1_CONFIG(0x3B31);constu

温馨提示

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

评论

0/150

提交评论