《《嵌入式系统》课程设计报告-基于STM32的简易数字电压表.docx》由会员分享,可在线阅读,更多相关《《嵌入式系统》课程设计报告-基于STM32的简易数字电压表.docx(29页珍藏版)》请在课桌文档上搜索。
1、2014-2015学年第二学期学号1208020121嵌入式系统基于STM32的简易数字电压表题目:网络工程专业:网络工程12(1)班级:姓名:指导教师:成绩:计算机学院2015年5月22日目录1 .设计内容及要求11.1. 设计内容11.2. 设计要求12.概要设计22.1. 硬件电路22.2. 实验板中的连线图22.3. STM32介绍32.4. 主要函数说明83 .设计过程或程序代码103.1. 设计过程10.2.程序代码1234 .设计结果与分析16参考文献17计算机学院嵌入式系统课程设计报告1 .设计内容及要求1.1. 设计内容本文以ARM系列的STM32芯片为核心设计了一个简易数字
2、电压表。简易数字电压表采用模数转换思想来实现,通过硬件电路和软件程序相结合,可输出自定义测量电压,通过调节模数转换电位器使在一定范围内可任意改变。输出的电压格式和精度的改变通过软件控制,输出电压的大小的改变通过硬件实现。介绍了的生成原理、硬件电路和软件部分的设计原理。该简易数字电压表具有体积小、价格低、性能稳定、功能齐全的优点。1、将一模拟电压信号输入到A/D转换器的任一通道。2、A/D转换器将输入的模拟电压值转换成数字量。3、根据学习开发板所用A/D转换器的类型,将转换成的数字量通过一定的算法转换成相应的电压值。4、将转换成电压值通过学习开发板上的LCD显示屏进行显示,要求显示一位小数。1.
3、2. 设计要求利用STM32F103内部A/D及2.8寸TFT液晶屏,设计完成一个数字电压表。要求:数字电压表可测量05V输入电压,电压值通过液晶屏显示。工作原理及设计思路:简易数字电压表的设计由A/D转换.数据处理及显示控制等组成。利用STM32F103内部A/D转换器将模拟电压转换成数字量,经STM32F103计算将数字量转换成对应的电压值,并通过液晶屏输出。数字电压表的基本组成部分是A/D变换器+电子计数器。通常,被测直流电压经A/D转换器变为与之成正比的闸门时间,在此闸门时间内计数,用数字显示被测电压值。可见A/D变换器是DVM的核心部件。本课设上采用的是单片A/D转换器(含模拟电路与
4、数字电路)集成在一片芯片上,配以LCD或LED数字器件后能显示A/D转换结果的集成电路。它们均属于大规模的集成电路,能以最简的方式构成DVMo在此采用ICL7106A/D转换器。但由于STM32F103内部集成了A/D转换器,所以不需要外围的A/D转换器,这就体现了STM32得集成特性。计算机学院嵌入式系统课程设计报告2 .概要设计2.1.硬件电路设计的核心STM32嵌入式处理器的硬件电路如图1所示UfgLMm:i!adc nn* ,*一 *e m-ts ?AfWl.5C$OAC*:JMT34-.CH:“、/LMO4JNMJ.W“iKAj.acna_hiro._R%ut:8xxzcMlIUMl
5、LnSg0CAyIXT3C.CBMnl3T;.!八SB83TXT3flE7XJTDftCATW4-CMVCLX,u77m3aJSlVuXlS图1STM32嵌入式处理器的硬件电路2.2.实验板中的连线图连线图如图2所示。2计算机学院嵌入式系统课程设计报告图2硬件连接图。2.1. STM32介绍STM32F103xx增强型系列使用高性能的ARMCortex-M332位的RISC内核,工作频率为72MHz,内置高速存储器(高达128K字节的闪存和20K字节的SRAM),丰富的增强I/O端口和联接到两条APB总线的外设。所有型号的器件都包含2个12位的ADC、3个通用16位定时器和一个PWM定时器,还
6、包含标准和先进的通信接口:多达2个I2C和SPI、3个USART、一个USB和一个CAN。STM32FlO3xx增强型系列工作于-40?C至+105?C的温度范围,供电电压2.OV至3.6V,一系列的省电模式保证低功耗应用的要求。完整的STM32F103x增强型系列产品包括从36脚至100脚的五种不同封装形式;根据不同的封装形式,器件中的外设配置不尽相同。下面给出了该系列产品中所有外设的基本介绍。这些丰富的外设配置,使得STM32F103x增强型微控制器适合于多种应用场合:?电机驱动和应用控制?医疗和手持设备?PC外设和GPS平台?工业应用:可编程控制器、变频器、打印机和扫描仪?警报系统,视频
7、对讲,和暖气通风空调系统计算机学院嵌入式系统课程设计报告ARM?的Cortex7-M3核心并内嵌闪存和SRAMARM的Cortex-M3处理器是最新一代的嵌入式ARM处理器,它为实现MCU的需要提供了低成本的平台、缩减的管脚数目、降低的系统功耗,同时提供卓越的计算性能和先进的中断系统响应。ARM的Cortex-M3是32位的RISC处理器,提供额外的代码效率,在通常8和16位系统的存储空间上得到了ARM核心的高性能。STM32F103xx增强型系列拥有内置的ARM核心,因此它与所有的ARM工具和软件兼容。图一是该系列产品的功能框图。内置闪存存储器?高达128K字节的内置闪存存储器,用于存放程序
8、和数据。内置SRAM多达20K字节的内置SRAM,CPU能以0等待周期访问(读/写)。嵌套的向量式中断控制器(NVIC)STM32F103x增强型内置嵌套的向量式中断控制器,能够处理多达43个可屏蔽中断通道(不包括16个Cortex-M3的中断线)和16个优先级。?紧耦合的NVIC能够达到低延迟的中断响应处理?中断向量入口地址直接进入核心?紧耦合的NVIC接口?允许中断的早期处理?处理晚到的较高优先级中断?支持中断尾部链接功能?自动保存处理器状态?中断返回时自动恢复,无需额外指令开销该模块以最小的中断延迟提供灵活的中断管理功能。外部中断/事件控制器(EXTl)外部中断/事件控制器包含19个边沿
9、检测器,用于产生中断/事件请求。每个中断线都可以独立地配置它的触发事件(上升沿或下降沿或双边沿),能够单独地被屏蔽;有一个挂起寄存器维持所有中断请求的状态。EXTI可以检测到脉冲宽度小于内部APB2的时钟周期。多达80个通用I/O口连接到16个外部中断线。时钟和启动系统时钟的选择是在启动时进行,复位时内部8MHz的RC振荡器被选为默认的CPU时钟,随后可以选择外部的、具失效监控的416MHz时钟;当外部时钟失效时,它将被隔离,同时会产生相应的中断。同样,在需要时可以采取对PLL时钟完全的中断管理(如当一个外接的振荡器失效时)。具有多个预分频器用于配置AHB的频率、高速APB(APB2)和低速A
10、PB(APBl)区域。AHB和高速APB的最高频率是72MHz,低速APB的最高频率为36MHzo自举模式在启动时,自举管脚被用于选择三种自举模式中的一种:?从用户闪存自举?从系统存储器自举?从SRAM自举自举加载器存放于系统存储器中,可以通过USART对闪存重新编程。供电方案?VDD=2.0至3.6V:VDD管脚提供I/O管脚和内部调压器的供电。?VSSA,VDDA=2.0至3.6V:为ADCx复位模块、RC振荡器和PLL的模拟计算机学院嵌入式系统课程设计报告部分提供供电。使用ADC时,VDD不得小于2.4V?VBAT=1.8至3.6V:当(通过电源开关)关闭VDD时,为RTCx外部32kH
11、z振荡器和后备寄存器供电。供电监控器本产品内部集成了上电复位(POR)/掉电复位(PDR)电路,该电路始终处于工作状态,保证系统在供电超过2V时工作;当VDD低于设定的阀值(VPOR/PDR)时,置器件于复位状态,而不必使用外部复位电路。器件中还有一个可编程电压监测器(PVD),它监视VDD供电并与阀值VPVD比较,当VDD低于或高于阀值VPVD时将产生中断,中断处理程序可以发出警告信息或将微控制器转入安全模式。需要通过程序开启PVDo电压调压器调压器有三个操作模式:主模式(MR)、低功耗模式(LPR)和关断模式?主模式(MR)用于正常的运行操作?低功耗模式(LPR)用于CPU的停机模式?关断
12、模式用于CPU的待机模式:调压器的输出为高阻状态,内核电路的供电切断,调压器处于零消耗状态(但寄存器和SRAM的内容将丢失)该调压器在复位后始终处于工作状态,在待机模式下关闭处于高阻输出。低功耗模式STM32F103xx增强型支持三种低功耗模式,可以在要求低功耗、短启动时间和多种唤醒事件之间达到最佳的平衡。?睡眠模式在睡眠模式,只有CPU停止,所有外设处于工作状态并可在发生中断/事件时唤醒CPU。?停机模式在保持SRAM和寄存器内容不丢失的情况下,停机模式可以达到最低的电能消耗。在停机模式下,停止所有内部L8V部分的供电,PLL.HSI和HSE的RC振荡器被关闭,调压器可以被置于普通模式或低功
13、耗模式。可以通过任一配置成EXTI的信号把微控制器从停机模式中唤醒,EXTI信号可以是16个外部I/O口之一、PVD的输出、RTC闹钟或USB的唤醒信号。?待机模式在待机模式下可以达到最低的电能消耗。内部的电压调压器被关闭,因此所有内部L8V部分的供电被切断;PLL、HSI和HSE的RC振荡器也被关闭;进入待机模式后,SRAM和寄存器的内容将消失,但后备寄存器的内容仍然保留,待机电路仍工作。从待机模式退出的条件是:NRST上的外部复位信号、IWDG复位、WKUP管脚上的一个上升边沿或RTC的闹钟到时。注:在进入停机或待机模式时,RTC、IWDG和对应的时钟不会被停止。DMA灵活的7路通用DMA
14、可以管理存储器到存储器、设备到存储器和存储器到设备的数据传输;DMA控制器支持环形缓冲区的管理,避免了控制器传输到达缓冲区结尾时所产生的中断。每个通道都有专门的硬件DMA请求逻辑,同时可以由软件触发每个通道;传输的长度、传输的源地址和目标地址都可以通过软件单独设置。DMA可以用于主要的外设:SPI、I2C、USARTx通用和高级定时器TlMX和ADC。RTC(实时时钟)和后备寄存器RTC和后备寄存器通过一个开关供电,在VDD有效时该开关选择VDD供电,否则由VBAT管脚供电。后备寄存器(10个16位计算机学院嵌入式系统课程设计报告的寄存器)可以用于在VDD消失时保存数据。实时时钟具有一组连续运
15、行的计数器,可以通过适当的软件提供日历时钟功能,还具有闹钟中断和阶段性中断功能。RTC的驱动时钟可以是一个使用外部晶体的32.768kHz的振荡器、内部低功耗RC振荡器或高速的外部时钟经128分频。内部低功耗RC振荡器的典型频率为32kHz。为补偿天然晶体的偏差,RTC的校准是通过输出一个512Hz的信号进行。RTC具有一个32位的可编程计数器,使用比较寄存器可以产生闹钟信号。有一个20位的预分频器用于时基时钟,默认情况下时钟为32.768kHz时它将产生一个1秒长的时间基准。独立的看门狗独立的看门狗是基于一个12位的递减计数器和一个8位的预分频器,它由一个独立的32kHz的内部RC振荡器提供
16、时钟,应为这个RC振荡器独立于主时钟,所以它可运行于停机和待机模式。它可以被当成看门狗用于在发生问题时复位整个系统,或作为一个自由定时器为应用程序提供超时管理。通过选择字节可以配置成是软件看门狗或硬件看门狗。在调试模式,计数器可以被冻结。窗口看门狗窗口看门狗内有一个7位的递减计数器,并可以设置成自由运行。它可以被当成看门狗用于在发生问题时复位整个系统。它由主时钟驱动,具有早期预警中断功能;在调试模式,计数器可以被冻结。系统时基定时器这个定时器是专用于操作系统,也可当成一个标准的递减计数器。它具有下述特性:?24位的递减计数器?重加载功能?可屏蔽的计数器为O中断?可编程时钟源通用定时器(TlMX
17、)产品中内置了多达3个同步的标准定时器。每个定时器都有一个16位的自动加载递加/递减计数器、一个16位的预分频器和4个独立的通道,每个通道都可用于输入捕获、输出比较、PWM和单脉冲模式输出,在最大的封装配置中可提供最多12个输入捕获、输出比较或PWM通道。它们还能通过定时器链接功能与高级控制定时器共同工作,提供同步或事件链接功能。在调试模式下,计数器可以被冻结。任一标准定时器都能用于产生PWM输出。每个定时器都有独立的DMA请求机制。高级控制定时器(TIMI)高级控制定时器(TIMI)可以被看成是一个分配到6个通道的三相PWM发生器,它还可以被当成一个完整的通用定时器。四个独立的通道可以用于:
18、?输入捕获?输出比较?产生PWM(边缘或中心对齐模式)?单脉冲输出计算机学院嵌入式系统课程设计报告?反相PWM输出,具程序可控的死区插入功能配置为16位标准定时器时,它与TIMx定时器具有相同的功能。配置为16位PWM发生器时,它具有全调制能力(0100%)。在调试模式下,计数器可以被冻结。很多功能都与标准的TIM定时器相同,内部结构也相同,因此高级控制定时器可以通过定时器链接功能与TIM定时器协同操作,提供同步或事件链接功能。I2C总线多达2个I2C总线接口,能够工作于多主和从模式,支持标准和快速模式。它们支持双从地址寻址(只有7位)和主模式下的7/10位寻址。内置了硬件CRC发生器/校验器
19、。它们可以使用DMA操作并支持SM总线2.0版/PM总线通用同步/异步接受发送器(USART)其中一个USART接口通信速率可达4.5兆位/秒,其他USART接口通信速率可达2.25兆位/秒。接口具有硬件的CTS和RTS信号管理、支持IrDA的SIRENDEC、与ISO7816兼容并具有LIN主/从功能。USART接口可以使用DMA操作。串行外设接口(SPI)多达2个SPI接口,在从或主模式下,全双工和半双工的通信速率可达18兆位/种主模式频率,可配置成每帧8位或16位。硬件秒。3位的预分频器可产生8的CRC产生/校验支持基本的SD卡和MMC模式。2个SPI接口都可以使用DMA操作。控制器区域
20、网络(CAN)CAN接口兼容规范2.OA和2.OB(主动),位速率达1兆位/秒。它可以接收和发送11位标识符的标准帧,也接收和发送29位标识符的扩展帧。具有2个接收FIFOs,3级14个可调节的滤波器。内部SRAM缓冲最多可处理32个报文对象。通用串行总线(USB)STM32F103x增强型系列产品内嵌一个USB设备,遵循USB全速标准;USB接口实现全速(12兆位/秒)的设备功能;具有可软件配置的端点和待机/恢复功能。专用的48MHZ时钟由内部主PLL直接产生。通用输入输出接口(GPlO)每个GPIO管脚都可以由软件配置成输出(推拉或开路)、输入(带或不带上拉或下拉)或其它的外设功能;多数G
21、PIO管脚都与数字或模拟的外设功能管脚共用。所有的GPlO管脚都有大电流通过能力。在需要的情况下,I/O管脚的外设功能可以通过一个特定的操作锁定,以避免意外的写入I/O寄存器。在APB2上的I/O脚可达18MHz的翻转速度。ADC(模拟/数字转换器)STM32F103x增强型产品内嵌2个12位的模拟/数字转换器(AD。,每个ADC有多达16个外部通道,可以执行单次或扫描转换模式;在扫描模式下,转换在一组选定的模拟输入上自动进行。计算机学院嵌入式系统课程设计报告ADC接口上额外的逻辑功能允许:?同时采样和保持?交叉采样和保持?单次采样ADC可以使用DMA操作。模拟看门狗功能允许非常精准地监视一路
22、、多路或所有选中的被转换电压,当被监视的信号超出预置的阀值时,将产生中断。由标准定时器(TIMX)和高级控制定时器(TIMl)产生的事件,可以分别内部级联到ADC的开始触发、外部触发和DMA触发,允许应用程序同步AD转换和时钟的操作。温度传感器温度传感器产生一个随温度线性变化的电压,转换范围在2VVDDA=900000)间隔时间显示转换结果ticks=0;Clockls=1;)if(CIockls)Clockls=0;USART_OUT(USARTLThecurrentADvalue=%drnADJConVertedVaIUe);串口显示字符段/DeIay(OxAFFFFf);Precent=
23、(ADC_ConvertedValue*100/4096);/算出百分比,2的12次幕为OxfffVoltage=Precent*33;/Voltage为实际电压值的1000倍.c43=(Voltage1000+,0);/取干位数的整数部分c45=(Voltage%1000)100+,0);对千位数取余数后再取其百位的12计算机学院嵌入式系统课程设计报告整数部分c46=(Voltage%100)10)+0);对百位数取余数后再取其十位的整数部分c47=(Voltage%10)+0);对百位数取余数后再取其个位的整数部分lcd_PutStr_16x24_Center(0,c3zc4len,Bla
24、ck,bkColor);lcd_PutStr_16x24_Center(Linel,c,IenzBIacklbkColor);lcd_PutStr_16x24_Center(Line2,c3,c3len,Black,bkColor);lcd_PutStr_16x24_Center(Line3,c4,c4len,Black,bkColor);lcd_PutStr_16x24_Center(Line4,c2,c2lenzBlack,bkColor);USART_OUT(USARTLThevvalue=%d.%d%d%dVrn,c43=(Voltage1000)zc45=(Voltage%1000)
25、100)zc46=(Voltage%100)10,c47=(VOltage%10);显示实际电压值LCD.test();)2、ADC配置:ADC-Configuration函数用于配置ADCl的通道11,因为只用了ADCl所以采用了ADC独立模式,设置通道11进入规则组,规则组里的通道只有1个,就是通道1,转换用了扫描方式,软件触发,转换结果采用DMA方式传递至I2字节长度的缓存区里(ADC-ConvertedVaIue),默认的ADCCLK为36MHz,采样周期是55.5+12.5时钟周期,相当于采样时间是间隔(6836)us.voidADC_Configuration(void)ADC-I
26、nitTypeDefADC_InitStructure;GPIO_InitTypeDefGPIO_InitStructure;DMA_InitTypeDefDMA_InItStructure;设置AD模拟输入端口为输入1路AD规则通道GPlCLInitStructure.GPICLPin=GPIO_Pin_l;GPIO-InitStructure.GPI0_Mode=GPIO_Mode_AIN;GPIOJnit(GPIOCl&GPIO_InitStructure);*EnableDMAclock*/RCcLAHBPeriPhCIOCkCmd(RCC_AHBPeriPh_DMALENABLE);
27、*EnableADClandGPIOCclock*/RCC.APB2PeriphClockCmd(RCC_APB2Periph_ADCl,ENABLE);*DMAchannellconfiguration*/使能DMADMA_DeInit(DMAl_Channell);13计算机学院嵌入式系统课程设计报告DMAeInitStructure.DMAePeripheraIBaseAddr=ADCl_DR_Address;DMA通道1的地址DMA_InitStructure.DMA_MemoryBaseAddr=(u32)&ADC_ConvertedValue;DMA传送地址DMA_InitStru
28、cture.DMA_DIR=DMA_DIR_PeripheraISRC;传送方向DMA_Ini!Structure.DMAeBufferSize=1;传送内存大小,IOO个16位DMAeInitStructure.DMAePeripheraIInc=DMA_PeripheraIInC-DisabIe;DMAnitStructure.DMAMemoryinc=DMA_MemoryInc_Enable;传送内存地址递增DMA_InitStructure.DMA_PeripheraIDataSize=DMA.PeriPheraIDataSize-HaIfWord;/ADCl转换的数据是16位DMA_
29、InitStructure.DMA_MemoryDataSize=DMA.MemoryDataSize_HalfWord;/传送的目的地址是16位宽度DMAnitStructure.DMA_Mode=DMA_Mode_Circular;循环DMAnitStructure.DMA_Priority=DMA_Priority_High;DMAnitStructure.DMA_M2M=DMA_M2M_Disable;DMAnit(DMAl_Channe11,&DMAnitStructure);*允许DMAl通道1传输结束中断*/DMATConfig(DMAl.Channel1,DMAT_TC,ENA
30、BLE);使能DMA通道1DMA,Cmd(DMAl.ChannelllENABLE);/ADC配置ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;/ADCl工作在独立模式ADC_InitStructure.ADC_ScanConvMode=ENABLE;模数转换工作在扫描模式(多通道)还是单次(单通道)模式ADC_InitStructure.ADC_ContinuouSConvMode=ENABLE;/模数转换工作在扫描模式(多通道)还是单次(单通道)模式ADC_InitStructure.ADC_ExternaITrigConV=ADC_Ext
31、ernaITrigConv,None;/转换由软件而不是外部触发启动ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;/ADC数据右对齐ADC_InitStructure.ADC_NbrOfChanneI=1;规定了顺序进行规则转换的ADC通道的数目。这个数目的取值范围是1到16ADJInit(ADCl,&ADC_InItStructure);*ADClregularchannelsconfiguration规则模式通道配置*/ADCl规则通道配置14计算机学院嵌入式系统课程设计报告ADjReguIarChanneIConfig(ADC1,
32、ADJChanneLll,1,ADC_SampleTime_55CyCIeS5);/通道11采样时间55.5周期使能ADClDMAADC-DMACmd(ADClrENABLE);使能ADClADC.Cmd(ADClzENABLE);/初始化ADCl校准寄存器ADC_ResetCalibration(ADCl);检测ADCl校准寄存器初始化是否完成while(ADC_GetResetCaIibraIionStatus(ADCl);开始校准ADClADC_StartCalibration(ADCl);检测是否完成校准whiIe(ADC_GetCaIibrationStatuS(ADCl);/ADC
33、l转换启动ADC-SoftwareStartConvCmd(ADCl,ENABLE);15计算机学院嵌入式系统课程设计报告4 .设计结果与分析设计发现:数字电压表采用模数转换思想来实现,通过硬件电路和软件程序相结合,可输出自定义测量电压,通过调节模数转换电位器使在一定范围内可任意改变。输出的电压格式和精度的改变通过软件控制,输出电压的大小的改变可以通过硬件实现。16计算机学院嵌入式系统课程设计报告参考文献1张旭,亓学广,李世光等.基于STM32电力数据采集系统的设计J.电子测量技术,2010,33(11):90-93.DOI:10.3969j.issn1002-7300.2010.11.024
34、.2孙启富,孙运强,姚爰琴等.基于STM32的通用智能仪表设计与应用J.仪表技术与传感器,2010,(10):34-36.DOL10.3969j.issn.1002-1841.2010.10.012.3董书成,张鸿飞,林胜钊等.基于STM32帧转移科学级CCD的时钟驱动电路设计和实现J.核电子学与探测技术,2014,(8):10111015.4王铁流,李宗方,陈东升等.基于STM32的USB数据采集模块的设计与实现J测控技术,2009,28(8):37-40.5卢军,李振璧,曹明明等.基于STM32的掘进机控制系统设计J.煤矿机械,2013,34(1):265-267.6刘明贵,于誉,梁昊等.
35、基于STM32的岩土工程无线采集系统J.仪表技术与传感器,2010,(5):95-97.7王爱林,刘荣华,严顶等.基于STM32的CAN-USB转换模块J.仪表技术与传感器,2012,(6):69-70,73.8吴磊,翟云飞.基于STM32的NANDflash的块分配框架设计J.计算机测量与控制,2015,23(1):201-204.9肖林京,于期昌杰,于志豪等.基于STM32和emWin图形库的液晶显示系统设计J电视技术,2015,39(1):39-42,50.薛严冰,马驰等.基于AD9854与STM32的频率特性测试仪设计J.化10董宝玉,工自动化及仪表,2014,(6):655-659.11贺洪江,程琳.基于STM32和Modbus的电参数采集系统J.自动化与仪表,2014,29(6):26-29.12王丹丹,宗振海,陈慧珊等.基于STM32的智能温室远程控制系统的设计J