《嵌入式系统》课程设计报告-基于STM32的简易数字电压表.docx
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芯片为核心设计了一个简易数字电压表。简易数字电压表采用模数转换思想来实现,通过硬件电路和软件程序相结合,可输出自定义测量电压,通过调节模数转换电位器使在一定范围内可任意改变。输出的电压格式和精度的改变通过软件控制,输出电压的大小的改变通过硬件实现。介绍了的生成原理、硬件电路和软件部分的设计原理。该简易数字电压表具有体积小、价格低、性能稳定、功能齐全的优点。1、将一模拟电压信号输入到A/D转换器的任一通道。2、A/D转换器将输入的模拟电压值转换成数字量。3、根据学习开发板所用A/D转换器的类型,将转换成的数字量通过一定的算法转换成相应的电压值。4、将转换成电压值通过学习开发板上的LCD显示屏进行显示,要求显示一位小数。1.2. 设计要求利用STM32F103内部A/D及2.8寸TFT液晶屏,设计完成一个数字电压表。要求:数字电压表可测量05V输入电压,电压值通过液晶屏显示。工作原理及设计思路:简易数字电压表的设计由A/D转换.数据处理及显示控制等组成。利用STM32F103内部A/D转换器将模拟电压转换成数字量,经STM32F103计算将数字量转换成对应的电压值,并通过液晶屏输出。数字电压表的基本组成部分是A/D变换器+电子计数器。通常,被测直流电压经A/D转换器变为与之成正比的闸门时间,在此闸门时间内计数,用数字显示被测电压值。可见A/D变换器是DVM的核心部件。本课设上采用的是单片A/D转换器(含模拟电路与数字电路)集成在一片芯片上,配以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:“、/LMO½4JNMJ.W“iKAj.acna_hi¼ro._R%ut:8xxzcMlIUMlLnSg0CAyIXT3C.CB<Mnl3T;.!八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定时器,还包含标准和先进的通信接口:多达2个I2C和SPI、3个USART、一个USB和一个CAN。STM32FlO3xx增强型系列工作于-40?C至+105?C的温度范围,供电电压2.OV至3.6V,一系列的省电模式保证低功耗应用的要求。完整的STM32F103×x增强型系列产品包括从36脚至100脚的五种不同封装形式;根据不同的封装形式,器件中的外设配置不尽相同。下面给出了该系列产品中所有外设的基本介绍。这些丰富的外设配置,使得STM32F103×x增强型微控制器适合于多种应用场合:?电机驱动和应用控制?医疗和手持设备?PC外设和GPS平台?工业应用:可编程控制器、变频器、打印机和扫描仪?警报系统,视频对讲,和暖气通风空调系统计算机学院嵌入式系统课程设计报告ARM?的Cortex7-M3核心并内嵌闪存和SRAMARM的Cortex-M3处理器是最新一代的嵌入式ARM处理器,它为实现MCU的需要提供了低成本的平台、缩减的管脚数目、降低的系统功耗,同时提供卓越的计算性能和先进的中断系统响应。ARM的Cortex-M3是32位的RISC处理器,提供额外的代码效率,在通常8和16位系统的存储空间上得到了ARM核心的高性能。STM32F103xx增强型系列拥有内置的ARM核心,因此它与所有的ARM工具和软件兼容。图一是该系列产品的功能框图。内置闪存存储器?高达128K字节的内置闪存存储器,用于存放程序和数据。内置SRAM多达20K字节的内置SRAM,CPU能以0等待周期访问(读/写)。嵌套的向量式中断控制器(NVIC)STM32F103×x增强型内置嵌套的向量式中断控制器,能够处理多达43个可屏蔽中断通道(不包括16个Cortex-M3的中断线)和16个优先级。?紧耦合的NVIC能够达到低延迟的中断响应处理?中断向量入口地址直接进入核心?紧耦合的NVIC接口?允许中断的早期处理?处理晚到的较高优先级中断?支持中断尾部链接功能?自动保存处理器状态?中断返回时自动恢复,无需额外指令开销该模块以最小的中断延迟提供灵活的中断管理功能。外部中断/事件控制器(EXTl)外部中断/事件控制器包含19个边沿检测器,用于产生中断/事件请求。每个中断线都可以独立地配置它的触发事件(上升沿或下降沿或双边沿),能够单独地被屏蔽;有一个挂起寄存器维持所有中断请求的状态。EXTI可以检测到脉冲宽度小于内部APB2的时钟周期。多达80个通用I/O口连接到16个外部中断线。时钟和启动系统时钟的选择是在启动时进行,复位时内部8MHz的RC振荡器被选为默认的CPU时钟,随后可以选择外部的、具失效监控的416MHz时钟;当外部时钟失效时,它将被隔离,同时会产生相应的中断。同样,在需要时可以采取对PLL时钟完全的中断管理(如当一个外接的振荡器失效时)。具有多个预分频器用于配置AHB的频率、高速APB(APB2)和低速APB(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外部32kHz振荡器和后备寄存器供电。供电监控器本产品内部集成了上电复位(POR)/掉电复位(PDR)电路,该电路始终处于工作状态,保证系统在供电超过2V时工作;当VDD低于设定的阀值(VPOR/PDR)时,置器件于复位状态,而不必使用外部复位电路。器件中还有一个可编程电压监测器(PVD),它监视VDD供电并与阀值VPVD比较,当VDD低于或高于阀值VPVD时将产生中断,中断处理程序可以发出警告信息或将微控制器转入安全模式。需要通过程序开启PVDo电压调压器调压器有三个操作模式:主模式(MR)、低功耗模式(LPR)和关断模式?主模式(MR)用于正常的运行操作?低功耗模式(LPR)用于CPU的停机模式?关断模式用于CPU的待机模式:调压器的输出为高阻状态,内核电路的供电切断,调压器处于零消耗状态(但寄存器和SRAM的内容将丢失)该调压器在复位后始终处于工作状态,在待机模式下关闭处于高阻输出。低功耗模式STM32F103xx增强型支持三种低功耗模式,可以在要求低功耗、短启动时间和多种唤醒事件之间达到最佳的平衡。?睡眠模式在睡眠模式,只有CPU停止,所有外设处于工作状态并可在发生中断/事件时唤醒CPU。?停机模式在保持SRAM和寄存器内容不丢失的情况下,停机模式可以达到最低的电能消耗。在停机模式下,停止所有内部L8V部分的供电,PLL.HSI和HSE的RC振荡器被关闭,调压器可以被置于普通模式或低功耗模式。可以通过任一配置成EXTI的信号把微控制器从停机模式中唤醒,EXTI信号可以是16个外部I/O口之一、PVD的输出、RTC闹钟或USB的唤醒信号。?待机模式在待机模式下可以达到最低的电能消耗。内部的电压调压器被关闭,因此所有内部L8V部分的供电被切断;PLL、HSI和HSE的RC振荡器也被关闭;进入待机模式后,SRAM和寄存器的内容将消失,但后备寄存器的内容仍然保留,待机电路仍工作。从待机模式退出的条件是:NRST上的外部复位信号、IWDG复位、WKUP管脚上的一个上升边沿或RTC的闹钟到时。注:在进入停机或待机模式时,RTC、IWDG和对应的时钟不会被停止。DMA灵活的7路通用DMA可以管理存储器到存储器、设备到存储器和存储器到设备的数据传输;DMA控制器支持环形缓冲区的管理,避免了控制器传输到达缓冲区结尾时所产生的中断。每个通道都有专门的硬件DMA请求逻辑,同时可以由软件触发每个通道;传输的长度、传输的源地址和目标地址都可以通过软件单独设置。DMA可以用于主要的外设:SPI、I2C、USARTx通用和高级定时器TlMX和ADC。RTC(实时时钟)和后备寄存器RTC和后备寄存器通过一个开关供电,在VDD有效时该开关选择VDD供电,否则由VBAT管脚供电。后备寄存器(10个16位计算机学院嵌入式系统课程设计报告的寄存器)可以用于在VDD消失时保存数据。实时时钟具有一组连续运行的计数器,可以通过适当的软件提供日历时钟功能,还具有闹钟中断和阶段性中断功能。RTC的驱动时钟可以是一个使用外部晶体的32.768kHz的振荡器、内部低功耗RC振荡器或高速的外部时钟经128分频。内部低功耗RC振荡器的典型频率为32kHz。为补偿天然晶体的偏差,RTC的校准是通过输出一个512Hz的信号进行。RTC具有一个32位的可编程计数器,使用比较寄存器可以产生闹钟信号。有一个20位的预分频器用于时基时钟,默认情况下时钟为32.768kHz时它将产生一个1秒长的时间基准。独立的看门狗独立的看门狗是基于一个12位的递减计数器和一个8位的预分频器,它由一个独立的32kHz的内部RC振荡器提供时钟,应为这个RC振荡器独立于主时钟,所以它可运行于停机和待机模式。它可以被当成看门狗用于在发生问题时复位整个系统,或作为一个自由定时器为应用程序提供超时管理。通过选择字节可以配置成是软件看门狗或硬件看门狗。在调试模式,计数器可以被冻结。窗口看门狗窗口看门狗内有一个7位的递减计数器,并可以设置成自由运行。它可以被当成看门狗用于在发生问题时复位整个系统。它由主时钟驱动,具有早期预警中断功能;在调试模式,计数器可以被冻结。系统时基定时器这个定时器是专用于操作系统,也可当成一个标准的递减计数器。它具有下述特性:?24位的递减计数器?重加载功能?可屏蔽的计数器为O中断?可编程时钟源通用定时器(TlMX)产品中内置了多达3个同步的标准定时器。每个定时器都有一个16位的自动加载递加/递减计数器、一个16位的预分频器和4个独立的通道,每个通道都可用于输入捕获、输出比较、PWM和单脉冲模式输出,在最大的封装配置中可提供最多12个输入捕获、输出比较或PWM通道。它们还能通过定时器链接功能与高级控制定时器共同工作,提供同步或事件链接功能。在调试模式下,计数器可以被冻结。任一标准定时器都能用于产生PWM输出。每个定时器都有独立的DMA请求机制。高级控制定时器(TIMI)高级控制定时器(TIMI)可以被看成是一个分配到6个通道的三相PWM发生器,它还可以被当成一个完整的通用定时器。四个独立的通道可以用于:?输入捕获?输出比较?产生PWM(边缘或中心对齐模式)?单脉冲输出计算机学院嵌入式系统课程设计报告?反相PWM输出,具程序可控的死区插入功能配置为16位标准定时器时,它与TIMx定时器具有相同的功能。配置为16位PWM发生器时,它具有全调制能力(0100%)。在调试模式下,计数器可以被冻结。很多功能都与标准的TIM定时器相同,内部结构也相同,因此高级控制定时器可以通过定时器链接功能与TIM定时器协同操作,提供同步或事件链接功能。I2C总线多达2个I2C总线接口,能够工作于多主和从模式,支持标准和快速模式。它们支持双从地址寻址(只有7位)和主模式下的7/10位寻址。内置了硬件CRC发生器/校验器。它们可以使用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操作。控制器区域网络(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管脚都可以由软件配置成输出(推拉或开路)、输入(带或不带上拉或下拉)或其它的外设功能;多数GPIO管脚都与数字或模拟的外设功能管脚共用。所有的GPlO管脚都有大电流通过能力。在需要的情况下,I/O管脚的外设功能可以通过一个特定的操作锁定,以避免意外的写入I/O寄存器。在APB2上的I/O脚可达18MHz的翻转速度。ADC(模拟/数字转换器)STM32F103×x增强型产品内嵌2个12位的模拟/数字转换器(AD。,每个ADC有多达16个外部通道,可以执行单次或扫描转换模式;在扫描模式下,转换在一组选定的模拟输入上自动进行。计算机学院嵌入式系统课程设计报告ADC接口上额外的逻辑功能允许:?同时采样和保持?交叉采样和保持?单次采样ADC可以使用DMA操作。模拟看门狗功能允许非常精准地监视一路、多路或所有选中的被转换电压,当被监视的信号超出预置的阀值时,将产生中断。由标准定时器(TIMX)和高级控制定时器(TIMl)产生的事件,可以分别内部级联到ADC的开始触发、外部触发和DMA触发,允许应用程序同步AD转换和时钟的操作。温度传感器温度传感器产生一个随温度线性变化的电压,转换范围在2V<VDDA<3.6V之间。温度传感器在内部被连接到ADCI2N16的输入通道上,用于将传感器的输出转换到数字数值。串行线JTAG调试口(SWJ-DP)内嵌ARM的SWJ-DP接口和JTAG接口,JTAG的TMS和TcK信号分别与SWDIO和SWCLK共用管脚,TMS脚上的一个特殊的信号序列用于在JTAG-DP和SWJ-DP间切换。2.2. 主要函数说明L函数ADC_DeInit函数名ADC-DeInit函数原开乡voidADC_DeInit(ADC_TypeDef*ADCx)功能描述将外设ADCx的全部寄存器重设为缺省值输入参数1ADCx:x可以是1或者2来选择ADC外设ADCl或ADC2输出参数2无返回值无先决条件无被调用函数RCC_APB2PeriPhCIockCmdO例:*ResetsADC2*/ADC_DeInit(ADC2);2 .函数ADC-Init函数名ADCJnit函数原形voidADC_Init(ADC_TypeDef*ADCx,ADC_InitTypeDef*ADC_InitStruct)功能描述根据ADC-InitStruct中指定的参数初始化外设ADCx的寄存器输出参数1ADCxix可以是1或者2来选择ADC外设ADCl或ADC2输出参数2ADCJnitStruct:指向结构ADC-InitTypeDef的指针,包含了指定外设ADC的配置信息输出参数无返回值无先决条件无被调用函数无8计算机学院嵌入式系统课程设计报告ADC_InitTypeDefstructureADC-InitTypeDef定义于文件wstm32f10x_adc.hM:typedefstructu32ADC_Mode;FunctionaIStateADC_ScanConvMode;FunctionaIStateADC_ContinuousConvMode;u32ADC-ExternaITrigConv;u32ADC_DataAlign;u8ADC_NbrOfChannel;ADC_InitTypeDef3 .函数ADC_GetInjectedConversionVaIue函数名ADC_GetInjeCtedconversionVaIue函数原形ul6ADC_GetInjectedConversionValue(ADC_TypeDef*ADCxzu8ADC_InjectedChannel)功能描述返回ADC指定注入通道的转换结果输出参数1ADCxix可以是1或者2来选择ADC外设ADCl或ADC2输出参数2ADCLInjectedChanneI:被转换的ADC注入通道输出参数无返回值转换结果先决条件无被调用函数无例:*ReturntheADClinjectedchannellconverteddatavalue*/ul6InjectedDataVaIue;InjectedDataVaIue=ADC.GetInjectedConversionValue(ADCI1ADC_InjectedChannel_l);4 .函数DMA_Init函数名DMAJnit函数原形voidDMA_Init(DMA_Channel_TypeDef*DMA_Channelx,DMAnitTypeDef*DMA_InitStruct)功能描述根据DMAnitStruct中指定的参数初始化DMA的通道X寄存器输出参数1DMAChannelx:x可以是1,2,3.输出参数2DMA-InitStruct:指向结构DMA.InitTypeDef的指针,包含了DMA通道X的配置信息输出参数无返回值无先决条件无被调用函数无9计算机学院嵌入式系统课程设计报告3 .设计过程或程序代码3.1. 设计过程1、A/D变换原理?采样:间隔一定时间对信号进行采样,用信号序列来代替原来时间上连续的信号。均匀采样:v或分2。可完整地恢复原始信号,其中,T为采样时间间隔,fs表示采样频率,fm表示原始信号最大频率。?量化:把采集到的数值送到量化器编码成数字形式,每个样值代表一次采样所获得的信号的瞬时幅度。A/D转换器一般为标量均匀量化。(量化还可分为:标量量化、矢量量化)量化误差(与舍入方式相关):1LSB或1/2LSB?编码:A/D模拟/数字转换器一般采用二进制编码,A/D变换后的结果到此可以表示为一个以0、1二进制形式表示的比特流,单位时间内可以传输的二进制比特速率就是A/D之后的码速率,数值上等于采样频率与量化比特数值之乘积。二进制编码:量化与字长的关系。3、ADC的A/D转换方式DODlD2D3数据输出D4D5A/DD6模拟信号D7转换器开始转换SOC结束转换EOC输出使能10计算机学院嵌入式系统课程设计报告在查询方式下,软件可通过读取ADC模块转换完毕引脚EOC的状态或状态寄存器中的转换完成标志位判断本次A/D是否结束;若结束则从数据总线或数据寄存器中读取A/D结果数据。2、ADC模拟/数字转换器:STM32的ADC是12位逐次逼近型的模拟数字转换器。它有18个通道可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。3、转换特点:STM32的ADC最大的转换速率为IMhZ,也就是转换时间为IUS(ADCCLK=I4M,采样周期为1.5个ADC时钟下得到),不能让ADC的时钟超过14M,否则将导致结果准确度下降。4、STM32将ADC的转换分为2个通道组:规则通道组和注入通道组。规则通道相当于运行的程序,而注入通道就相当于中断。在程序正常执行的时候,中断是可以打断程序正常执行的。同这个类似,注入通道的转换可以打断规则通道的转换,在注入通道被转换完成之后,规则通道才得以继续转换。规则组设置后,可以按照设置的通道顺序对各通道进行依次采集。方便于对多路ADC通道的自动采集。注入组最多设置4个通道,简单来讲就是需要触发才能采集设置的通道ADC值。本设计选择了采用规则组,设置了一个通道进行自动采集。5、此设计显示电压的特点:本设计测量电压值范围为0-3.3V的电压,显示误差为?0.001V。LCD实时显示电压值,MiCrOSD卡对数据进行同步存储。6、DMA请求:在这次设计中用到了ADC转换结果采用DMA传递方式。直接存储器存取用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU任何干预,通过DMA数据可以快速地移动。这就节省了CPU的资源来做其他操作。7、LCD控制电路(1)本设计所使用的LCD为3寸,400X240分辨率。LCD模块使用STM32的FSMC接口控制。3TFT显示屏焊接在奋斗显示转接板上,在屏上贴有触摸屏,通过40芯的接口与V3或者MINI连接。11计算机学院嵌入式系统课程设计报告3.2. 程序代码1、主程序:intmain(void)ul6len,c2lenzc3len,c4len;u8c="Voltageu8c2=;u8c3=;u8c4=".Vul6bkColor;Ien=SiZeOf(C)1;计算字节数长度SiZeof()c2len=sizeof(c2)-l;c3len=sizeof(c3)-l;c4len=sizeof(c2)-l;bkColor=White;RCCConfiguration。;/系统时钟配置为72MHzUSartlnit();串口1初始化ADC-ConfigurationO;/ADC初始化FSMjLCDnit();FSMC总线配置lcd_Init();液晶初始化IccLPutChar(IOjOjg',0x0000,Oxffff);/LCD_test();USART_0UT(USARTL"rnUSARTlprintAD_valuern");while(1)(if(ticks+>=900000)间隔时间显示转换结果ticks=0;Clockls=1;)if(CIockls)Clockls=0;USART_OUT(USARTL"ThecurrentADvalue=%drnADJConVertedVaIUe);串口显示字符段/DeIay(OxAFFFFf);Precent=(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,Black,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(USARTL"Thevvalue=%d.%d%d%dVrn,c43=(Voltage1000)zc45=(Voltage%1000)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-InitTypeDefADC_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);*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_InitStructure.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_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,ENABLE);使能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_ExternaITrigConv,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,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);/ADCl转换启动ADC-SoftwareStartConvCmd(ADCl,ENABLE);15计算机学院嵌入式系统课程设计报告4 .设计结果与分析设计发现:数字电压表采用模数转换思想来实现,通过硬件电路和软件程序相结合,可输出自定义测量电压,通过调节模数转换电位器使在一定范围内可任意改变。输出的电压格式和精度的改变通过软件控制,输出电压的大小的改变可以通过硬件实现。16计算机学院嵌入式系统课程设计报告参考文献1张旭,亓学广,李世光等.基于STM32电力数据采集系统的设计J.电子测量技术,2010,33(11):90-93.DOI:10.3969j.issn1002-7300.2010.11.024.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刘明贵,于誉,梁昊等.基于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