版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
STM32单片机应用与全案例实践——ADC及其应用1学习目标STM32有12位的ADC外设模块STM32的ADCSTM32外设模块ADC的工作流程与编程要点ADC配置ADC应用实例难点——ADC的基本应用重点——ADC的特性与初始化设置STM32单片机应用与全案例实践——ADC及其应用2STM32的ADCADC的基本特性——ADC1(ADC2)1——转换精度STM32的ADC是12位逐次逼近型模拟数字转换器——通道数ADC1有18个通道,可测量16个外部信号源(从引脚ADC_IN[15:0]输入)和2个内部信号源(连接到温度传感器和内部参考电压(VREFINT=1.2V))各通道的A/D转换可以单次、连续、扫描或间断模式执行ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中——STM32的ADC具有模拟看门狗特性模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。如果被ADC转换的模拟电压低于低阀值或高于高阀值,模拟看门狗状态位AWD被设置——转换速度ADC的输入时钟不得超过14MHz,它是由PCLK2经分频产生。这一点要注意!不同的系列型号,其最高转换速度会有所差异。最高为1μs——供电电压与参考电压2.4V到3.6VADC输入范围:VREF-≤VIN≤VREF+。VREF+和VREF-只有LQFP100以上封装才有,LQFP100以下封装实际是直接接VDDA、VSSA(模拟电源的正极、负极)。如果参考电源为2.4V,则输入电压VIN与数字量之间的关系为以下公式:数字量=VIN/2.4*4096——规则通道转换期间有DMA请求产生,但是仅ADC1有此功能STM32单片机应用与全案例实践——ADC及其应用3STM32的ADCADC采样周期与转换时间2ADCCLK最高可达14MHz,由右图可知,其来自经过分频器的PCLK2(2、4、6、8分频),经ADCPrescalers再次分频得到整个转换时间=采样时间+12.5个周期(固定时间)采样时间可通过设置寄存器ADC_SMPR1的SMPx[2:0]:选择通道x的采样时间。一共有8种采样周期可选。在允许情况下,尽量选大一点(即慢点)的会使ADC更稳定、更精确以时钟14MHz和采样时间为1.5周期时的情况为例,其转换周期(转换时间)为:
TCONV=1.5+12.5=14周期=14×(1/(14×1000000))=1μsSTM32单片机应用与全案例实践——ADC及其应用4STM32的ADC什么是ADC的规则组、注入组——13STM32的ADC1有16个外部通道——它们可被分成两组——规则组、注入组——何为规则组STM32的ADC可以对一组指定的通道,按照指定的顺序,逐个转换这组通道,转换结束后,再从头循环。这指定的通道组就称为规则组规则组由多达16个转换组成。规则通道和它们的转换顺序在ADC_SQRx寄存器中选择规则组中转换的总数写入ADC_SQR1寄存器的L[3:0]位中——注入组但是实际应用中,有可能需要临时中断规则组的转换,对某些通道进行转换,这些需要中断规则组而进行转换的通道组,就称为注入组注入组由多达4个转换组成。注入通道和它们的转换顺序在ADC_JSQR寄存器中选择注入组里的转换总数目必须写入ADC_JSQR寄存器的L[1:0]位中——组选择如果ADC_SQRx或ADC_JSQR寄存器在转换期间被更改,则当前的转换被清除,一个新的启动脉冲将被发送至ADC以转换新选择的组STM32单片机应用与全案例实践——ADC及其应用5STM32的ADC什么是ADC的规则组、注入组——23——内部通道的特性内部通道温度传感器与通道ADCx_IN16相连接内部参照电压VREFINT与ADCx_IN17相连接可以按注入或规则通道对这两个内部通道进行转换但必须要注意——温度传感器和VREFINT只能出现在ADC1中——关于规则组、注入组的举例系统要正常采集8通道温度,但是又要适时监控一下湿度,那么,这个湿度ADC(采集)就可以放在注入组中,通过合适的触发启动转换。一旦启动注入组转换,规则组转换则被暂停,然后等待注入组转换完成后,规则组再继续进行转换用更通俗的话说,在这系统中,规则组相当于是主业,而注入组相当于副业规则组、注入组?行车道、超车道?STM32单片机应用与全案例实践——ADC及其应用6STM32外设模块ADC的工作流程与编程要点ADC的工作流程1STM32的ADC有两种转换模式:单次转换与连续转换。单次转换模式下,ADC只执行一次转换。连续转换模式下,前面的ADC转换一结束马上就启动下一次转换。STM32的ADC的工作流程(以ADC1为例):(1)开启ADC1的时钟,由于ADC1的模拟输入通道在GPIOA上,所以也要打开GPIOA的时钟,并进行相关的配置,要把GPIOA的相应引脚设置成模拟输入引脚。(2)复位ADC1(省略也可以),设置ADC1的分频因子(记住:ADC的时钟频率不能超过14MHz),其采样周期长一点会更好。(3)初始化ADC1的参数,设置ADC1的工作模式和规则序列的相关信息。(4)使能ADC。(5)执行复位校准和ADC校准。注意:这两步校准很必要,否则转换结果将有较大的误差。每次校准之后都要等待校准结束,但是通过什么方式知道校准结束呢?通常通过获取校准状态来判断校准是否结束。(6)读取ADC的值。STM32单片机应用与全案例实践——ADC及其应用7STM32外设模块ADC的工作流程与编程要点ADC编程的要点2在开发ADC应用程序时,需要设置ADC转换模式、外部触发模式、数据对齐方式。1.ADC转换模式ADC转换模式有10种,通常选择ADC_Mode_Independent(独立模式)。其他常用的模式有ADC_Mode_Independent、ADC_Mode_RegInjecSimult、ADC_ExternalTrigConv等。STM32单片机应用与全案例实践——ADC及其应用8STM32外设模块ADC的工作流程与编程要点ADC编程的要点3在开发ADC应用程序时,需要设置ADC转换模式、外部触发模式、数据对齐方式。2.ADC外部触发模式ADC外部触发模式有多种,常用的有以下三种。(1)软件触发,最简单,参数为ADC_ExternalTrigConv_None。设置该选项后,一定要通过软件才能触发启动ADC转换。(2)定时器通道输出触发,共有ADC_ExternalTrigConv_T1_CC1等5种,定时器通道输出触发使用起来比较麻烦,还需要设置相应的定时器。(3)外部引脚触发,对于规则通道,选择EXTI_11和TIM8_TRGO作为外部触发事件;对于注入通道,则选择EXTI_15和TIM8_CC4作为外部触发事件。STM32单片机应用与全案例实践——ADC及其应用9STM32外设模块ADC的工作流程与编程要点ADC编程的要点4在开发ADC应用程序时,需要设置ADC转换模式、外部触发模式、数据对齐方式。3.数据对齐方式(ADC_DataAlign)ADC_DataAlign的取值为:ADC_DataAlign_Right、ADC_DataAlign_Left。ADC_DataAlign_Right,即右对齐方式。建议采用右对齐方式,因为这样处理数据会比较方便。当然,如果要从高位开始传输数据,则采用左对齐方式(ADC_DataAlign_Left)比较合适。以下两点要引起注意:(1)注入组和规则组的扩展符号位在处理上存在差异。(2)多通道数据传输时要注意:若一个数组为ADC_ValueTab[4],且设置了两个通道:通道1和通道2,则转换结束后,ADC_ValueTab[0]和ADC_ValueTab[2]存储的是通道1的数据,而ADC_ValueTab[1]和ADC_ValueTab[3]存储的是通道2的数据。如果数组容量增大,则以此类推。STM32单片机应用与全案例实践——ADC及其应用10STM32的ADC特性及其基本应用ADC编程的两点提醒5——扩展符号位注入组和规则组的扩展符号位在处理上存在差异,这一点要加以注意——转换结果存储多通道数据转换和传输时这一点也注意若一个数组为ADC_ValueTab[4],且设置了两个通道:通道1和通道2则转换结束后——ADC_ValueTab[0]和ADC_ValueTab[2]存储的是通道1的数据ADC_ValueTab[1]和ADC_ValueTab[3]存储的是通道2的数据如果数组容量更大,则依次类推这是为什么?STM32单片机应用与全案例实践——ADC及其应用11ADC的配置设备配置解析11.使能ADCSTM32F1的不同产品,其复用通道数量有所不同。例如,ZET6拥有16个外部通道和2个内部通道。ADC配置界面如图9.2所示。单击ADC1,可以看见STM32F103ZET6可用的通道。选择所使用的通道(当前勾选ADC1的IN0、IN1,ADC2的IN2,ADC3的IN3)。①框处,Configuration一栏会显示配置信息。②框处,右侧芯片会显示所占用引脚,并以初始命名格式ADCx_INx对引脚进行命名。在后续生成的程序中,对应的ADC_CR2寄存器中ADON位置1,即开启ADC,如图9.3所示。STM32单片机应用与全案例实践——ADC及其应用12ADC的配置设备配置解析22.模式选择(ADCs_Common_Settings)Mode栏用于选择ADC模式,配置ADC为独立模式或多模式工作。在寄存器中,模式由ADC1_CR1寄存器中的DUALMOD[2:0]位决定。若选择独立模式(IndependentMode),则双ADC模式失效,每个ADC接口独立工作。若选择组合规则+注入同步模式(Dualcombinedregularsimultaneous+injectedsimultaneousmode),则可以中断规则组的同步转换,并启动注入组的同步转换。此时两个ADC的通道需配置完全相同的采样时间。若选择规则同步转换+注入交替转换模式(Dualregularsimultaneous+alternatetriggermode),可以中断规则组的同步转换,并启动注入组的交替转换。注入组触发事件到达后立即启动注入组交替转换。如果规则组转换正在运行,为了确保注入组转换后的同步,两个(主/从)ADC的常规转换将停止,并在注入组转换结束时同步恢复。此时两个ADC的通道应该配置完全相同的采样时间。注入同步转换的快速或慢速交替模式是交错模式和注入同步模式的结合。STM32单片机应用与全案例实践——ADC及其应用13ADC的配置设备配置解析33.ADC转换设置(ADC_Settings)ADC_Settings用于设定当前ADC转换方式,参数配置如图9.6所示。1)对齐方式(DataAlignment)设置DataAlignment用于设置ADC转换后的对齐格式。可以选择右对齐(RightAlignment)或左对齐(LeftAlignment),如图9.7、图9.8所示。2)扫描模式(ScanConversionMode)设置ScanConversionMode用来设置是否使能扫描模式。当ADC启用多通道时,需要开启扫描模式。3)连续转换模式(ContinuousConversionMode)设置ContinuousConversionMode用于设置是否使能连续转换模式。在连续转换模式下,前一次转换结束,立马开始后一次转换。4)间断转换模式(DiscontinuousConversionMode)设置DiscontinuousConversionMode用于设置是否使能间断转换模式。对于规则组,启用此模式需要设置ADC_CR1寄存器中的DISCEN位。STM32单片机应用与全案例实践——ADC及其应用14ADC的配置设备配置解析44.规则组配置(ADC_Regular_ConversionMode)图9.9所示为规则组配置。在使能规则组转换后将弹出如下选项:NumberOfConversion(转换数量),用于设置规则组转换的数量;ExternalTriggerConversionSource(转换外部触发源),用于设置规则组采样触发方式,可以选择软件触发、定时器触发等;为获取更精确的采样周期,可由定时器触发ADC。Rank(等级)用于设置通道转换顺序,当前设置表示首先转换Channel0再转换Channel1,两者采样时间均为1.5个周期。STM32单片机应用与全案例实践——ADC及其应用15ADC的配置设备配置解析55.注入组配置(ADC_Injected_ConversionMode)图9.10所示为注入组配置。在使能注入组转换后会弹出如下选项:NumberOfConversions和ExternalTriggerSource,与规则组类似;InjectedConversionMode(注入转换模式)可选择DiscontinuousMode(触发式注入)和AutoInjectedMode(自动式注入),触发式注入需要将ADC_CR1的JAUTO位清零。该方式会在规则组转换时,复位当前转换并单次扫描转换注入组。注入组转换结束后,恢复中断前正在转换的规则组。自动式注入需要将JAUTO位置位,注入组将在规则组后自动转换,此时外部触发失效。STM32单片机应用与全案例实践——ADC及其应用16ADC的配置设备配置解析66.模拟看门狗(WatchDog)配置图9.11所示为模拟看门狗配置。当使能模拟看门狗模式(EnableAnalogWatchDogMode)后弹出如下选项:WatchdogMode(看门狗模式)用于选择触发源,可选择为Singleregularchannel(单一规则组通道)、Singleinjectedchannel(单一注入组通道)、Singleregularorinjectedchannel(单一规则组或注入组通道)、Allregularchannels(所有规则组通道)、Allinjectedchannels(所有注入组通道)、Allregularandinjectedchannels(所有规则组和注入组通道)。在前三种触发源中,需要设置AnalogWatchDogChannel(模拟看门狗通道)。HighThreshold(高阈值)和LowThreshold(低阈值)用来定义ADC高或低阈值,超出阈值则模拟看门狗状态位(AWD)被置位。通道ADC_CR1寄存器控制位(X=任意)AWDSGLbitAWDENbitJAWDENbit无X00所有注入组通道001所有规则组通道010所有规则组和注入组通道011单一注入组通道101单一规则组通道110单一规则组或注入组通道111STM32单片机应用与全案例实践——ADC及其应用17ADC的配置设备配置解析77.ADC中断配置STM32F系列ADC1和ADC2中断映射到同一个中断向量上。ADC3中断映射到一个单独的中断向量上。勾选Enabled复选框开启中断,如图9.12所示。ADC中断有三种方式:规则组转换结束、注入组转换结束和模拟看门狗状态位置位。ADC3的中断在ADC3→NVICSettings中设置。STM32单片机应用与全案例实践——ADC及其应用18ADC的配置设备配置解析88.F1系列DMA配置ADC打开DMA的过程如图9.13所示,第一步单击Add按钮,第二步选择ADC1。打开DMA后将弹出如图9.14所示的DMA配置信息。Mode下拉列表用于设置DMA模式,有以下两个选项。Normal(单次搬运):在DMA第一次传输完成后,要启动第二次DMA传输,需先关闭该DMA通道,重新设置DMA传输数据的个数,再开启DMA通道。Circular(循环搬运):DMA会不断循环地将数据从外设传输至内存。在IncrementAddress(增量地址)栏中,若勾选Memory(内存)复选框则第一个数据传输完成后,内存地址会增加,存放第二个数据时不会覆盖第一个数据。若取消勾选Memory(内存)复选框,则存放第二个数据时会覆盖第一个数据。DataWidth(传输数据宽度)用于对传输的数据位数进行修改,可修改为Byte(1字节)即8位,HalfWord(半字)即16位,Word(字)即32位。STM32单片机应用与全案例实践——ADC及其应用19ADC的配置接口函数1ADC的HAL库接口函数定义在stm32f1xx_hal_adc.c源文件中。ADC库函数声明与相关的结构体定义在stm32f1xx_hal_adc.h头文件中。本节将对用户可用接口函数进行解析。1.初始化(带自校准)及复位函数函数原型:HAL_ADC_Init(ADC_HandleTypeDef*hadc)2.复位函数复位函数用于将ADC外围寄存器恢复到其默认值或初始状态。函数原型:HAL_ADC_DeInit(ADC_HandleTypeDef*hadc)3.轮询方式相关函数及其功能(1)函数功能:开启ADC转换。函数原型:HAL_ADC_Start(ADC_HandleTypeDef*hadc)(2)函数功能:停止ADC转换。函数原型:HAL_ADC_Stop(ADC_HandleTypeDef*hadc)(3)函数功能:等待规则组转换结束,并采用超时管理机制。此函数不能在开启DMA时使用。函数原型:HAL_ADC_PollForConversion(ADC_HandleTypeDef*hadc,uint32_tTimeout)(4)函数功能:获取ADC数值(常用于轮询或中断方式下获取数值)。函数原型:HAL_ADC_GetValue(ADC_HandleTypeDef*hadc)STM32单片机应用与全案例实践——ADC及其应用20ADC的配置接口函数2ADC的HAL库接口函数定义在stm32f1xx_hal_adc.c源文件中。ADC库函数声明与相关的结构体定义在stm32f1xx_hal_adc.h头文件中。本节将对用户可用接口函数进行解析。4.中断方式及其相关函数(1)函数功能:启动ADC及其中断,并开始对规则组通道进行转换。函数原型:HAL_ADC_Start_IT(ADC_HandleTypeDef*hadc)(2)函数功能:停止规则组或自动注入模式的注入组的ADC转换,结束中断,禁用ADC外设。函数原型:HAL_ADC_Stop_IT(ADC_HandleTypeDef*hadc)5.DMA方式及其相关函数(1)函数功能:DMA方式启动ADC,同时启动DMA中断(在转换一半和转换后进入)。开启后,会读取Length长度的数据至pData地址(一般为数组首地址)。函数原型:HAL_ADC_Start_DMA(ADC_HandleTypeDef*hadc,uint32_t*pData,uint32_tLength)注意事项:此函数仅适用于单ADC模式。(2)函数功能:停止DMA,禁用ADC外设。函数原型:HAL_ADC_Stop_DMA(ADC_HandleTypeDef*hadc)STM32单片机应用与全案例实践——ADC及其应用21ADC的配置接口函数3ADC的HAL库接口函数定义在stm32f1xx_hal_adc.c源文件中。ADC库函数声明与相关的结构体定义在stm32f1xx_hal_adc.h头文件中。本节将对用户可用接口函数进行解析。6.中断服务函数(1)ADC中断服务函数。函数原型:HAL_ADC_IRQHandler(ADC_HandleTypeDef*hadc)(2)ADC中断回调函数,用户在该函数内编写实际的中断服务程序。函数原型:HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef*hadc)(3)DMA传输一半时调用的中断回调函数。函数原型:HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef*hadc)(4)模拟看门狗非阻塞回调函数。函数原型:HAL_ADC_LevelOutOfWindowCallback(ADC_HandleTypeDef*hadc)7.外设状态函数(1)获取ADC转换状态函数。函数原型:HAL_ADC_GetState(ADC_HandleTypeDef*hadc)(2)获取ADC错误状态函数。函数原型:HAL_ADC_GetError(ADC_HandleTypeDef*hadc)STM32单片机应用与全案例实践——ADC及其应用22ADC应用实例单ADC单通道应用示例11.功能描述本实例通过ADC1模块,读取芯片内部温度数据,再通过Debug的方式观察转换后的数据。STM32F103系列单片机内部有一个温度传感器,用来测量芯片内部的温度,连接在ADC1_IN16的输入通道上。内部温度测量范围是-40~125℃,测量精度为±1.5℃。查询数据手册,可得到内部温度与输出电压的关系:
式中,V25是温度传感器25℃时的输出电压,典型值为1.43V,最小值为1.34V,最大值为1.52V;Avg_Slope是温度传感器输出电压与温度曲线的平均斜率,典型值为4.3mV/℃,最小值为4.0mV/℃,最大值为4.6mV/℃;Vsense是由A/D转换结果值ADC_Value换算得到的电压,当参考电压为3.3V时,换算公式如下:
STM32单片机应用与全案例实践——ADC及其应用23ADC应用实例单ADC单通道应用示例22.软件设计具体操作步骤如下。(1)新建STM32CubeIDE工程,选择MCU。(2)ADC功能参数设置。第一步:配置RCC。选择外部高速时钟源HighSpeedClock(HSE)作为系统时钟。在HighSpeedClock(HSE)下拉列表中选择Crystal/CeramicResonator(晶振/陶瓷谐振器),如图9.15所示。
HighSpeedClock(HSE)下拉列表中选择Crystal/CeramicResonator(晶振/陶瓷谐振器),如图9.15所示。第二步:配置ADC1。单击Analog目录下的ADC1;勾选Mode下TemperatureSensorChannel复选框,使能内部温度传感器通道;下方Configuration区域自动显示相关参数,如图9.16所示。在ADC1的Configuration区域的ParameterSettings选项卡显示了默认的参数设置。对于单ADC单通道,可直接采用默认参数。当前设置中,数据对齐方式设置为右对齐;不启用连续转换模式,即ADC通过软件触发转换,如图9.17所示。第三步:配置系统时钟和ADC时钟。根据所使用的目标板的实际情况配置系统时钟。本实例使用的目标板配置的外部时钟频率为8MHz。经硬件倍频,STM32F103X最高主频可达到72MHz。由于本实例对时钟无精度要求,选择最大主频,即72MHz,APB2频率为72MHz,APB1频率为36MHz,ADC频率为12MHz。用户可根据需求,自行配置时钟,如图9.18所示。STM32单片机应用与全案例实践——ADC及其应用24ADC应用实例单ADC单通道应用示例32.软件设计具体操作步骤如下。(3)生成工程代码。单击“保存”按钮,IDE弹出是否生成代码文件的提示,选择生成即可。(4)编写应用程序。STM32单片机应用与全案例实践——ADC及其应用25ADC应用实例单ADC多通道应用示例11.功能描述在实际应用中,往往需要使用ADC的多路通道。ADC多通道采集模式有两种:阻塞模式与DMA模式。在阻塞模式下,若未完成转换,则进程挂起直到完成再进行其他操作,因此当通道数量较多时,会比较耗时或影响整体时序。本实例使用DMA模式对单一ADC两路通道(一路外部通道、一路内部温度测量通道)进行读取。注意:连接外部电路时,需注意电压、电流等参数,以防单片机击穿。还需注意“共地”,即通过杜邦线等方式共用一块地平面,使待测电路与单片机电路的基准源相同,否则会使A/D数据失真。STM32单片机应用与全案例实践——ADC及其应用26ADC应用实例单ADC多通道应用示例22.软件设计具体操作步骤如下。(1)新建STM32CubeIDE工程,选择MCU。(2)ADC功能参数设置。(3)生成工程代码。单击“保存”按钮,IDE弹出是否生成代码文件的提示,选择生成即可。(4)编写应用程序。本实例需要在DMA传输结束后,对温度AD值进行处理。为提升代码运行效率,本实例将在中断服务函数中编写温度转换代码。STM32单片机应用与全案例实践——ADC及其应用27延伸阅读——一个三通道A/D转换的范例功能要求1——基于DMA实现三个通道的AD转换一个通道采集外部的输入电压一个通道采集系统电源电压一个通道采集内部参考电压。——数字滤波三个通道均采用数字滤波,即连续采集10次,取其平均值作为转换结果——采用查询DMA事件信号的方式读取数据并处理——转换结果标定——1通常采用系统电源3.3V作为参考电压,外部通道的电压V1可用公式表示此法的不好之处在于,每个系统要根据自身的电源电压,调整程序中的V3.30。由于每个系统的电源电压不可能相同,故必须先测量该值,在每个程序中使用该值,很麻烦,所以这种方法对于批量生产不是很合适课后延伸阅读——数字滤波的常用方法有哪些?STM32单片机应用与全案例实践——ADC及其应用28一个三通道A/D转换的范例功能要求1——转换结果标定——2每个STM32芯片都有一个内部的参照电压,相当于一个标准电压测量点,在芯片内部连接到ADC1的通道17。根据数据手册中的数据,这个参照电压的典型值是1.20V,最小值是1.16V,最大值是1.24V。这个电压基本不随外部供电电压的变化而变化不要把这个参照电压与ADC的参考电压混淆如果对于ADC测量的准确性要求不是十分苛刻,可使用这个1.2V内部参照电压得到ADC测量的电压值此法的特点是,可以不用测量系统的电源电压,适用于批量生产具体方法是——在测量某个通道的电压值之前,先读出参照电压的ADC测量数值,记为Adrefint,再读出要测量通道的ADC转换数值,记为Adchx,则由推算可得要测量的电压为公式式中,Vrefint为参照电压=1.20V推荐如果要精确测量,又该如何?STM32单片机应用与全案例实践——ADC及其应用29一个三通道A/D转换的范例硬件设计2——通道分配三个模拟信号输入通道选择如下——①PA0——ADC1模拟输入通道1,外部电压②PA1——ADC1模拟输入通道2,系统电源电压③内部通道——ADC1模拟输入通道17,STM32内部参考电压,它的典型值为1.20V——串口选择使用USART1串口1作为转换和处理结果的输出,供上位机显示,以便观察——电源与参考电压处理本例使用的STM32最小系统板是直接使用系统电源3.3V作为AD的参考电压即将——ADC1的外部参考电压的Vrev+通过0电阻直接与VDDA连Vrev-通过0电阻直接与VSSA连什么是0电阻?有啥用?STM32单片机应用与全案例实践——ADC及其应用30一个三通道A/D转换的范例算法设计3算法的核心是基于DMA的ADC,即ADC的转换结果采用DMA的方式被存储,这样可以节省读取转换结果、存储转换结果的时间,提高A/D转换的速度采用DMA方式是STM32的优势特性,它在需要高速采集数据的场合显得十分有用——第一步:正确配置ADC1和DMA必须根据需要配置。本例的配置及其说明参见源程序的注释——第二步:使能ADC1并进行校准——第三步:使能DMA——第四步:软触发或外部触发ADC1,以启动ADC1——第五步:根据DMA的“存储完成否”等标志,读取转换结果并进行相应处理如果采用中断法,则可以将读取、处理放在中断例程中本例采用DMA查询法STM32单片机应用与全案例实践——ADC及其应用31反思与总结关于ADC——1——STM32的ADC有哪些通道?有几种工作模式?——简要分析STM32的ADC的精度和速度能力配不上野心和虚荣心,是所有烦恼的根源你可以什么都想要,但前提是你真的去做替将来的你谢谢现在努力的你TheENDSTM32单片机应用与全案例实践——DAC及其应用32学习目标STM32有12位的DAC外设模块STM32的DACDAC配置DAC应用实例难点——DAC的基本应用重点——DAC的特性与初始化设置STM32单片机应用与全案例实践——DAC及其应用33STM32的DAC及其基本应用STM32的DAC概述1STM32的数字/模拟转换模块DAC是12位数字输入、电压输出的数字/模拟转换器DAC可以配置成8位或者12位模式DAC工作在12位模式时,数据可以设置成左对齐,也可以设置成右对齐可以与DMA控制器配合使用DAC有2个输出通道,每个通道都有单独的转换器————在双DAC模式。在此模式下,可以同步地更新2个通道的输出,这2个通道的转换可以同时进行——独立工作DAC可以通过管脚输入参考电压VREF+以获得更精确的转换结果数字输入经过DAC转换成模拟电压输出,其范围为0到VREF+任一DAC通道管脚上的输出电压与DOR数字量输入之间的关系————DAC输出电压=VREF×DOR/4095一旦使能DAC通道,相应的GPIO管脚(PA4或者PA5)就会自动与DAC的模拟输出相连(DAC_OUTx)为了避免寄生的干扰和额外的功耗,管脚PA4或者PA5在之前应当设置成模拟输入(AIN)。Caution!STM32单片机应用与全案例实践——DAC及其应用34STM32的DAC及其基本应用DAC主要特征2——2个DAC转换器1个输出通道对应1个转换器——8位或者12位单调输出——12位模式下数据左对齐或者右对齐,8位数据右对齐——噪声波形生成、三角波形生成——双DAC通道同时或者分别转换,有同步更新功能——每个通道都有DMA功能——外部触发转换——可外接参考电压VREF+范围为:2.4V≤VREF+≤VDDA(3.3V)STM32单片机应用与全案例实践——DAC及其应用35STM32的DAC及其基本应用DAC配置的基本过程3以通道1为例,其基本过程如下。(1)开启PA口时钟,设置PA4为模拟输入。STM32F1的DAC1通道在PA4上,所以要先使能PORTA的时钟,然后设置PA4为模拟输入。DAC本身是输出,但是为什么端口模式要设置为模拟输入呢?因为一旦使能DACx通道之后,相应的GPIO引脚(PA4或PA5)将自动与DAC的模拟输出相连,设置为输入,是为了避免额外的干扰。(2)使能DAC1时钟。同其他外设一样,使用前必须开启相应的时钟。STM32F1的DAC模块的时钟是由APB1提供的,所以要使能DAC模块的时钟。(3)初始化DAC,设置DAC的工作模式。该部分设置全部通过寄存器DAC_CR设置实现,包括:DAC1通道使能、DAC1通道输出缓存关闭、不使用触发、不使用波形发生器等设置。(4)使能DAC转换通道。初始化DAC之后,要使能DAC转换通道。(5)设置DAC的输出值。完成前面4个步骤的设置,DAC就可以开始工作了。当使用12位右对齐数据格式时,就可以在DAC输出引脚(PA4)上得到不同的电压值。(6)部分应用也可能要读取DAC的数值。STM32单片机应用与全案例实践——DAC及其应用36DAC的配置设备配置解析11.使能DACSTM32F1有两路DAC。DAC的配置界面如图10.2所示。单击DAC,可以看到STM32F103ZET6可使用的DAC通道。如图10.3所示,当选择所需DAC通道后,下方Configuration区域会显示配置信息,右侧芯片会显示所占用引脚,用初始命名格式DAC_OUTx对引脚进行命名。将DAC_CR寄存器中ENx位置位,以启动DAC。DAC启动后,便开始正常工作。ExternalTrigger用于外部触发DAC,勾选该复选框后,右侧芯片引脚PF9高亮显示,并以“DAC_EXTI9”命名。STM32单片机应用与全案例实践——DAC及其应用37DAC的配置设备配置解析22.DAC参数配置DAC参数配置包含两部分:输出缓存器设置与触发方式设置。STM32F1系列单片机的DAC集成了两个输出缓存器,可用于降低输出阻抗,并直接驱动外部负载,而无须添加外部运算放大器。每个DAC通道输出缓存区可以使用DAC_CR寄存器中相应的BOFFx位来启用和禁用。一般将输出缓存器状态配置为使能。但是输出电压不能低于20mV,若需要设计低电压输出,则可以不使能输出缓存器。如图10.4所示,DAC的Configuration区域的ParameterSettings选项卡中显示了DAC两路输出的配置。默认使能DAC输出缓存器。DAC的触发方式可以通过Trigger下拉列表来选择,有定时器触发、软件触发和外部触发三种,用户可以根据自身需求进行配置。注意,触发方式中None(无触发)和Softwaretrigger(软件触发)是有区别的:None表示只在向DAC数据存储器DHR写入数据之后,DAC自动转换一次;Softwaretrigger表示向软件触发寄存器SWTRIGR中写入命令时触发转换(将DOR寄存器中的数据进行转换),但是在这之前需要将数据写入DAC数据存储器DHR。STM32单片机应用与全案例实践——DAC及其应用38DAC的配置设备配置解析33.DMA请求两个DAC通道都具有DMA能力。当DMAENx位置位时,外部触发器(不是软件触发器)触发将引发DAC的DMA请求。然后,将DAC_DHRx寄存器的值传输到DAC_DORx寄存器。DMA请求在Configuration区域的DMASettings选项卡中设置。DAC的DMA参数配置与ADC等其他模块的DMA的参数配置相同,如图10.5所示。STM32单片机应用与全案例实践——DAC及其应用39DAC的配置接口函数1HAL库中DAC的接口函数定义在stm32f1xx_hal_dac.c源文件中,DAC库函数声明与相关的结构体定义在stm32f1xx_hal_dac.h头文件中。本节对用户可用的接口函数进行解析。1.初始化及复位函数函数原型:HAL_DAC_Init(DAC_HandleTypeDef*hdac)应用范例:if(HAL_DAC_Init(&hdac)!=HAL_OK)Error_Handler();STM32单片机应用与全案例实践——DAC及其应用40DAC的配置接口函数2HAL库中DAC的接口函数定义在stm32f1xx_hal_dac.c源文件中,DAC库函数声明与相关的结构体定义在stm32f1xx_hal_dac.h头文件中。本节对用户可用的接口函数进行解析。2.复位函数(将DAC外围寄存器恢复到其默认值或初始状态)函数原型:HAL_DAC_DeInit(ADC_HandleTypeDef*hdac)应用范例:HAL_DAC_DeInit(&hdac);STM32单片机应用与全案例实践——DAC及其应用41DAC的配置接口函数3HAL库中DAC的接口函数定义在stm32f1xx_hal_dac.c源文件中,DAC库函数声明与相关的结构体定义在stm32f1xx_hal_dac.h头文件中。本节对用户可用的接口函数进行解析。3.DAC轮询方式启停(1)启动DAC的通道转换。函数原型:HAL_DAC_Start(DAC_HandleTypeDef*hdac,uint32_tChannel)应用范例:HAL_DAC_Start(&hdac,DAC_CHANNEL_1)//启用DAC输出通道1(2)DAC的通道输出固定数据。输出正弦等波形数据时,需要放在循环中。Data的范围是0~4095。函数原型:HAL_DAC_SetValue(DAC_HandleTypeDef*hdac,uint32_tChannel,uint32_tAlignment,uint32_tData)应用范例:HAL_DAC_SetValue(&hdac,DAC_CHANNEL_1,DAC_ALIGN_12B_R,4095);//DAC1输出3.3V。(3)暂停DAC的通道转换。函数原型:HAL_DAC_Stop(DAC_HandleTypeDef*hdac,uint32_tChannel)应用范例:HAL_DAC_Stop(&hdac,DAC_CHANNEL_1);//停止DAC输出通道1STM32单片机应用与全案例实践——DAC及其应用42DAC的配置接口函数4HAL库中DAC的接口函数定义在stm32f1xx_hal_dac.c源文件中,DAC库函数声明与相关的结构体定义在stm32f1xx_hal_dac.h头文件中。本节对用户可用的接口函数进行解析。4.DAC-DMA方式启停(1)以DMA方式启动DAC的通道。输出转换长度为Length、存放在地址pData中的数据波形。Alignment用于设定输出分辨率与对齐方式,一般采用12位右对齐。函数原型:HAL_DAC_Start_DMA(DAC_HandleTypeDef*hdac,uint32_tChannel,constuint32_t*pData,uint32_tLength,uint32_tAlignment)应用范例:HAL_DAC_Start_DMA(&hdac,DAC_CHANNEL_1,pData,128,DAC_ALIGN_12B_R);//以DMA方式启动DAC1,输出128个数据,存放在首地址为pData的区域。分辨率为12位,右对齐(2)关闭DAC的指定通道的DMA。函数原型:HAL_DAC_Stop_DMA(DAC_HandleTypeDef*hdac,uint32_tChannel)应用范例:HAL_DAC_Stop_DMA(&hdac,DAC_CHANNEL_1);STM32单片机应用与全案例实践——DAC及其应用43DAC的配置接口函数5HAL库中DAC的接口函数定义在stm32f1xx_hal_dac.c源文件中,DAC库函数声明与相关的结构体定义在stm32f1xx_hal_dac.h头文件中。本节对用户可用的接口函数进行解析。5.状态获取(1)读取DAC通道当前输出的数据值。函数原型:HAL_DAC_GetValue(constDAC_HandleTypeDef*hdac,uint32_tChannel)应用范例:HAL_DAC_GetValue(&hdac,DAC_CHANNEL_1);(2)读取DAC当前状态。函数原型:HAL_DAC_GetState(constDAC_HandleTy
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 颈椎牵引标准化作业
- 自行监测方案及数据质量手册
- 客户投诉处理规范执行流程
- 孕期营养补充指导手册
- 增强客户粘性服务策略手册
- 枇杷保花保果疏花疏果技术指南
- 西瓜嫁接育苗技术要点
- 风电场故障检修方案
- 门店疫情防控应急处理手册
- 会员节假日问候话术手册
- SHT 3554-2013 石油化工钢制管道焊接热处理规范
- 特种设备“日管控、周排查、月调度”表格
- JC-T 24-2000合成树脂乳液砂壁状建筑涂料
- 2023年贵州安顺市人民政府办公室所属事业单位选调笔试历年高频考点-难、易错点荟萃附答案带详解
- 智能图书馆导航系统
- 学习《马克思主义基本原理》的心得体会
- 河南理工大学论文答辩ppt模板
- 部编2023版道德与法治六年级下册活动园问题及答案
- 劳动合同劳动合同劳动合同
- 化工企业氯磺酸磺化反应釜爆炸事故案例
- 汽车维修业务接待试题含答案
评论
0/150
提交评论