频率计数器
频率计又称为频率计数器

频率计又称为频率计数器,是一种专门对被测信号频率进行测量的电子测量仪器。
工作原理为:当被测信号在特定时间段T内的周期个数为N时,则被测信号的频率f=N/T。
其中f为被测信号的频率,N为计数器所累计的脉冲个数,T为产生N个脉冲所需的时间。
计数器所记录的结果,就是被测信号的频率。
如在1s内记录1000个脉冲,则被测信号的频率为1000HZ。
控制电路需要控制几个模块。
包括计数电路,锁存电路,和译码显示电路。
通过产生控制信号控制所要控制的模块,同时会产生清零信号和锁存信号,使显示器显示的测量结果稳定.辑控制电路的作用主要是控制主控门的开启和关闭,同时也控制整机逻辑关系。
原理框图:逻辑控制电路 时基电路数码显示 译码器 锁存器 计数器 门闸电路1. 时基产生与测频时序控制电路模块:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CTRL ISPORT (CLK:IN STD_LOGIC;--系统时钟LOCK:OUT STD_LOGIC;--锁存信号EN:OUT STD_LOGIC;--计数允许信号CLR:OUT STD_LOGIC);--清零信号END ENTITY;ARCHITECTURE ART OF CTRL ISSIGNAL Q:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGINPROCESS(CLK)BEGINIF(CLK'EVENT AND CLK='1') THENIF Q="1111" THENQ<="0000";ELSEQ<=Q+1;END IF;END IF;EN<=NOT Q(3);LOCK<=Q(3) AND NOT(Q(2)) AND Q(1);CLR<=Q(3) AND Q(2) AND NOT(Q(1));END PROCESS;END ART;:每8个系统时钟使能端EN就进行一次高低低平的转换,也就在硬件测试时,将基准信号放在8Hz上.2. 计数电路模块(1)十进制加法计数器模块CB10LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CB10 ISPORT(CLK,EN,CLR:IN STD_LOGIC;COUNT10:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0));--计数器输出信号END CB10;ARCHITECTURE ART OF CB10 ISBEGINPROCESS(CLK,CLR,EN)BEGINIF CLR='1' THENCOUNT10<="0000";ELSIF RISING_EDGE(CLK) THENIF(EN='1') THENIF COUNT10="1001" THENCOUNT10<="0000";ELSECOUNT10<=COUNT10+'1';END IF;END IF;END IF;END PROCESS;END ART;用4个十进制加法计数器来显示待测脉冲信号的频率,频率所测结果用十进制表示,以十进制开始计数。
电子电路中的计数器应用

电子电路中的计数器应用电子计数器是现代电子设备中常见的一种集成电路,用于记录和控制特定事件或过程中的计数。
计数器广泛应用于各种领域,例如自动控制系统、计时器、频率测量等。
本文将详细介绍电子电路中计数器的应用。
一、二进制计数器二进制计数器是最常见的计数器类型之一,能够以二进制形式表示计数结果。
它通常由多个触发器以级联方式构成。
每当触发器经过一次状态变化时,计数器的值就加1。
二进制计数器广泛应用于数字系统中,例如计算机存储器、数字时钟等。
二、分频器分频器是一种特殊的计数器,用于将输入信号的频率减小到所需的输出频率。
它通常通过改变输出信号上的脉冲数量来实现频率的分频。
分频器在通信领域、音频设备以及计时电路中有着重要的应用。
三、频率计数器频率计数器是一种用于测量电信号频率的计数器。
它通过测量单位时间内输入信号上的脉冲数量来计算频率。
频率计数器常用于电子测量仪器中,如频谱分析仪、示波器等。
四、计时器计时器是一种用于测量时间间隔的计数器。
它可以基于稳定的时钟信号,通过统计时钟脉冲的数量来测量时间。
计时器广泛应用于各种计时设备和工业自动化系统中,例如烘烤设备、倒计时器等。
五、事件计数器事件计数器是一种用于记录特定事件发生次数的计数器。
它可以基于特定输入信号的边沿触发进行计数。
事件计数器在自动化生产线、物流系统等领域中常用于统计和控制特定事件的发生次数。
六、步进计数器步进计数器是一种特殊的计数器,具有按照预设的步进模式变化的功能。
步进计数器可以按照用户定义的模式,依次切换到不同的输出状态。
步进计数器广泛应用于数字显示设备、电机驱动控制器等领域。
七、环形计数器环形计数器是一种具有环形结构的计数器,可以在达到最大值后自动返回到初始值。
环形计数器通常用于环形控制系统和循环程序设计中,可以实现循环计数和周期性控制。
总结:电子电路中的计数器应用广泛,包括二进制计数器、分频器、频率计数器、计时器、事件计数器、步进计数器以及环形计数器等。
计数器工作原理

计数器工作原理计数器是一种常见的电子元件,用于对输入脉冲信号进行计数和记录。
计数器广泛应用于数字电子系统中,如时钟电路、频率计数器、计时器等。
本文将介绍计数器的工作原理,包括计数器的基本结构、工作原理和应用场景。
计数器的基本结构包括触发器、计数逻辑和清零逻辑。
触发器用于存储计数器的当前状态,计数逻辑用于对输入脉冲进行计数,而清零逻辑用于将计数器清零。
计数器可以分为同步计数器和异步计数器两种类型,它们的工作原理略有不同。
同步计数器是由多个触发器级联构成的,每个触发器接收上一级触发器的输出作为时钟信号。
当计数器接收到输入脉冲时,所有触发器同时进行状态变化,实现同步计数。
同步计数器的优点是计数稳定、速度快,适用于高速计数场景。
异步计数器是由多个触发器级联构成的,每个触发器接收上一级触发器的输出作为时钟信号。
当计数器接收到输入脉冲时,只有最低位触发器进行状态变化,其他触发器在满足条件时才进行状态变化。
异步计数器的优点是结构简单、适用于低速计数场景。
计数器的工作原理是基于二进制计数的。
计数器可以实现二进制、十进制、十六进制等不同进制的计数,通过触发器的状态变化实现不同进制的计数。
计数器还可以实现正向计数和逆向计数,通过输入脉冲的极性和触发器的逻辑门控制实现不同方向的计数。
计数器在数字电子系统中有着广泛的应用场景。
例如,时钟电路中的分频器就是一种计数器,用于将高频信号分频为低频信号,实现时钟信号的稳定输出。
频率计数器用于测量输入信号的频率,计时器用于测量时间间隔。
此外,计数器还可以用于状态机、计数器芯片、数字逻辑电路等领域。
总之,计数器是一种常见的电子元件,用于对输入脉冲信号进行计数和记录。
计数器的工作原理基于触发器的状态变化,可以实现不同进制、不同方向的计数。
计数器在数字电子系统中有着广泛的应用场景,包括时钟电路、频率计数器、计时器等。
希望本文对计数器的工作原理有所帮助,谢谢阅读!。
如何正确使用计数器实现频率计数

如何正确使用计数器实现频率计数计数器是一种常用的数据结构,用于记录某一事件发生的次数。
在计算机编程中,我们经常需要统计某个事件发生的频率,而计数器正是实现这一功能的重要工具。
本文将介绍如何正确使用计数器实现频率计数的方法。
一、什么是计数器计数器是一种特殊的变量,用于统计某个事件发生的次数。
它可以存储一个整数值,并提供增加和获取计数值的功能。
计数器一般由计数器变量和计数器操作组成。
二、计数器的应用场景计数器广泛应用于各种计算机编程领域,如数据分析、算法设计、性能优化等。
以下是计数器常见的应用场景:1. 频率统计:统计某个事件在一段时间内的发生次数,比如统计用户访问网站的次数。
2. 字符计数:统计文本中每个字符的出现次数,用于文本处理和分析。
3. 程序执行时间计数:统计程序执行的时间,用于性能优化和调试。
三、如何使用计数器实现频率计数使用计数器实现频率计数的方法相对简单,下面是一个常见的实现步骤:1. 创建一个计数器变量:在代码中创建一个计数器变量,用于记录事件发生的次数。
2. 事件发生时增加计数值:当事件发生时,通过计数器的增加操作,将计数器的值加1。
3. 获取计数值:根据需要,可以通过计数器的获取操作,获取事件发生的次数。
4. 可选:重置计数器值:在一段时间内完成统计后,可以选择将计数器的值重置为0,以便重新开始计数。
四、示例代码下面是一个使用计数器实现频率计数的示例代码:```python# 创建计数器变量并初始化为0counter = 0# 事件发生时增加计数值def event_happens():global countercounter += 1# 获取计数值def get_count():global counterreturn counter# 重置计数值def reset_counter():global countercounter = 0# 示例调用event_happens()event_happens()event_happens()print(get_count()) # 输出3reset_counter()print(get_count()) # 输出0```以上示例代码使用Python语言实现了一个简单的计数器。
频率计数器(电子仪器仪表)

频率计数器的使用1、计划课时:2课时2、教学目标:知识目标:1、了解频率计数器的种类及功能特点;2、了解频率计数器的使用注意事项。
能力目标:1、熟悉频率计数器的使用方法与使用技巧;2、能够使用频率计数器完成检测操作。
3、教学重点:掌握频率计数器的使用方法及检测操作。
4、教学方法:多媒体辅助教学;实训练习。
5、教学过程:一、频率计数器的种类及功能特点1、手持式频率计数器和台式频率计数器(图片见课件演示)(1)手持式频率计数器。
这种频率计数器体积小巧,在实际应用中携带方便,可用来测量频率、频率比、时间间隔、周期等。
使用时,将频率计数器与被测信号连接,读出数码显示屏上的数字,就可以得到被测信号的频率和周期了。
(2)台式频率计数器。
可用于测量信号的频率、频率比、周期、时间间隔、计数等,能满足不同的工作需要,使用方法与手持式频率计数器基本一致。
2.通用频率计数器和普通频率计数器(1)通用频率计数器。
在实际应用中,可用来测量频率、频率比、时间间隔、周期、上升、下降时间、正负脉冲宽度、占空比、相位、峰值电压、时间间隔平均、时间间隔延迟等。
(2)普通频率计数器。
通常把主要用于测量频率和计数的计数器称为普通频率计数器,该频率计数器可用于检查或调整各种电子产品中振荡器的频率。
二、频率计数器的按键功能1、晶振按键。
晶振按键主要应用于测量晶体,在测量晶体时,将被测的晶体插入面板下方的晶体插槽,并同时按下该键进行测试,不测量晶体时,一定再按一下该键,使振荡线路停止振荡,以确保不对外界产生干扰。
2、闸门按键。
用于设置测量时的不同计数周期,并影响相应的分辨率,该闸门可以设置的时间有0.1s、1.0s、5.0s和10s四个挡位。
3、挡位按键。
挡位按键主要设置频率计数器的挡位,其中可以设置5个挡位,其中各个挡位和使用的单位是不同的。
挡位1使用的是A 端口,其测量单位是“MHz”;挡位2使用的是B端口,其测量单位是“MHz”;挡位3使用的是B端口,其单位是“kHz”;挡位4使用的是B端口;挡位5使用的是晶体端口,其单位是“kHz”。
电子计数器的分类

电子计数器按功能可分4类。
①通用计数器:可测频率、周期、多周期平均、时间间隔、频率比和累计等。
②频率计数器:专门用于测量高频和微波频率的计数器。
③计算计数器:具有计算功能的计数器,可进行数学运算,可用程序控制进行测量计算和显示等全部工作过程。
④微波计数器:是以通用计数器和频率计数器为主配以测频扩展器而组成的微波频率计。
它的测频上限已进入毫米波段,有手动、半自动、全自动3类。
系列化微波计数器是电子计数器发展的一个重要方面。
艾驰商城是国内最专业的MRO工业品网购平台,正品现货、优势价格、迅捷配送,是一站式采购的工业品商城!具有10年工业用品电子商务领域研究,以强大的信息通道建设的优势,以及依托线下贸易交易市场在工业用品行业上游供应链的整合能力,为广大的用户提供了传感器、图尔克传感器、变频器、断路器、继电器、PLC、工控机、仪器仪表、气缸、五金工具、伺服电机、劳保用品等一系列自动化的工控产品。
如需进一步了解相关仪器仪表产品的选型,报价,采购,参数,图片,批发等信息,请关注艾驰商城。
频率计数器工作原理

频率计数器工作原理频率计数器是一种用于测量和显示信号的频率的仪器。
它广泛应用于各种领域,包括电子工程、通信、无线电、计算机等。
在频率计数器工作原理的解析过程中,主要涉及到计数器的基本原理、测量过程和显示原理等方面。
频率计数器的基本原理是利用数字计数器来对输入信号的周期进行计数。
频率计数器接收输入信号后,通过内部的时钟电路和计数器进行计数,并将结果显示在数字显示屏上。
其工作原理包括以下几个关键步骤:1. 输入信号接收:频率计数器首先接收来自外部的输入信号。
这个输入信号可以是来自电子设备、传感器、天线或其他源的信号。
这个输入信号的频率范围可以非常广泛,从几赫兹到几千兆赫都可以进行测量。
2. 信号测量:接收到输入信号后,频率计数器通过内部的计数器和时钟电路对信号的周期进行计数。
计数器会记录输入信号的脉冲数量,并将其转换为对应的频率数值。
这个过程需要经历一个计数周期,通常是1秒钟。
3. 显示输出:频率计数器通过数字显示屏将测得的频率数值显示出来。
这个显示数值是以赫兹(Hz)为单位,表示输入信号的频率大小。
一些高级的频率计数器还可以显示对应的周期、占空比等信息。
频率计数器的测量过程主要涉及到计数器对输入信号的计数及显示,其中计数器是核心部件。
在频率计数器中,采用的计数器一般是分频型的计数器,其基本工作原理是通过将输入信号进行分频来实现计数。
分频计数器可以将高频率的输入信号分频成低频率的信号,从而降低计数器的负载压力,并扩大其测量范围。
采用分频型计数器也可以实现对高频率信号的精确测量。
频率计数器的显示原理是通过数字显示屏将测得的频率数值以数字的形式展示出来。
数字显示屏可以直观地显示出输入信号的频率大小,同时还可以提供对应的单位显示,如Hz、kHz、MHz等。
一些高级的频率计数器还可以实现在图形显示屏上显示波形图,并进行进一步的数据分析和处理。
频率计数器通过计数器对输入信号进行计数,并将测得的频率数值以数字的形式显示出来,从而实现对信号频率的精确测量。
常用的时间频率计量标准器具有哪些?

常用的时间频率计量标准器具有哪些?关键词:时间频率计量标准器具,时频计量,计量标准时间频率工作计量器具分为两大类:时间频率发生器和时间频率测量仪。
前者产生频率、时间间隔或时刻信号,后者用于测量频率和时间间隔。
本文就常用的计量标准器具名称、测量的范围和产品特点进行简单介绍。
频率合成器也称之为信号发生器,频率范围为1us到110GHz。
频率合成器也包括GNSS信号模拟器。
信号发生器推荐SYN5651型设备。
主要作用是为被测电路产生提供其所需要的测试信号。
输出信号频率通常可按十进位数字选择,最高能达11位数字的极高分辨力。
信号是是以高稳定度石英振荡器作为标准频率源,利用频率合成技术形成所需之任意频率的信号,具有与标准频率源相同的频率准确度和稳定度。
时间合成器是产生各种时间间隔,信号形式均为脉冲。
以正(负)脉冲间隔或正(负)脉冲宽度给出时间间隔。
标准时间间隔发生器推荐SYN5612型,采用直接数字合成技术,选择高精度恒温晶振作为内部时钟基准,对信号进行计数触发或单次触发输出,具有多个输出通道和外触发输入通道、外频标输入通道,多种脉冲信号输出,采用大规模集成电路FPGA技术,全数字控制,实现高精度脉冲发生测试。
频率计数器是一款能精准测量信号频率的高性价比时间频率测试仪器。
频率测量范围为1uhz到110GHZ。
SYN5637型高精度频率计数器能对平均值、最大值、最小值、峰峰值等参数进行测量。
时差测量,可测量两种脉冲间的时间间隔和脉冲宽度,范围为1ns到104s。
SYN5605型多通道时间间隔测量仪是一款高性价比的精密时差测量仪器,功能完善,抗干扰能力强。
GNSS接收机,可用于时间测量,接收机可接收一种或多种GNSS 信号,产生标准1pps信号。
SYN2306C型一款GPS和北斗双模接收机,产生串口时间信息和1pps秒脉冲同步信号,无需外接CPU就可以直接输出NEMA数据。
参考频标是高精度频率标准设备。
频率稳定度应优于被检频率稳定度3倍,其他技术指标如日老化率、频率准确度等应优于被检相应技术指标一个数量级。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、系统设计1. 设计的任务与要求1.1 设计任务:设计并制作一台闸门时间为1s的数字频率计。
1.2 设计要求(1)频率和周期的测量:(a)被测信号为正弦波,频率范围为1Hz到10MHz;(b)给测信号的有效值电压范围为50mV到1V;(c)测量相对误差的绝对值不大于104-。
(2)时间间隔测量功能:(a)被测信号为方波,频率范围为100Hz到1MHz;(b)给测信号的峰值电压范围为50mV到1V;(c)被测时间间隔的范围为0.1us到100ms;(d)测量相对误差的绝对值不大于102-。
(3)测量数据刷新时间不大于2s,并能自动显示单位。
发挥要求(1)频率和周期测量的正选信号频率范围为1Hz到100MHz,其他要求同基本要求(1)和(3)。
(2)频率和周期测量时被测正弦信号的最小有效值电压为10mV,其他要求同基本要求(1)和(3)。
(3)增加脉冲信号占空比的测量功能。
2. 总体方案的论证与比较基于设计数字频率计可以采用三种方法,第一可以通过数字电路实现,由于题目要求精度要到104-,数显的方式无法实现;第二可以通过FPJA可编程器件进行实现,虽然用FPJA设计,比数字电路和stm32更简易,但编程复杂,运算能力欠缺;第三采用stm32开发板进行实现,不管是其精度和运算能力,还运行速度快,选择stm32来设计。
制作一台时间为1s的闸门,利用stm32软件编程设计,被测范围为1Hz到10MHz,考虑到精度的要求,低频利用放大电路进行增幅,再通过软件计算输入显示,高频通过分频电路降低测量误差。
时间间隔测量通过通道信号的输入给放大整流电路,通过整形后的波形测出Ta-b,被测范围可通过内部时钟频率设定一个时标频率,到时读出。
2.1 放大模电路块方案一:为了将待测信号整形成能接受的脉冲信号,满足显示,可通过放大器后接一个单门限电压比较器(LM339),这样虽然能完成整形工作,但电路抗干扰能力差,带来数据误差的影响。
方案二:通过AD8009芯片设计的放大电路,在用AD8055把输入为正弦波的信号输出为方波,频率不发生变化。
从芯片功能的满足和误差方面考虑,采用方案二。
2.2 频率测试电路模块方案一:在放大整形电路后,信号频率还存在显示的误差很大,考虑对频率进行晶体振荡器来解决。
对于小信号的频率不进行倍频,虽然倍频可以减小测量误差,但对于低频信号误差很小;采用256分频电路通过74HC74把高频信号分频。
方案二:把频率信号经脉冲形成电路后加到闸门电路的输入端,直接通过测试一段时间后,被计数的脉冲的值由十进制计数器进行计数,设计数值为M,则频率 f =M / T。
最终选择方案一。
2.3 时间间隔测试电路模块方案一:利用双通道DDS函数信号发生器,用正常触发方式,把两个信号从两个通道输入,调节合适的触发电平,对提供的两路信号进行测试Ta-b。
采用74LS86芯片实现二输入四异或门,对其输出为高电平时对应的时间。
方案二:用单片机实现。
把定时器设置为外部引脚输入电平的控制,即用外部中断控制定时器的运行,设置单片机的I/O的中断,在上升延或下降延触发第一次中断时(即第一个脉冲)开始用定时器记时,在第二次中断的时候停止记时,并关闭中断。
然后用这个时间减去脉冲的宽度。
考虑双通道函数发生器,最终使用的是STM32进行计算显示,故选择方案一。
二、单元硬件电路设计:系统框图:总流程图:图 2-1 硬件系统框图图 2-2 设计总流程图1.放大整形电路图2-2 放大电路框图放大部分所用的芯片AD8009,是一款超高速电流反馈型放大器,压摆率达到惊人的5 500 V/μs,上升时间仅为545ps,非常适合用作脉冲放大器,。
前级电压增益十倍,后级通过AD8055截止失真得到整形后的方波。
图 2-3 放大整形电路仿真图2.分频电路对高频信号进行分频选用的芯片是带置位和复位的上升沿有效双D触发器74HC74,门电路数:2,74HC74是一个高速硅栅CMOS器件,其引脚与低功耗肖特基TTL兼容(输入通道),该74HC74是双正边沿触发,设定和复位是异步积极投入低并能独立工作的时钟输入。
信息输入的数据传送到Q输出的低到高的时钟脉冲过渡,D的投入必须是稳定的一个设定时间之前低到高时钟转换为可预知的操作。
通过四片74HC74芯片进行256分频。
如下是仿真图。
图 2-4 分频电路仿真图3.逻辑电路74ls86是常用的 TTL 2输入端四异或门在数字电路中常用,对应的coms器件是74hc86特点是电源功耗很低。
他的电源电压4.75-5.25V,当双通道函数发生器输出信号源时,通过整形电路后给STM32输出时间间隔Ta-b。
图 2-5 时间间隔波形图图 2-6 异或逻辑电路仿真4.电源电路电源电路是给放大电路供直流正负5V的电源用的,先通过变压器降压在通过整流,滤波,稳压电路输出。
图 2-7 正负5V 仿真形图图2-8 正负5V电路图三、软件设计:设计中proteus ,Multisim,用于还有硬件模块的模拟仿真,STM32用于捕获硬件设备的信号,最终在其显示屏上显示。
STM32的程序流程图如下:四、系统测试与测试结果1.测试的仪器函数信号发生器,万用表,STM32M3S开发板,电压表,数字示波器2.测试结果分析频率和周期是可以相互转换的,所以测出频率时就可以通过算法转换得到周期。
将示波器信号输入信号连接上标准的数字频率计,测出正确的值,在把设计好的数字频率计接上,进行调试。
调试结果,能测试出1Hz~10MHz的频率信号,测量误差满足要求。
图4-1 调试过程图表1 频率测量表表2 时间间隔测量表五、结论基于stm32,采用计时器产生四路信号,单通道的参数精度得到保证,软件编程方便计算,方案上在分频部分,采用更高频率的晶体振荡器精度会更高,分频电路也可以采用软件直接读入实现测试。
参考文献:[1] 王秀杰,模拟电路集成运用[M],西北大学出版社,1994.[2] J.D林肯,电子电路中设计手册[M],科学普及出版社,1981[3] 杨素行,模拟电子技术基础[M],高等教育出版社,2005:212-220[4] 王武江,陈树凯,常用电路速查手册[M],冶金工业出版社,2004 105-110[5] 郭培源,电子电路级及子电器[M],高等教育出版社,200,4:65-69[6] 潭浩强,《C语言程序设计》[M],清华大学出版社[7] 大学生电子设计网httpz://[8] 中国电子元件查询网httpz://[9] 卢毅,赖杰,数字电路设计[M],北京:科学出版社,2001.[10] 刘凯,基于STM32开发板库函数运用实现软件对频率的捕获和显示灯.[11] 徐自图,电子电路原理分析与仿真[M],西安电子工业出版社.[12] Alan,信号与系统[M]西安:西安交通大学出版社,1997.[13]Jacob Millman and Arvin Grabel .Microelectronics.2ed .NewYork:Mcgraw-Hill book ompany,1987[14]Heider, E.R.& D.C.Oliver.The structure of color spacei n naminga n d memory of t w o languages [J]. Foreign Language Teaching and Research, 1999, (3): 62 67.[15] Allan R.Hambley.Electron.2 ed .Prentice Hall Inc .2000附录:附录1 主要元器件清单附录3 电路原理图及印制板图图3-1 电路原理图图3-1 pcb仿真图附录4 程序清单/******************************信号捕获部分****************************/void TIM3_IRQHandler(void) //TIM3中断{if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源{TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx的中断待处理位:TIM 中断源LED1=!LED1;}}//PWM输出初始化//arr:自动重装值//psc:时钟预分频数/*void TIM3_PWM_Init(u16 arr,u16 psc){GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);//使能GPIO外设和AFIO复用功能模块时钟使能GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //Timer3部分重映射TIM3_CH2->PB5 //用于TIM3的CH2输出的PWM通过该LED显示//设置该引脚为复用输出功能,输出TIM3 CH2的PWM脉冲波形GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //TIM_CH2GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);//GPIO_WriteBit(GPIOA, GPIO_Pin_7,Bit_SET); // PA7上拉TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 80KTIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值不分频TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高TIM_OC2Init(TIM3, &TIM_OCInitStructure); //根据TIM_OCInitStruct中指定的参数初始化外设TIMxTIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIMx在CCR2上的预装载寄存器TIM_ARRPreloadConfig(TIM3, ENABLE); //使能TIMx在ARR上的预装载寄存器TIM_Cmd(TIM3, ENABLE); //使能TIMx外设}*///定时器5通道1输入捕获配置TIM_ICInitTypeDef TIM5_ICInitStructure;void TIM5_Cap_Init(u16 arr,u16 psc){GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE); //使能TIM5时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能GPIOA时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //PA0 清除之前设置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0 输入GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_ResetBits(GPIOA,GPIO_Pin_0); //PA0 下拉//初始化定时器5 TIM5TIM_TimeBaseStructure.TIM_Period = arr; //设定计数器自动重装值TIM_TimeBaseStructure.TIM_Prescaler =psc; //预分频器TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位//初始化TIM5输入捕获参数TIM5_ICInitStructure.TIM_Channel = TIM_Channel_1; //CC1S=01 选择输入端IC1映射到TI1上TIM5_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //上升沿捕获TIM5_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //映射到TI1上TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //配置输入分频,不分频TIM5_ICInitStructure.TIM_ICFilter = 0x00;//IC1F=0000 配置输入滤波器不滤波TIM_ICInit(TIM5, &TIM5_ICInitStructure);//中断分组初始化NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn; //TIM3中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //先占优先级2级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //从优先级0级NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器TIM_ITConfig(TIM5,TIM_IT_Update|TIM_IT_CC1,ENABLE);//允许更新中断,允许CC1IE捕获中断TIM_Cmd(TIM5,ENABLE ); //使能定时器5}u8 TIM5CH1_CAPTURE_STA=0; //输入捕获状态u16 TIM5CH1_CAPTURE_VAL; //输入捕获值//定时器5中断服务程序void TIM5_IRQHandler(void){if((TIM5CH1_CAPTURE_STA&0X80)==0)//还未成功捕获{if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET){if(TIM5CH1_CAPTURE_STA&0X40)//已经捕获到高电平了{if((TIM5CH1_CAPTURE_STA&0X3F)==0X3F)//高电平太长了{TIM5CH1_CAPTURE_STA|=0X80;//标记成功捕获了一次TIM5CH1_CAPTURE_VAL=0XFFFF;}else TIM5CH1_CAPTURE_STA++;}}if (TIM_GetITStatus(TIM5, TIM_IT_CC1) != RESET)//捕获1发生捕获事件{if(TIM5CH1_CAPTURE_STA&0X40) //捕获到一个下降沿{TIM5CH1_CAPTURE_STA|=0X80; //标记成功捕获到一次上升沿TIM5CH1_CAPTURE_VAL=TIM_GetCapture1(TIM5);TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Rising); //CC1P=0 设置为上升沿捕获//j=j+1;}else //还未开始,第一次捕获上升沿{TIM5CH1_CAPTURE_STA=0; //清空TIM5CH1_CAPTURE_VAL=0;TIM_SetCounter(TIM5,0);TIM5CH1_CAPTURE_STA|=0X40; //标记捕获到了上升沿TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Falling);//CC1P=1 设置为下降沿捕获}}}TIM_ClearITPendingBit(TIM5, TIM_IT_CC1|TIM_IT_Update); //清除中断标志位}/******************************显示部分********************************/ printf("HIGH:%lf us ",temp2);//打印总的高点平时间printf("HEHIGH:%lf us ",hetemp);printf("W:%d ", w);printf("GAOWEI:%d ", gaowei);printf("REQ:%lf HZ \r\n ",REQ2);printf("KEYO:%d",KEY0);以上部分为电脑窗口调试显示LCD_ShowString(35,50,200,16,16," ELC design contest");sprintf((char*)stm_req,"Frequency:%lf HZ",REQ2);LCD_ShowString(40,200,200,16,16,stm_req);sprintf((char*)stm_temple,"Frequency:%lf us",temp);LCD_ShowString(40,190,200,16,16,stm_temple);以上部分为STM32屏幕显示部分/******************************主函数部分******************************/。