二次仪表频率计设计论文_第1页
二次仪表频率计设计论文_第2页
二次仪表频率计设计论文_第3页
二次仪表频率计设计论文_第4页
二次仪表频率计设计论文_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

1、毕业论文(设计)论文题目:二次仪表频率计设计学生:存永学 号:1008020205所在院系:电气信息工程学院专业名称:自动化届 次:2014 届指导教师:苗磊目 录前言21.总体方案设计21.1 系统方案实现框图21.2软硬件开发环境和工具32.硬件电路设计32.1 单片机模块设计42.2 信号输入电路62.3 人机界面设计73.系统软件设计93.1 系统软件实现框图93.2频率信号采集和测量程序设计103.3 人机界面程序设计134.系统测试154.1 软硬件调试154.2 调试总结175.总结17参考文献:1825 / 28二次仪表频率计设计学生:存永(指导老师:苗磊)(师学院电气信息工程

2、学院)摘要:本课题是基于stm32单片机设计的一个二次仪表频率计。通常,在工业生产中,各种现场信号如压力、温度、流量等都是通过相应压力变送器、温度变送器、流量变送器传送出来,即特定传感器把物理量变为对应的200-800HZ的频率信号。二次仪表频率计用来检测其对应频率,并将其转换为对应的实际物理量显示出来。关键字: stm32;二次仪表;频率计;传感器;实际物理量;频率信号Design Of Secondary Instrument Frequency MeterStudent: Fan Cunyong (Guidance Teacher: Miao Lei)(College of Electr

3、ical and Information Engineering ,Huainan Normal University)Abstract:This study designed a secondary instrument frequency meter based on the STM32 MCU (Micro Controller Unit).Generally, in the industrial production ,many spot signals like pressure and temperature and flux are send out by homologous

4、pressure transmitter and temperature transmitter and flux transmitter respectively. All in all, the physical quantity is transfered by specific sensor into a frequency signal rated from 200HZ to 1000HZ.Secondary instrument frequency meter is used to detect the corresponding frequency and transfer it

5、 into corresponding physical quantity ,then display it.Keywords: stm32, secondary instrument, frequency meter, sensor, actual physical quantity, frequency signal前 言通常工业生产中,各种现场物理量如压力、温度、流量等都是通过相应压力变送器、温度变送器、流量变送器传送出来的。这些变送器是把物理量转变成对应的200Hz-800Hz的频率信号,为了准确读出这些物理量的值,就需要通过频率计准确无误的测量出变送频率并换算成实际的物理数值。无论是

6、在科技研究中还是在实际应用中,毫无疑问,频率测量的作用都显得尤为重要。但传统的频率计通常采用组合电路和时序电路等大量的硬件电路构成,不仅产品体积较大,运行速度慢,而且测量低频信号时不宜直接使用。与传统的测量方式相比,运用单片机频率计有着体积更小,运算速度更快,测量围更宽的优点,而且电路简单,开发周期和成本都降低。在传统的频率计中有许多功能是依靠硬件来实现的,而采用单片机测量频率之后,有许多以前需要用硬件才能实现的功能现在仅仅依靠软件编程就能实现,而且不同的软件编程能够实现不同的功能,因此使得制作成本大大降低。基于实际应用需求和当前技术发展,本文设计出以STM32单片机为测量和控制核心的频率计方

7、案。该设计能够检测出200Hz-800Hz的频率信号,并能根据现场需要换算成与一次仪表一样的物理数值,具有频率显示、按键设置、LED状态显示功能。1.总体方案设计1.1 系统方案实现框图本系统的方案框图如图1所示,包括信号输入端的滤波整形电路、STM32单片机部分和人机交互部分。图1 系统方案图为了去除包括工频干扰在的其他低频干扰,在信号输入端设计了高通滤波器,滤除200Hz以下的低频干扰。信号整形电路能将输入的三角波、正弦波、锯齿波整形为单片机可以识别的矩形波。STM32单片机通过输入捕获/比较功能捕获到脉冲信号,运算处理后得到脉冲频率,在LCD128128上显示。通过按键设置频率和温度、湿

8、度等物理量的关系,就能现场得到一次仪表一样的物理数值。此外,电源部分提供系统需要的5V和3.3V电压,下载接口用来下载程序和在线仿真,LED指示灯用来指示系统运行状态。1.2软硬件开发环境和工具设计工具分为:硬件设计工具、软件设计工具。硬件电路原理图和PCB的绘制使用的是Altium Designer winter 09;软件开发工具是KeilMDK V4.1。Altium Designer 是从Protel发展过来的,是将原理图编辑、电路仿真、PCB设计,FPGA设计以与打印等功能结合在一起的集成开发环境。Keil MDK,也称MDK-ARM,Realview MDK、I-MDK、uVisi

9、on4 等。MDK-ARM软件为基于Cortex-M、Cortex-R4、ARM7、ARM9处理器设备提供了一个完整的开发环境。2.硬件电路设计硬件电路设计部分包括STM32单片机模块设计、信号输入电路设计和人机界面设计,如图2所示。图2硬件电路图2.1 单片机主板模块设计在考虑硬件资源、开发容易程度和成本之后,本设计选用意法半导体的STM32F103RCT6,STM32系列是专为高性能、低成本和低功耗的嵌入式应用而设计的ARM Cotex-M3核。STM32片上拥有ADC、DAC、TIM、FSMC、USART、DMA、USB、以太网等众多资源,而且自带底层库函数,极缩短了开发周期。

10、2.1.1 STM32最小系统 本设计主要利用STM32的GPIO、USART、输入捕获和定时器功能,因此考虑功能和成本选用QFP64封装的STM32F103RCT6。STM32F103RCT6部具有256K FLASH和48K RAM,并且具有丰富的片上资源,包括IIC、SPI、UART、SDIO和三路ADC。单片机最小系统包括主控MCU、复位电路、时钟电路和程序下载仿真接口,该部分设计如图3所示。STM32F103RCT6采用3.3V供电,为了去除电源噪声干扰,在每个电源引脚接了去耦电容,并且将模拟地和数字地分开,在单点处用0欧电阻或电感连接。STM32有多个时钟可以选择,HIS振荡器时钟

11、、HSE振荡器时钟和PLL时钟可以用来驱动系统时钟,LSI 振荡器和LSE外部低速时钟可以用来驱动看门狗或RTC。由于没有使用RTC功能,本设计只接了8M外部高速时钟,并联20pf的电容帮助起振。图3 STM32主控电路图STM32的RST引脚是低电平复位,该部分由电容、电阻和按键构成上电复位和按键复位电路。如图3所示。2.1.2 电源部分本系统需要3.3V和5V两种电压供电。5V用来给单电源运放、电压比较器LM393供电,以与LCD12864液晶的背光供电。为了达到低功耗,STM32采用低电压3.3V供电。所以3.3V用来给单片机供电和LED供电。为了获得3.3V电压,需要对输入的5V直流电

12、进行稳压,这里采用LM1117-3.3V芯片。稳压电路如图4所示。LM1117是一个低压差电压调节器,具有较宽的电压输入和800mA的电流输出。另外,为了直观显示3.3V电压状态,本设计在输出端加了发光二极管指示灯,当有3.3V电压输出时,发光二极管点亮。图4 电源稳压电路2.1.3下载仿真电路STM32可以用串口下载,可以用JTAG和SWD方式进行仿真调试。JTAG是国际标准测试协议,主要用于芯片部测试。标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。许多器件都用它来仿真调试,STM32当然也不例外。但是考虑到引脚使用和下载速度问题,本设

13、计采用SWD模式。SWD模式在高速模式下比JTAG更可靠,基本使用JTAG仿真模式的情况下都可以直接使用SWD模式的。当电路板子空间有限或者单片机引脚欠缺的情况下,SWD是最好的选择,这里只使用到SWDATA和SWCLK两个IO端口,加上电源和地即可进行下载和仿真。设计电路如图5所示。图5 SWD下载仿真电路2.2 信号输入电路为了获得单片机能够识别的脉冲信号,必须对输入的信号进行滤波整形。本设计在信号输入端加入高通滤波电路和信号整形电路。 2.2.1 高通滤波电路滤波电路选用二阶有源高通滤波器。有源滤波电路相对于无源滤波电路,具有较高的开环电压增益和输入阻抗、较低的输出阻抗和很好的自适应能力

14、。 二阶滤波器相对于一阶滤波器而言,具有更好的滤波效果。为了获得单片机能够识别的脉冲信号,必须对输入的信号进行滤波整形。本设计在信号输入端加入高通滤波电路和信号整形电路。本设计的二阶有源高通滤波器能滤除低于200Hz的低频干扰,滤除诸如50Hz的工频等干扰频率。滤波电路如图6所示。运算放大器选用LM358芯片。LM358可双电源也可单电源供电,具有宽电压、高增益、低功耗和部频率补偿等特点,完全满足设计要求。图6高通滤波电路2.2.2 信号波形整形高通滤波电路输出的是频率信号的正电压部分,为了获得单片机能够是别的脉冲信号就必须对其整形。整形电路可以选用施密特触发器或者比较器,当电压高于某一阈值事

15、输出高电压,低于某一阈值时输出低电压,从而将频率信号整形为脉冲信号。本设计选用LM393比较器,通过改变电位器的阻值调整比较器的正向端阈值电压,在反相端输入频率信号时,输出端获得输出脉冲。此外,为了防止电压过高烧坏单片机,在输出端加了一个3.3V的稳压二极管。电路如图7所示图7 比较整形电路2.3 人机界面设计为了给用户提供一个有好的人接界面,将测量结果直观的显示出来,并能通过按键设置一些参数,本系统设计了LCD1602液晶显示、按键操作和LED状态指示灯。2.3.1 LCD128x128液晶显示器人机界面的显示使用LCD128x128,可以显示128x128点阵单色或4灰度级的图片,可以显示

16、英文、数字、符号或64个16x16的汉字。该液晶采用3.3V供电,采用6800总线驱动。由于不需要显示很多的汉字,本设计没有选用带有字库的液晶,而是使用软件生成需要的字库添加到代码里。LCD128128控制端口为数据命令选择端口(RS)、片选端口(CS)、读端口(RD)、写端口(WR),以与八位数据端口(D0-D7)。2.3.2 按键和状态指示灯当采集到频率信号时,为了转换成一次仪表的物理量,需要用户手动输入物理量与频率之间的线性关系数据,所以加入按键功能。按键设计四个,分别定义为功能键、增大建、减小键和确认键。功能键用来切换主菜单功能,增大键和减小键用来调整参数大小。参数设定好之后按确认键确

17、认数据,完成数据输入。由于STM32的GPIO端口的输入可以位置为上拉输入、下拉输入和浮空输入模式,因此外部电路就省去了上拉电阻,只需要软件配置为输入上拉模式即可。按键的一个端口接地,另一端口接到单片机IO口,当检测到IO端口被拉低时,即认为有按键被按下。按键电路图如图8所示。图8 按键输入电路图LED状态指示灯用以指示系统运行状态和输入频率大小。当系统正常运行时,LED1每隔一秒闪烁一次,用以指示系统运行正常。LED2用来间接地指示输入频率大小,当STM32捕获到输入脉冲时翻转LED指示灯,频率越高,闪烁越快,反之频率越低,闪烁越慢。LED指示灯在一般的产品设计中都有很重要的作用。本系统设计

18、了两个状态指示灯,指示灯电路如图9所示。LED是电流驱动器件,电流的大小决定LED的亮度,为了避免大电流烧坏LED指示灯,加了1K欧的电阻限流。图9 LED状态指示灯电路3.系统软件设计3.1 系统软件实现框图软件部分分为主函数程序和中断函数程序。当系统电源开启的时候,单片机先进行初始化工作,配置时钟频率为72MHz,配置用到的GPIO端口,设置中断优先级;配置定时器、输入捕获模式;初始化LCD12864、LED、按键等外设。在循环中更新显示、读取键值。当定时时间到的时候进入中断函数。在进入中断函数中,首先清除中断标志,读取捕获的脉冲计数值,算出信号频率。然后清除技术寄存器的值,开启定时器后退

19、出中断函数,进入主函数,进行新一轮的循环。主程序和中断程序的流程图如图10所示图10 主程序和中断程序流程图当采集到频率信号时,为了转换成一次仪表的物理量,需要用户手动输入物理量与频率之间的线性关系数据,所以加入按键功能。按键设计四个,分别定义为功能键、增大建、减小键和确认键。功能键用来切换主菜单功能,增大键和减小键用来调整参数大小。参数设定好之后按确认键确认数据,完成数据输入。按键初始化之后需要再循环里不断地检测,当检测到按键输入引脚拉低时,即有按键按下,然后延时20毫秒进行按键“消抖”,因为手动操作会有抖动,如不进行消抖操作,那么短时间会判断出有多次按键操作。延时之后,按键输入状态稳定,此

20、时若仍然检测到按键按下,则确定是按键操作,然后判断键值,根据键值做出相应的处理。按键操作流程图如图11所示。图11 按键操作流程图3.2频率信号采集和测量程序设计STM32需要对系统时钟、模块时钟和特定寄存器进行配置才能正常工作。该部分包括STM32系统初始化、输入捕获定时器配置和频率计算。3.2.1 STM32系统配置和初始化本系统程序采用Keil uVision4进行编写、编译和调试仿真。使用STM32标准外设库函数StdPeriph_Lib_V3.5进行开发,从而不必关心底层寄存器的配置,减少了工作量,缩短了开发周期。STM32外部接8MHz晶振,通过部PLL可以让系统频率达到72MHz

21、。STM32时钟包括AHB高速系统时钟总线、APB2高速外设时钟总线和APB1低速外设时钟总线。调用SystemInit(),配置AHB和APB2时钟为72MHz,APB1时钟为36MHz。另外用到的端口和外设也要对其时钟进行配置。SystemInit();RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);RCC_APB2Peri

22、phClockCmd(RCC_APB2Periph_GPIOD, ENABLE);3.2.2 STM32输入捕获和定时器STM32输入捕获的原理是当选定的输入引脚发生选定的脉冲触发沿(上升沿或下降沿)的时候,该时刻定时器的计数值TIMx_CNT会被保存,同时也会产生捕获中断。本设计的思想是用定时器计时,输入捕获进行计数,所以需要配置定时器和输入捕获模式。定时需用普通定时器TIM2,首先对TIM2的时钟进行配置,由于TIM2部是接在APB1的时钟总线上,因此调用库函数配置定时器时钟如下:RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);为了每

23、秒钟读取一次捕获脉冲计数值,需要配置装载寄存器,并且开启定时中断,当定时时间到的时候进入中断函数进行处理。具体的配置如下:TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_TimeBaseStructure.TIM_Period = 10000 - 1; TIM_TimeBaseStructure.TIM_Prescaler = 7200 - 1; TIM_TimeBaseStructure.TIM_ClockDivision = 0;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode

24、_Up; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);TIM_ITConfig(TIM2,TIM_IT_Update, ENABLE);TIM_Cmd(TIM2, ENABLE); STM32是抢占式核,允许中断嵌套,每个中断拥有一个优先级,高优先级的中断可以打断低优先级的中断。当优先级一样时,根据中断向量表中默认的排列顺序进行中断响应。所以STM32开启定时器需要对中断向量表进行配置。NVIC_InitTypeDef NVIC_InitStructure;NVIC_PriorityGroupConfig(NVIC_PriorityGr

25、oup_0);NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);配置好中断向量表,必须给中断一个入口函数,当中断到来的时候可以找到这个函数,进行相应的处理。下面的就是TIM2的中断入口函数:void TIM2_IRQHandler() /判断增计数中断标志位置位if (TIM_GetITSt

26、atus(TIM2, TIM_IT_Update) != RESET) /清除中断标志TIM_ClearITPendingBit(TIM2, TIM_IT_Update); /进行相应的算法处理输入捕获模式用以捕捉脉冲信号进行计数。本系统选择TIM4的Channal2通道(PB.8)作为脉冲输入引脚。这里需要开启TIM3时钟和GPIOA时钟:RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);PB.8作为脉冲捕获引脚需要配置为浮空输入模式

27、:GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOB, &GPIO_InitStructure);对输入捕获模式的配置主要包括输入通道、上升沿捕获方式、捕获预分频和输入脚是否滤波等,这里开启捕获中断进行计数,数据处理放在定时中断中。TIM3输入捕获模式详细的配置如下:TIM_ICInitStructure.TIM_Channel = TIM_Channel_2; TIM_ICInitStructure.TIM_ICPol

28、arity = TIM_ICPolarity_Rising; TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;TIM_ICInitStructure.TIM_ICFilter = 0x00;TIM_PWMIConfig(TIM4, &TIM_ICInitStructure);TIM_SelectInputTrigger(TIM4, TIM_TS_TI2FP2);TIM_SelectSlaveMode(TI

29、M4, TIM_SlaveMode_Reset); TIM_SelectMasterSlaveMode(TIM4, TIM_MasterSlaveMode_Enable);TIM_Cmd(TIM4, ENABLE);TIM_ITConfig(TIM4, TIM_IT_CC2, ENABLE);定时器TIM2一秒的定时时间到的时候会进入定时中断函数,在这里首先关闭定时器,读取输入捕获计数值就可以得到频率了。将脉冲计数器清零后重新开启定时器之后退出定时中断。3.3 人机界面程序设计人机交互界面程序设计包括LCD128x128程序设计、LED状态指示灯设计和按键输入程序设计。3.3.1 LCD128

30、x128显示LCD128x128程序包括液晶初始化函数、写命令函数、写数据函数、清屏函数、以与汉字和字符的显示。初始化需要配置控制端口和数据端口,并严格遵守写入数据和写入命令时序。时序图如图12所示。图12 LCD128x128写入时序图 初始化和读写函数只需要遵守时序并且发送正确的命令字即可。本部分程序主要是实现汉字和字符的显示。由于液晶不带字库,需要程序里添加字库。这里采用字库生成软件PCtoLCD2002生成C格式字库数据,如下所示:其中Stru_GB16结构体定义为:typedef struct uint8 Index2;uint8 Msk32;Stru_GB16;这样每次检索结构体中

31、的Index成员,如果是对应的汉字则将成员数组Msk的数据显示出来。本部分实现的接口函数如下:void GUI_DispString(uint8 Row, uint8 Col, uint8 *str);void GUI_DispUnString(uint8 Row, uint8 Col, uint8 *str);void GUI_DispHZ(uint8 Row, uint8 Col ,uint8 *PStr);void GUI_DispUnHZ(uint8 Row, uint8 Col ,uint8 *PStr);3.3.2 按键和指示灯按键由于输入端口没有上拉电阻,需要配置部上拉输入。GP

32、IO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;当检测输入电压为低时则认为按键被按下。由于操作按键的时候存在抖动,所以需要软件“消抖”,消抖可以用状态机消抖也可以简单地延时消抖。本设计为了采用延时策略,当检测到按键输入引脚为低电平时,延时30ms再次读取,如果仍然是低电平则确认按键被按下。单片机读取IO电平状态的函数为:GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1); /读取PA.1脚电平四分别按键设置为功能键、增大间、减小键和确认键。考虑到频率计获取频率之后需要现场转化成与一次仪表一样的物理值,这就需要用户输入参数进行标定

33、。例如用户设定频率是200Hz的时候温度是20,频率800Hz的时候是60,那么频率计会根据线性转换公式y=ax+b计算出a、b值。当有频率输入时自动显示转换后的物理数值。换算方程式如下:phyval = (Frequency-200)*(phytemp2-phytemp1)/(800-200)+phytemp1;用户根据功能键选择操作菜单,功能键第一次按下修改频率为200Hz对应的物理值,第二次按下修改频率为800Hz对应的物理值,此时用增大建、减小键移动选项和更改参数值,设置好参数按确定键确定输入。LED指示灯操作简单,输出IO电平为低电平即可点亮。在主函数中翻转LED1指示灯来指示系统运

34、行状态。在输入捕获中断里翻转LED2指示灯来指示频率的大小。if(i = 0)GPIO_SetBits(LED_Port,LED_Pin); /关闭LEDelseGPIO_ResetBits(LED_Port,LED_Pin); /点亮LEDif(+i=2)i=0;4.实物测试4.1 软硬件调试测试部分分为硬件测试和软件测试。整体测试连接图如图13所示。图13 频率计硬件测试连接图本系统需要3.3V和5V两种电压供电。5V用来给单电源运放、电压比较器LM393供电,以与LCD12864液晶的背光供电。为了达到低功耗,STM32采用低电压3.3V供电。所以3.3V用来给单片机供电和LED供电。为

35、了获得3.3V电压,需要对输入的5V直流电进行稳压,这里采用LM1117-3.3V芯片。硬件电路测试电源模块3.3V稳压正常输出;晶振起振,单片机能正常操作;SWD仿真正常,而且下载速度很快;LCD128x128显示正常,按键和LED操作正常;当信号输入端加入正弦波、三角波等波形时,高通滤波器成功滤除低频干扰,滤波效果较好;LM393比较整形电路的输出端是很理想的脉冲信号;信号输入和按键部分电路实物图如图14所示。图14 信号输入和按键部分测试实物图软件分模块进行测试。经在线仿真和实际测量,定时器一秒钟定时准确,每秒进一次中断进行一次数据处理;给单片机端口加入理想的脉冲,测试出输入捕获计数准确

36、,捕捉灵敏可靠;频率计算准确性,按键输入配置参数后计算的物理数值和一次设备一样,误差很小。按键参数输入界面如图15所示。图15按键输入频率和物理量的对应关系界面各模块测试没有问题之后进行系统调试,在现场对多种周期信号源进行测量,输入线性参数转换成的物理值与一次仪表相比较,测量其精度和稳定性。经多次现场测试表明,本频率计可以去除200Hz以下的频率干扰,在200Hz到800Hz区间有很高的测量精度,测量换算的物理值和一次仪表采集的值误差很小。测量结果如图16所示。图16测量结果显示4.2 调试总结通过软硬件的测试,各项功能达到设计要求,经过长时间的测试和现场应用,该频率计运行稳定,准确可靠,可以

37、实际应用和生产。5.总结与传统的测量方式相比,运用了单片机频率计有着体积更小,运算速度更快,测量围更宽的优点,而且电路简单,开发周期和成本都降低。本系统就是采用强大的基于ARM Cotex-M3核的STM32单片机设计出一套频率计。该频率计能够检测出200Hz-800Hz的频率信号,并能根据现场需要换算成与一次仪表一样的物理数值,具有频率显示、按键设置和LED状态显示。经过长时间的测试和现场应用,该频率计运行稳定,准确可靠,可以实际应用和生产。虽然本系统运行可靠稳定,但由于本人时间和精力有限,仍然有很多可以改进和完善的地方。本设计只是致力于获取200Hz-800Hz的频率的准确性,在频率测量方

38、面还可以有更宽的测量围。频率测量的方法很多,为了获得更高的准确性,也可以尝试其他测量方法。这些都是可以在以后的工作中进行改进和完善的地方。参考文献:1谭浩强.C语言程序设计M.清华大学.1999:109-131.2程佩青.数字信号处理教程M.清华大学.1999:10-21.3曾平.电路设计基础M.高等教育.2003:100-110.4于海生.计算机控制技术M.机械工业.2003:11-19.5同法.单片机外围接口电路M.航空航天大学.2003:95-129.6先成.单片机应用系统设计M.航空航天大学.1999:210-216.7王世英,有声.给数字频率计增加功能J.电子技术.1980年11期.

39、8肖洪兵.跟我学用单片机M.航空航天大学.2002.8.9何立民.单片机高级教程 第1版M.航空航天大学.2001.10茂欣.自制2.4GHz数字频率计N.电子报.2003年.11广第.单片机基础 第1版M.航空航天大学.1999.12徐惠民,安德宁.单片微型计算机原理接口与应用 第1版M.邮电大学.1996. 13 夏继强.单片机实验与实践教程M.航空航天大学,2001.14 志旺.STM32嵌入式微控制器原理,应用技术.电子工业,2012.15何立民.单片机应用技术大全.:航空航天大学,1994.16杜铁军,群流行单片机应用子程序与应用实例:电子科技大学,2002.17邱光源等.电路基础M

40、.高等教育 1998.附录主程序:#include "stm32f10x.h"#include "SysTickDelay.h"#include "UART.h"#include "TIM.h"#include <stdio.h>static void System_Init(void);static void RCC_Configuration(void);static void NVIC_Configuration(void);static void GPIO_Configuration(void)

41、;extern uint32_t Frequency;extern uint8_t Flag_GetFrequency;/* 功能:main* 参数:NULL* 返回:NULL* 备注:主函数*/int main(void) System_Init();SysTick_Init();TIMx_Init();UART_Init(9600);LCD_Init();LCD_DispStr(0,0,"LCD_Test.");while(1)if(Flag_GetFrequency)Flag_GetFrequency = 0;printf("Frequency:%dn&qu

42、ot;,Frequency);else printf("Frequency:%dn",0);delay_ms(500);/* 功能:System_Init* 参数:NULL* 返回:NULL* 备注:系统初始化*/static void System_Init(void)RCC_Configuration();NVIC_Configuration();GPIO_Configuration();/* 功能:RCC_Configuration* 参数:NULL* 返回:NULL* 备注:时钟初始化*/static void RCC_Configuration(void)Syst

43、emInit();RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);RCC_APB2PeriphClockCmd(RCC_

44、APB2Periph_USART1, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);/* 功能:GPIO_Configuration* 参数:NULL* 返回:NULL* 备注:端口初始化*/static void GPIO_Configuration(void)GPIO_InitTypeDef GPIO_InitStructure;/* Configure USART Tx as alternate function push-pull */GPIO_InitStructure.GPIO_Pin = GPIO_Pin

45、_0;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);/* 功能:NVIC_Configuration* 参数:NULL* 返回:NULL* 备注:中断向量表初始化*/static void NVIC_Configuration(void) NVIC_InitTypeDef NVIC_InitStructure;/* Configure the NVIC Preemp

46、tion Priority Bits */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);/设置优先级分组:先占优先级0位,从优先级4位/设置向量表的位置和偏移#ifdef VECT_TAB_RAM /* Set the Vector Table base location at 0x20000000 */ NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); /向量表位于RAM#else /* VECT_TAB_FLASH */* Set the Vector Table base location at 0x

47、08000000 */ NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); /向量表位于FLASH#endif/* Enable the TIM3 global Interrupt */NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_InitStructure.NVI

温馨提示

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

评论

0/150

提交评论