基于ARM频率计设计_第1页
基于ARM频率计设计_第2页
基于ARM频率计设计_第3页
基于ARM频率计设计_第4页
基于ARM频率计设计_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、 电控学院课程设计(论文) 课程名称: ARM课程设计 题 目: 基于ARM的频率计系统设计 院 (系): 电xxxxxxxxxxxxxxx 专业班级: 测控技术与与仪器xxxx班 姓 名: xxxxxxxxxxxx 学 号: xxxxxxxxxxxxxxxxxxxxxxxxx 指导教师: xxxxxxxxxxxxxxxxxxxxxxx 2017 年 1 月 6 日摘 要随着移动设备的流行和发展,嵌入式系统已经成为一个热点。它并不是最近出现的新技术,只是随着微电子技术和计算机技术的发展,微控制芯片功能越来越大,而嵌入微控制芯片的设备和系统越来越多,从而使得这种技术越来越引人注目。它对软硬件的体

2、积大小、成本、功耗和可靠性都提出了严格的要求。嵌入式系统的功能越来越强大,实现也越来越复杂,随之出现的就是可靠性大大降低。最近的一种趋势是一个功能强大的嵌入式系统通常需要一种操作系统来给予支持,这种操作系统是已经成熟并且稳定的,可以是嵌入式的Linux,WINCE等等。本文所要研究的就是基于ARM嵌入式系统的频率计系统的设计与实现。本设计采用了32位ARM微处理器STM32F103作为核心处理器和ARM Linux作为嵌入式操作系统。实现了单位周期的频率计数,采用串口与基于Labview的上位机实现通信,将实时结果显示在上位机的界面。关键词:嵌入式系统,ARM ,STM32F103 ,嵌入式l

3、inux , Labview前 言在电子技术各参数中,频率测量的精确度是最高的,因而人们常利用某种确定的函数关系把其他电参数的精确测量转换为频率的测量。目前,测量频率方法主要有低频测周期、高频测频率、多周期同步测量法以及多周期完全同步测频法。采用低频端测周、高频端测频时,存在中界频率测量误差大即测量死区问题,因此频率的测量准确度很难提高到较高的数量级;采用多周期完全同步测频法,则闸门控制时间必须是被测信号与时标信号周期个数的最大公约数,因此进行一次完全同步测量需要很长的时间,不适于对实时性要求较高的场合,多周期同步测频法,其最大优点就是与被测信号频率大小无关,测量速度快,精度高。但多周期同步测

4、量法存在同步电路结构复杂,易造成误触发,可靠性不高,且此方法虽在原理上消除了±1量化误差,但在实际应用中,经过同步电路之后,只消除了-1量化误差,仍不能保证完全消除+1量化误差,因此测量精度会间歇性的出现较大偏差等问题。集成数字频率计由于所用元件少、投资少,体积小,功耗低,且可靠性高,功能强,易于设计和研发,使得它具有技术上的实用性和应用的广泛性。不论从我们用的彩色电视机、电冰箱,DVD,还有我们现在家庭常用到的数字电压表数字万用表等等都包含有频率计。现在频率计已是向数字智能方向发展,即可以很精确的读数也精巧易于控制。数字频率计已是现在频率计发展的方向,它不仅可以很方便的读数,而且还

5、可以使频率的测量范围和测量准确度上都比模拟先进.而且频率计的使用已是很多的方面,数字卫星、数字通讯等高科技的领域都有应用。所以频率计的发展是一个整体的趋势。一、系统概述1、STM32F103简介ARM 公司是专门从事基于RISC 技术芯片设计开发的公司,作为知识产权供应商,本身不直接从事芯片生产,靠转让设计许可由合作公司生产各具特色的芯片,世界各大半导体生产商从ARM公司购买其设计的ARM 微处理器核,根据各自不同的应用领域,加入适当的外围电路,从而形成自己的ARM 微处理器芯片进入市场。目前,全世界有几十家大的半导体公司都使用ARM 公司的授权,因此既使得ARM 技术获得更多的第三方工具、制

6、造、软件的支持,又使整个系统成本降低,使产品更容易进入市场被消费者所接受,更具有竞争力。STM32F103xx增强型系列由意法半导体集团设计,使用高性能的ARM Cortex-M3 32位的RISC内核,工作频率为72MHz,内置高速存储器(高达128K字节的闪存和20K字节的SRAM),丰富的增强I/O端口和联接到两条APB总线的外设。所有型号的器件都包含2个12位的ADC、4个通用16位定时器和2个高级定时器,还包含标准和先进的通信接口:多达2个I2C和SPI、3个USART、一个USB和一个CAN。2、总体方案设计本次频率计系统设计采用以STM32F103xx系列芯片为核心,由于F103

7、系列芯片的内部资源较多,本次设计充分利用芯片内部资源,设计出高精度的频率计系统。STM32F103待测信号发生模块定时器上位机显示结果图:系统整体框图系统的主体功能是充分利用定时器,用32内部的通用定时器3的复用功能-输入捕获。通过输入捕获对外部输入STM32芯片内部的脉冲上升沿计数,输入捕获功能可以实现每一次外部脉冲输入的上升沿引发一次中断,再通过通用定时器4定时一秒,通过定时一秒钟计算输入捕获中断次数来判断钟外部脉冲输入的频率,最后将这个数据传送给上位机通过虚拟仪器LABVIEW来显示出频率。设计中考虑到采用STM32F103开发板作为硬件基础,板子承受的最大电压为3.3V,而且程序调试中

8、如果接入外部脉冲输入,不能够立即查询出问题所在,所以通过芯片内部资源通用定时器5的复用功能输出PWM波来模拟外部脉冲输入,这样也可以更加简化硬件设计,所以本次系统充分利用32芯片内部定时器资源来设计系统。图:系统设计流程图二、整体功能设计1、STM32 通用定时器简介STM32 的通用定时器是一个通过可编程预分频器( PSC)驱动的 16 位自动装载计数器( CNT)构成。 STM32 的通用定时器可以被用于:测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和 PWM)等。 使用定时器预分频器和 RCC 时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。 STM

9、32 的每个通用定时器都是完全独立的,没有互相共享的任何资源。STM3 的通用 TIMx (TIM2、 TIM3、 TIM4 和 TIM5)定时器功能包括: 1)16 位向上、向下、向上/向下自动装载计数器( TIMx_CNT)。 2)16 位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为 165535 之间的任意数值。 3) 4 个独立通道( TIMx_CH14),这些通道可以用来作为: A输入捕获 B输出比较 C PWM 生成(边缘或中间对齐模式) D单脉冲模式输出 4)可使用外部信号( TIMx_ETR)控制定时器和定时器互连(可以用 1 个定时器控制另外

10、一个定时器)的同步电路。 5)如下事件发生时产生中断/DMA: A更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发) B触发事件(计数器启动、停止、初始化或者由内部/外部触发计数) C输入捕获 D输出比较 E支持针对定位的增量(正交)编码器和霍尔传感器电路 F触发输入作为外部时钟或者按周期的电流管理 2、定时器功能简介本次设计系统中需要利用通用定时器产生一秒定时。STM32F103中的通用定时器可以由向上计数、向下计数、向上向下双向计数多种计数模式。向上计数模式中,计数器从0计数到自动加载值(TIMx_ARR计数器内容),然后重新从0开始计数并且产生一个计数器溢出事件。

11、在向下模式中,计数器从自动装入的值(TIMx_ARR)开始向下计数到0,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件。而中央对齐模式(向上/向下计数)是计数器从0开始计数到自动装入的值-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数。系统中采用向上计数模式,并打开定时中断功能,当定时一秒进入中断后后,读取输入捕获进入中断的次数并将数据通过串行口发送到上位机显示。图:系统整体硬件3、PWM简介 PWM 是 Pulse Width Modulation 的缩写,中文意思就是脉冲宽度调制,简称脉宽调制。它是利用微处理器的数字输出来对模拟电路

12、进行控制的一种非常有效的技术,其控制简单、灵活和动态响应好等优点而成为电力电子技术最广泛应用的控制方式,其应用领域包括测量,通信,功率控制与变换,电动机控制、伺服控制、调光、开关电源,甚至某些音频放大器,因此研究基于 PWM 技术的正负脉宽数控调制信号发生器具有十分重要的现实意义。PWM 是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM 信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通

13、的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用 PWM 进行编码。本次设计系统中利用通用定时器的复用功能输出比较输出PWM波,系统中通过调节PWM波的输出周期来改变模拟输出的脉冲频率。4、输入捕获简介输入捕获模式可以用来测量脉冲宽度或者测量频率。STM32 的定时器,除了 TIM6 和 TIM7,其他定时器都有输入捕获功能。 STM32 的输入捕获,简单的说就是通过检测 TIMx_CHx 上的边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值( TIMx_CNT)存放到对应的通道的捕获/比较寄存器( TIMx_CC

14、Rx)里面,完成一次捕获。同时还可以配置捕获时是否触发中断/DMA 等。接下来,我们介绍我们需要用到的一些寄存器配置,需要用到的寄存器有: TIMx_ARR、TIMx_PSC、 TIMx_CCMR1、 TIMx_CCER、 TIMx_DIER、 TIMx_CR1、 TIMx_CCR1 这些寄存器在前面全部都有提到(这里的 x=5),我们这里就不再全部罗列了,我们这里针对性的介绍这几个寄存器的配置。首先 TIMx_ARR 和 TIMx_PSC,这两个寄存器用来设自动重装载值和 TIMx 的时钟分频,再来看看捕获/比较模式寄存器 1: TIMx_CCMR1,这个寄存器在输入捕获的时候,非常有用,有

15、必要重新介绍,该寄存器的各位描述如图所示:当在输入捕获模式下使用的时候,对应图的第二行描述,从图中可以看出,TIMx_CCMR1 明显是针对 2 个通道的配置,低八位7: 0用于捕获/比较通道 1 的控制,而高八位15: 8则用于捕获/比较通道 2 的控制,因为 TIMx 还有 CCMR2 这个寄存器,所以可以知道CCMR2 是用来控制通道 3 和通道 4。本次频率计设计系统中采用TIM5_CH1 来捕获上升沿脉冲信号,也就是要先设置输入捕获为上升沿检测,记录发生上升沿的时候 TIM5_CNT 的值。当上升沿到来时,发生捕获,并记录得到一次脉冲信号值。这样,定时一秒钟捕获到上升沿的次数,就是每

16、秒测量到的脉冲次数,即捕获的脉冲频率,这就是我们所需要的结果,然后通过串口连接到上位机,将数据发送到上位机labview显示结果。5、串口通信设计通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。USART利用分数波特率发生器提供宽范围的波特率选择。它支持同步单向通信和半双工单线通信,也支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。接口通过三个引脚与其他设备连接在一起。任何USART双向通信至少需要两个脚:接收数据输入(RX

17、)和发送数据输出(TX)。 RX:接收数据串行输入。通过采样技术来区别数据和噪音,从而恢复数据。 TX :发送数据输出。当发送器被禁止时,输出引脚恢复到它的I/O端口配置。当发送器被激活,并且不发送数据时,TX引脚处于高电平。在单线和智能卡模式里,此I/O 口被同时用于数据的发送和接收。串口做为ARM的重要外部接口,同时也是软件开发的重要调试手段。对于 单片机学习来说,非常重要。而我们开发板使用的 STM32F103 最多可以提 供 5 路串口。那么 STM32 的串口操作步骤是怎么样的呢? 1) 打开 GPIO 的时钟使能和 USART 的时钟使能。 2) 设置串口 IO 的 IO 口模式。

18、 (一般输入是模拟输入, 输出是复用推挽输出) 3) 初始化 USART。 (包括设置波特率、数据长度、停止位、效验位等) 4) 如果使用中断接收的话,那么还要设置 NVIC 并打开中断使能。串口总线在发送或接收前应处于空闲状态,发送的一帧数据包括一个起始位、一个数据字(8或9位)、校验位和1或2个的停止位。由此表明数据帧的完整和数据准确行。图:串口发送配置流程图6、上位机显示界面设计上位机的显示界面通过labview软件设计。上位机Labview的设计主要是串口配置设计和结果显示,其整体设计后的界面如下图所示:图:上位机显示界面三、系统总体调试本次设计系统中的主要软件设计就是对STM32F1

19、03芯片内部定时器的充分利用并综合调用,由于32芯片的设计采用库函数开发方式编写程序,大大简化了程序的设计难度。本次设计系统中也遇到了一些问题,在老师和同学的帮助下最后都一一解决了,在此也谢谢帮助过我的老师和同学们。1.设计中的捕获中断在几次调试中都没有得到正确的数据,最后通过前前后后的软件检查发现了问题的所在,原来是在程序没有对通用定时器的捕获功能映射到相应的GPIO端口,因此IO口不能相应的识别上升沿,就不能产生中断并返回正确的数据。改正方案:打开STM32的GPIO口配置,并使定时器输入捕获功能到相应的IO口,改正之后,通过串口助手调试可以得到正确的捕获到的脉冲频率。2. 下位机程序整体

20、设计之后检查没错,并可以正确的在串口助手显示正确的结果,后边在上位机设置完成后串口通讯,但在labview界面中不能正确显示结果,后来多次查询,发现是STM32F103板子没有232模块,因此不能正确的进行串口通讯。改正方案:在硬件设计中重新设计硬件通信模块,改正之后就可以正常的通信,上位机可以正确的显示结果。当然,在调试中还遇到很多细节问题,这些错误相信只要能够稍微认真一点就能够避免的。四、设计心得这次的课程设计是基于 STM32F103的频率计,实现的主要功能用ARM的定时器/计数器的定时和计数功能,外部扩展基于LABVIEW的上位机,实现实时显示,求累计每秒进入ARM的外部脉冲个数用上位

21、机显示。 在做数字频率计的设计时,开始是遇到不少的问题,比如我们想如此微弱的信号是怎样被数字频率计检测的呢,频率计到底是什么设计原理呢,毕竟还没有接触过实际设计和开发,所以在考虑问题的时候往往是不全面的,也就是说这次设计还有不少的方面没有考虑周全,也一定存在着这样那样的问题。在调试工作时,我们要注意认真检查设备连接是否正确。采用单片机智能控制,结合外围电子电路,得以高低频率的精度测量,编程简单,精度高。自己学习ARM已经有一段的时间了,这次我又一次利用它来完成课程设计,现在深深地感受ARM的适用性强、应用面广、功能完善。ARM技术发展已经很成熟,在电子控制系统应用上仍然占有很重要的地位,作为一

22、名测控专业的学生,学习好ARM嵌入式就显得很有必要。在学习ARM时,不能只满足于课本以及软件仿真,更为重要的是注重它在实际生活中的应用,多思考、多动手搭建电路,这样我们才能将所学的东西内化,为今后在系统设计中打下一个坚实的基础确保各个部件都在正常工作,再进行软件调试工作。调试过程,按照步骤进行操作,切记自己随意妄为。总之,这次课程设计还是学习到了很多东西,耐心,团队合作等等。感谢我们组员的配合以及老师的耐心指导。实际的操作总是比理论的学习困难更多,有很多问题是我们没有遇到过的,学习了一学期的ARM,无论理论知识学的如何,如果不动手操作,我们永远不会解决这些问题,因为我们也不会碰到这些问题,发现

23、问题解决问题,这才是求学求知的途径。ARM嵌入式的内容很丰富,我们现在知道的不过是凤毛麟角,但是这一学期的学习加上这一周的课程设计,使我对ARM的兴趣更加浓烈。实践出真知,这句话用在学习ARM身上最适合不过,理论与实践结合才能够创新。我觉得做课程设计同时也是对课本知识的巩固和加强,平时看课本时,有时问题老是弄不懂,做完课程设计,那些问题就迎刃而解了。 我次的课程设计是基于 STM32F103的频率计,实现的主要功能用ARM的定时器/计数器的定时和计数功能,外部扩展基于LABVIEW的上位机,实现实时显示,求累计每秒进入ARM的外部脉冲个数用上位机显示。当老师在之前让我们选题目时,我就开始在网上

24、、在图书馆找资料,当接触到基于ARM的频率计这个题目时,我很迷茫,不知从何下手,虽说这学期已经开ARM课了,但是自认为学的一点都不好。随后我们去上网查找资料,去图书馆查文献,但是都没有找到类似的课题,最后经过我与组员的努力,勉强有些许思绪,虽说最后我们没能很完善的做出课题,但这个过程是值得高兴地。在模拟硬件电路部分,我们查了相关的资料,其中遇到了很多的繁琐问题,但经过同学帮助都得以解决;在软件方面,我们按照书上的资料,逐步学习,逐步推敲,最终写出了部分程序,虽然功能没有完全表现出来,但是我们都很认真的去动手做了。事实上,我们遇到的问题远不止这些,但是,无论怎样的挫折,无论怎样的想要放弃,最后都

25、坚持了下来。有困难就查资料,有困难就请教同学,有困难就解决困难!本着这样的信念和心态,我们解决了一个个的困难,虽说结果不能达到预期结果,但从中我们也学到了很多知识,从原来不太熟悉的STM32F103、ARM各个部件到最后的的每一部分都有所了解,我觉得这就是我们坚持到最后的最大成果,其实在很多事情来临时,我们不仅仅关心的是最后的结果,更重要的是拥有其中的过程。在整个动手过程,既加深了我们对ARM的理论认识,又通过STM32F103这个很有意思的载体,实现了对ARM的应用。同时,对我而言,这次课程设计还有更重要的意义,那就是我开启了对ARM制作的兴趣,个人希望在以后的工作学习中,加强这方面的训练,

26、多制作出自己感兴趣的ARM作品。书本上的知识很多都是理想化后的结论,忽略了很多实际的因素,或者涉及的不全面,可在实际的应用时这些是不能被忽略的,我们不得不考虑这方的问题,这让我们无法根据书上的理论就轻易得到预想中的结果,有时结果甚至很差别很大。通过这次实践使我更深刻的体会到了理论联系实际的重要性,我们在今后的学习工作中会更加的注重实际,避免成为只会纸上谈兵的赵括。在做本次课程设计的过程中,我感触最深的当属查阅大量的设计资料了。为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。我们是在做单片机课程设计,但我们不是艺术家,他们可以抛开实际尽情在幻想的世界里翱翔,而我们

27、一切都要有据可依,有理可寻,不切实际的构想永远只能是构想,永远无法升级。参考文献1徐千洋.Linux C函数库参考手册.M中国青年出版社.2002   2陈坚,孙志月.MODEM通信编程技术M.西安电子科技大学出版社.1998 3李现勇.Visual C+串口通信技术与工程实践M.人民邮电出版社.2004 4何小平.选择适合ARM的嵌入式操作系统J.BMRfech Inc.2003  5马忠梅,马广云,徐英慧,田译.ARM嵌入式处理结构与应用基础M.北京航空航天大学出版社.2002 6周立功,ARM嵌入式

28、系统基础教程(第二版)M.北京:北京航空航天大学出版社.2008.97 Ren Yafie,Ke Xizheng,Liu Yijie.MEMS Gyroscope Performance Estimate Based on Allan VarianceA.InProceedings of 2007 8th International Conference on Electronic Measurement & InstrumentsC. Xi'anChina.Vol.1, 260-263.8 邵贝贝.单片机嵌入式应用的在线开发方法M.北京:机械工业出版社,2004.9 薛涛.单

29、片机与嵌入式系统开发方法M.北京:清华大学出版社,2009.10.附录:附录一:系统电路原理图附录二:主程序图#include "public.h"#include "printf.h"#include "systick.h"#include "input.h"#include "key.h"#include "time.h"#include "pwm.h"int main()u8 fx=1;u32 ti=0;time_init();key_init();

30、 input_init(); printf_init(); pwm_init(); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);while(1)delay_ms(345);TIM_SetCompare2(TIM3, 400);void input_init()/input_initTIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;TIM_ICInitTypeDef TIM5_ICInitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_A

31、PB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE); TIM_ClearITPendingBit(TIM5,TIM_IT_Update|TIM_IT_CC1); TIM_TimeBaseInitStructure.TIM_Period = 0xffff; TIM_TimeBaseInitStructure.TIM_Prescaler = 71; TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseInitStructure.TIM_CounterMode = TI

32、M_CounterMode_Up;TIM_TimeBaseInit(TIM5,&TIM_TimeBaseInitStructure);TIM5_ICInitStructure.TIM_Channel = TIM_Channel_1; TIM5_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; TIM5_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1

33、; TIM5_ICInitStructure.TIM_ICFilter = 0x00; TIM_ICInit(TIM5, &TIM5_ICInitStructure); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);NVIC_InitStructure.NVIC_IRQChannel=TIM5_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;NVIC_InitStructure.NVIC_IRQChannelSubPriority=1; NVIC_InitStruct

34、ure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);TIM_Cmd(TIM5,ENABLE); TIM_ITConfig(TIM5, TIM_IT_Update|TIM_IT_CC1, ENABLE );void key_init() /key_initGPIO_InitTypeDef GPIO_InitStructure;SystemInit();RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE,ENABLE);GPIO_InitS

35、tructure.GPIO_Pin=K_UP; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=K_DOWN|K_LEFT|K_RIGHT;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO

36、_Init(GPIOE,&GPIO_InitStructure);GPIO_ResetBits(GPIOA,K_UP);void time_init()/time_initTIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);TIM_ClearITPendingBit(TIM4,TIM_IT_Update);TIM_TimeBaseInitStructure.TIM_P

37、eriod = 999;TIM_TimeBaseInitStructure.TIM_Prescaler = 35999;TIM_TimeBaseInitStructure.TIM_ClockDivision = 0; TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStructure);TIM_Cmd(TIM4,ENABLE); TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE );NVIC_Prio

38、rityGroupConfig(NVIC_PriorityGroup_1);NVIC_InitStructure.NVIC_IRQChannel=TIM4_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;NVIC_InitStructure.NVIC_IRQChannelSubPriority=0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);void pwm_init()/ pwm_initGPIO_

39、InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;TIM_OCInitTypeDef TIM_OCInitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);GPIO_InitStructure.GPIO_Pi

40、n=GPIO_Pin_7;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_Init(GPIOC,&GPIO_InitStructure);/TIM3定时器初始化TIM_TimeBaseInitStructure.TIM_Period = 1000; TIM_TimeBaseInitStructure.TIM_Prescaler = 71;TIM_TimeBaseInitStructure.TIM_ClockDivision = 0;TIM_T

41、imeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM3, & TIM_TimeBaseInitStructure);GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;TIM_OCInitStructure.TIM_OCPolari

42、ty=TIM_OCPolarity_Low;TIM_OC2Init(TIM3,&TIM_OCInitStructure);TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);TIM_Cmd(TIM3,ENABLE);void TIM4_IRQHandler() /定时器4中断函数static u8 i=0;TIM_ClearITPendingBit(TIM4,TIM_IT_Update);i+; if(i>=2)i=0;printf("一秒钟出现上升沿次数为:%d rn",count);count=0;#include "printf.h"int fputc(int ch,FILE *p) USART_SendDat

温馨提示

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

评论

0/150

提交评论