版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
直接存储器访问DMA原理与应用STM32的DMA01DMA应用实例04DMA配置要点02DMA配置03
目录ContentsSTM32的DMA01PARTDMA的核心概念DMA(DirectMemoryAccess)是一种数据传输技术,允许数据在外设与内存、内存与内存之间直接传输,无需CPU干预。这种技术显著提高了数据传输效率,减少了CPU的负担,使得CPU可以专注于其他复杂任务,从而提升系统整体性能。DMA技术在需要大量数据传输的场景中尤为重要。DMA的主要用途DMA的主要用途在于高效处理数据传输任务。通过DMA,系统可以在不占用CPU资源的情况下完成数据的快速传输,这对于实时性要求高的应用至关重要。例如,在音频处理、图像传输和传感器数据采集等场景中,DMA技术能够确保数据的及时性和准确性,从而提升系统的响应速度和处理能力。DMA的定义与用途DMA控制器的功能框图02PARTSTM32的DMA控制器由多个通道、仲裁器和控制逻辑组成。每个通道负责管理特定外设的内存访问请求,仲裁器则处理不同DMA请求之间的优先级问题。DMA控制器独立于内核(CPU),属于一个单独的外设,其结构简单但功能强大,能够高效地处理数据传输任务。0102DMA控制器的工作原理基于请求和应答机制。当外设需要传输数据时,会向DMA控制器发送请求。DMA控制器收到请求后,向外设发送应答信号,确认请求后启动数据传输。在整个传输过程中,DMA控制器通过总线矩阵协调数据传输,确保数据准确无误地从源地址传输到目标地址,而无需CPU的干预。DMA控制器的硬件组成DMA控制器的工作原理DMA控制器的结构组成DMA的基本原理03PART当外设发送DMA请求时,DMA控制器会接收该请求并启动数据传输。传输过程中,DMA控制器通过AHB总线与总线矩阵协调,将外设的数据直接传输到SRAM内存。整个过程无需CPU参与,从而释放了CPU资源,使其能够处理其他任务。这种高效的数据传输方式显著提高了系统整体性能。数据传输的启动与执行01数据传输完成后,DMA控制器会生成中断请求,通知CPU传输已完成。CPU收到中断请求后,可以执行相应的处理程序,例如处理传输的数据或重新配置DMA通道。DMA控制器还支持半传输中断和传输错误中断,确保数据传输的可靠性和实时性,从而提升系统的稳定性和响应速度。数据传输的完成与中断处理02DMA的数据传输过程DMA控制器的主要特点04PARTSTM32的DMA控制器提供多达12个独立的可配置通道,每个通道都可以根据需要进行配置。这些通道支持软件触发,可以通过软件设置通道的优先级、数据传输方向和数据宽度等参数。这种灵活性使得DMA控制器能够适应不同的应用场景,满足多样化的数据传输需求。通道的独立性与可配置性DMA控制器的仲裁器负责处理多个DMA请求之间的优先级问题。通道的优先级可以通过软件编程设置,分为很高、高、中等和低四个等级。当多个请求具有相同的软件优先级时,硬件仲裁器会根据通道编号决定优先级,确保高优先级的请求能够优先得到处理,从而提高数据传输的效率和可靠性。通道的优先级与仲裁DMA通道的配置与管理DMA的配置要点05PART在配置DMA控制器之前,需要先在RCC设置中使能DMA时钟。STM32的DMA控制器挂在AHB总线上,因此需要确保AHB总线的时钟已经启用。选择合适的DMA通道是配置的关键步骤,每个通道对应特定的外设请求,需要根据实际需求选择合适的通道,以确保数据传输的准确性和高效性。”时钟使能与通道选择配置DMA通道时,需要设置数据传输的方向(外设到内存、内存到外设或内存到内存)和传输模式(正常模式或循环模式)。正常模式适用于单次传输,而循环模式适用于需要连续传输的场合。此外,还需要设置外设和存储器的增量模式、数据宽度以及中断方式,以满足不同的数据传输需求。”数据传输方向与模式设置DMA控制器的配置参数DMA的优先级及其仲裁06PARTDMA控制器的通道优先级可以通过软件编程设置,分为很高、高、中等和低四个等级。每个通道的优先级可以在DMA_CCRx寄存器中设置,这使得开发者能够根据实际需求灵活调整通道的优先级。高优先级的通道能够优先响应DMA请求,从而提高数据传输的效率和实时性。01软件优先级的设置当多个DMA请求具有相同的软件优先级时,硬件仲裁器会根据通道编号决定优先级。较低编号的通道比较高编号的通道具有更高的优先级。这种硬件仲裁机制确保了在软件优先级相同的情况下,通道的优先级能够得到合理分配,从而提高数据传输的效率和可靠性。02硬件优先级的仲裁优先级的设置与管理DMA通道的配置与管理07PART配置DMA通道时,需要设置数据传输的数量和宽度。数据传输数量可以通过DMA_CNDTRx寄存器设置,范围为1到65535。数据传输宽度可以在DMA_CCRx寄存器中设置,支持字节、半字和全字三种模式。这些设置确保了数据传输的准确性和高效性,满足不同应用场景的需求。数据传输数量与宽度设置DMA控制器支持循环模式和存储器到存储器模式。循环模式适用于需要连续传输的场合,如定时器触发DMA实现GPIO口的PWM输出。存储器到存储器模式则适用于内存之间的数据复制,如变量赋值。这些模式的配置可以通过DMA_CCRx寄存器中的相关位进行设置,以满足不同的数据传输需求。循环模式与存储器到存储器模式通道的数据传输配置DMA中断请求的处理08PART中断事件的类型与触发条件DMA控制器支持三种中断事件:传输过半、传输完成和传输错误。这些中断事件可以通过DMA_CCRx寄存器中的相关位进行配置。当传输过半时,半传输标志(HTIF)被置1;传输完成时,传输完成标志(TCIF)被置1;传输错误时,传输出错标志(TEIF)被置1。这些中断事件确保了数据传输的实时性和可靠性。中断处理程序的编写当DMA中断发生时,CPU会执行相应的中断处理程序。开发者需要编写中断处理程序,以处理传输过半、传输完成和传输错误等事件。中断处理程序可以执行数据处理、状态更新或错误处理等操作,从而确保数据传输的准确性和系统的稳定性。合理的中断处理程序设计能够提高系统的响应速度和处理能力。中断事件的触发与处理DMA配置的注意事项09PART1通道冲突与优先级设置在配置DMA通道时,需要注意避免通道冲突。不同的外设请求可能占用同一个DMA通道,导致数据传输错误。开发者需要仔细查阅DMA请求映像表,确保每个外设请求分配到正确的DMA通道。此外,合理设置通道的优先级,可以避免高优先级请求被低优先级请求阻塞,从而提高数据传输的效率。2数据传输模式的选择选择合适的数据传输模式是配置DMA的关键。正常模式适用于单次传输,而循环模式适用于需要连续传输的场合。存储器到存储器模式则适用于内存之间的数据复制。开发者需要根据实际需求选择合适的数据传输模式,以确保数据传输的准确性和高效性,同时减少CPU的负担。配置过程中的常见问题DMA配置010PART1常规DMA配置当不配置与外设通信时,DMA模块只能设置内存到内存。为便于阐述,以下配置了USART1和ADC3两个外设。2DMA中断配置单击NVIC,右侧显示中断配置界面,如图8.6所示。系统默认使能外设到内存的DMA中断,且无法关闭。DMA1通道1为上文配置的MEMTOMEM,勾选后使能中断。右侧可配置优先级,一般保留默认设置。DMA配置2DMA中断配置单击NVIC,右侧显示中断配置界面,如图8.6所示。系统默认使能外设到内存的DMA中断,且无法关闭。DMA1通道1为上文配置的MEMTOMEM,勾选后使能中断。右侧可配置优先级,一般保留默认设置。DMA配置DMA应用实例分析011PART软件设计与实现步骤实现内存到内存传输需要配置DMA控制器,选择合适的DMA通道,并设置数据传输参数。开发者需要编写DMA初始化代码,设置源地址、目标地址和传输长度,然后启动DMA传输。在传输完成后,可以通过中断处理程序处理传输结果,如点亮LED指示灯,以确认传输完成。这种实现方式简单高效,适用于各种大数据量传输场景。应用场景与功能描述内存到内存传输方式适用于需要大量数据复制的场景,如图像处理、数据备份等。通过DMA实现内存到内存的传输,可以避免CPU的干预,从而提高传输速率和运行效率。这种传输方式特别适用于大数据量的处理,能够显著减少CPU的负担,提升系统整体性能。STEP02STEP01内存到内存传输方式应用外设到内存传输方式应用011PART外设到内存传输方式适用于需要从外设读取大量数据的场景,如传感器数据采集、音频输入等。通过DMA实现外设到内存的传输,可以减少CPU的负担,提高数据传输的效率。这种传输方式能够确保数据的实时性和准确性,从而提升系统的响应速度和处理能力。大数据通信中的DMA应用实现外设到内存传输需要配置DMA控制器,选择合适的DMA通道,并设置数据传输参数。开发者需要编写DMA初始化代码,设置外设地址、内存地址和传输长度,然后启动DMA传输。在传输完成后,可以通过中断处理程序处理传输结果,如处理传感器数据或播放音频。这种实现方式能够高效地处理大量数据,满足实时性要求高的应用场景。软件设计与实现步骤应用场景与功能描述DMA配置与调试技巧012PART使用调试工具进行配置验证在配置DMA控制器时,开发者可以使用调试工具(如STM32CubeIDE)进行配置验证。通过调试工具,开发者可以实时监控DMA通道的状态,查看数据传输的进度和结果。这有助于及时发现和解决配置问题,确保DMA传输的准确性和高效性。调试工具还提供了丰富的配置选项,帮助开发者优化DMA配置,提升系统性能。常见问题的排查与解决在DMA配置过程中,开发者可能会遇到通道冲突、传输错误等问题。通过查看DMA状态寄存器和中断标志,开发者可以快速定位问题原因。例如,传输错误可能是由于外设地址或内存地址设置错误导致的,开发者需要检查地址设置是否正确。此外,合理设置通道优先级和传输模式,可以避免数据传输冲突,提高系统稳定性。配置过程中的调试方法DMA技术的未来发展与应用展望013PART随着物联网、人工智能等技术的发展,高速数据传输的需求不断增加。DMA技术作为高效数据传输的重要手段,将在未来得到更广泛的应用。未来的DMA技术将更加智能化,支持更高的数据传输速率和更低的功耗,以满足不断增长的数据处理需求。开发者需要不断学习和掌握新的DMA技术,以适应未来的技术发展。高速数据传输的需求推动DMA技术进步01DMA技术不仅在传统的嵌入式系统中发挥重要作用,还在新兴领域如自动驾驶、智能穿戴设备中展现出广阔的应用前景。在这些领域,DMA技术能够高效处理大量数据,提高系统的实时性和可靠性。开发者可以通过深入研究DMA技术,探索其在新兴领域的应用,为技术创新和产品开发提供支持。DMA技术在新兴领域的应用前景02DMA技术的发展趋势202X谢谢大家主讲人:AiPPT时间:2025.7STM32单片机应用与全案例实践——ADC及其应用33学习目标STM32有12位的ADC外设模块STM32的ADCSTM32外设模块ADC的工作流程与编程要点ADC配置ADC应用实例难点——ADC的基本应用重点——ADC的特性与初始化设置STM32单片机应用与全案例实践——ADC及其应用34STM32的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及其应用35STM32的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及其应用36STM32的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及其应用37STM32的ADC什么是ADC的规则组、注入组——23——内部通道的特性内部通道温度传感器与通道ADCx_IN16相连接内部参照电压VREFINT与ADCx_IN17相连接可以按注入或规则通道对这两个内部通道进行转换但必须要注意——温度传感器和VREFINT只能出现在ADC1中——关于规则组、注入组的举例系统要正常采集8通道温度,但是又要适时监控一下湿度,那么,这个湿度ADC(采集)就可以放在注入组中,通过合适的触发启动转换。一旦启动注入组转换,规则组转换则被暂停,然后等待注入组转换完成后,规则组再继续进行转换用更通俗的话说,在这系统中,规则组相当于是主业,而注入组相当于副业规则组、注入组?行车道、超车道?STM32单片机应用与全案例实践——ADC及其应用38STM32外设模块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及其应用39STM32外设模块ADC的工作流程与编程要点ADC编程的要点2在开发ADC应用程序时,需要设置ADC转换模式、外部触发模式、数据对齐方式。1.ADC转换模式ADC转换模式有10种,通常选择ADC_Mode_Independent(独立模式)。其他常用的模式有ADC_Mode_Independent、ADC_Mode_RegInjecSimult、ADC_ExternalTrigConv等。STM32单片机应用与全案例实践——ADC及其应用40STM32外设模块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及其应用41STM32外设模块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及其应用42STM32的ADC特性及其基本应用ADC编程的两点提醒5——扩展符号位注入组和规则组的扩展符号位在处理上存在差异,这一点要加以注意——转换结果存储多通道数据转换和传输时这一点也注意若一个数组为ADC_ValueTab[4],且设置了两个通道:通道1和通道2则转换结束后——ADC_ValueTab[0]和ADC_ValueTab[2]存储的是通道1的数据ADC_ValueTab[1]和ADC_ValueTab[3]存储的是通道2的数据如果数组容量更大,则依次类推这是为什么?STM32单片机应用与全案例实践——ADC及其应用43ADC的配置设备配置解析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及其应用44ADC的配置设备配置解析22.模式选择(ADCs_Common_Settings)Mode栏用于选择ADC模式,配置ADC为独立模式或多模式工作。在寄存器中,模式由ADC1_CR1寄存器中的DUALMOD[2:0]位决定。若选择独立模式(IndependentMode),则双ADC模式失效,每个ADC接口独立工作。若选择组合规则+注入同步模式(Dualcombinedregularsimultaneous+injectedsimultaneousmode),则可以中断规则组的同步转换,并启动注入组的同步转换。此时两个ADC的通道需配置完全相同的采样时间。若选择规则同步转换+注入交替转换模式(Dualregularsimultaneous+alternatetriggermode),可以中断规则组的同步转换,并启动注入组的交替转换。注入组触发事件到达后立即启动注入组交替转换。如果规则组转换正在运行,为了确保注入组转换后的同步,两个(主/从)ADC的常规转换将停止,并在注入组转换结束时同步恢复。此时两个ADC的通道应该配置完全相同的采样时间。注入同步转换的快速或慢速交替模式是交错模式和注入同步模式的结合。STM32单片机应用与全案例实践——ADC及其应用45ADC的配置设备配置解析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及其应用46ADC的配置设备配置解析44.规则组配置(ADC_Regular_ConversionMode)图9.9所示为规则组配置。在使能规则组转换后将弹出如下选项:NumberOfConversion(转换数量),用于设置规则组转换的数量;ExternalTriggerConversionSource(转换外部触发源),用于设置规则组采样触发方式,可以选择软件触发、定时器触发等;为获取更精确的采样周期,可由定时器触发ADC。Rank(等级)用于设置通道转换顺序,当前设置表示首先转换Channel0再转换Channel1,两者采样时间均为1.5个周期。STM32单片机应用与全案例实践——ADC及其应用47ADC的配置设备配置解析55.注入组配置(ADC_Injected_ConversionMode)图9.10所示为注入组配置。在使能注入组转换后会弹出如下选项:NumberOfConversions和ExternalTriggerSource,与规则组类似;InjectedConversionMode(注入转换模式)可选择DiscontinuousMode(触发式注入)和AutoInjectedMode(自动式注入),触发式注入需要将ADC_CR1的JAUTO位清零。该方式会在规则组转换时,复位当前转换并单次扫描转换注入组。注入组转换结束后,恢复中断前正在转换的规则组。自动式注入需要将JAUTO位置位,注入组将在规则组后自动转换,此时外部触发失效。STM32单片机应用与全案例实践——ADC及其应用48ADC的配置设备配置解析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及其应用49ADC的配置设备配置解析77.ADC中断配置STM32F系列ADC1和ADC2中断映射到同一个中断向量上。ADC3中断映射到一个单独的中断向量上。勾选Enabled复选框开启中断,如图9.12所示。ADC中断有三种方式:规则组转换结束、注入组转换结束和模拟看门狗状态位置位。ADC3的中断在ADC3→NVICSettings中设置。STM32单片机应用与全案例实践——ADC及其应用50ADC的配置设备配置解析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及其应用51ADC的配置接口函数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及其应用52ADC的配置接口函数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及其应用53ADC的配置接口函数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及其应用54ADC应用实例单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及其应用55ADC应用实例单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及其应用56ADC应用实例单ADC单通道应用示例32.软件设计具体操作步骤如下。(3)生成工程代码。单击“保存”按钮,IDE弹出是否生成代码文件的提示,选择生成即可。(4)编写应用程序。STM32单片机应用与全案例实践——ADC及其应用57ADC应用实例单ADC多通道应用示例11.功能描述在实际应用中,往往需要使用ADC的多路通道。ADC多通道采集模式有两种:阻塞模式与DMA模式。在阻塞模式下,若未完成转换,则进程挂起直到完成再进行其他操作,因此当通道数量较多时,会比较耗时或影响整体时序。本实例使用DMA模式对单一ADC两路通道(一路外部通道、一路内部温度测量通道)进行读取。注意:连接外部电路时,需注意电压、电流等参数,以防单片机击穿。还需注意“共地”,即通过杜邦线等方式共用一块地平面,使待测电路与单片机电路的基准源相同,否则会使A/D数据失真。STM32单片机应用与全案例实践——ADC及其应用58ADC应用实例单ADC多通道应用示例22.软件设计具体操作步骤如下。(1)新建STM32CubeIDE工程,选择MCU。(2)ADC功能参数设置。(3)生成工程代码。单击“保存”按钮,IDE弹出是否生成代码文件的提示,选择生成即可。(4)编写应用程序。本实例需要在DMA传输结束后,对温度AD值进行处理。为提升代码运行效率,本实例将在中断服务函数中编写温度转换代码。STM32单片机应用与全案例实践——ADC及其应用59延伸阅读——一个三通道A/D转换的范例功能要求1——基于DMA实现三个通道的AD转换一个通道采集外部的输入电压一个通道采集系统电源电压一个通道采集内部参考电压。——数字滤波三个通道均采用数字滤波,即连续采集10次,取其平均值作为转换结果——采用查询DMA事件信号的方式读取数据并处理——转换结果标定——1通常采用系统电源3.3V作为参考电压,外部通道的电压V1可用公式表示此法的不好之处在于,每个系统要根据自身的电源电压,调整程序中的V3.30。由于每个系统的电源电压不可能相同,故必须先测量该值,在每个程序中使用该值,很麻烦,所以这种方法对于批量生产不是很合适课后延伸阅读——数字滤波的常用方法有哪些?STM32单片机应用与全案例实践——ADC及其应用60一个三通道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及其应用61一个三通道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及其应用62一个三通道A/D转换的范例算法设计3算法的核心是基于DMA的ADC,即ADC的转换结果采用DMA的方式被存储,这样可以节省读取转换结果、存储转换结果的时间,提高A/D转换的速度采用DMA方式是STM32的优势特性,它在需要高速采集数据的场合显得十分有用——第一步:正确配置ADC1和DMA必须根据需要配置。本例的配置及其说明参见源程序的注释——第二步:使能ADC1并进行校准——第三步:使能DMA——第四步:软触发或外部触发ADC1,以启动ADC1——第五步:根据DMA的“存储完成否”等标志,读取转换结果并进行相应处理如果采用中断法,则可以将读取、处理放在中断例程中本例采用DMA查询法STM32单片机应用与全案例实践——ADC及其应用63反思与总结关于ADC——1——STM32的ADC有哪些通道?有几种工作模式?——简要分析STM32的ADC的精度和速度能力配不上野心和虚荣心,是所有烦恼的根源你可以什么都想要,但前提是你真的去做替将来的你谢谢现在努力的你TheENDSTM32单片机应用与全案例实践——DAC及其应用64学习目标STM32有12位的DAC外设模块STM32的DACDAC配置DAC应用实例难点——DAC的基本应用重点——DAC的特性与初始化设置STM32单片机应用与全案例实践——DAC及其应用65STM32的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及其应用66STM32的DAC及其基本应用DAC主要特征2——2个DAC转换器1个输出通道对应1个转换器——8位或者12位单调输出——12位模式下数据左对齐或者右对齐,8位数据右对齐——噪声波形生成、三角波形生成——双DAC通道同时或者分别转换,有同步更新功能——每个通道都有DMA功能——外部触发转换——可外接参考电压VREF+范围为:2.4V≤VREF+≤VDDA(3.3V)STM32单片机应用与全案例实践——DAC及其应用67STM32的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及其应用68DAC的配置设备配置解析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及其应用69DAC的配置设备配置解析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及其应用70DAC的配置设备配置解析33.DMA请求两个DAC通道都具有DMA能力。当DMAENx位置位时,外部触发器(不是软件触发器)触发将引发DAC的DMA请求。然后,将DAC_DHRx寄存器的值传输到DAC_DORx寄存器。DMA请求在Configuration区域的DMASettings选项卡中设置。DAC的DMA参数配置与ADC等其他模块的DMA的参数配置相同,如图10.5所示。STM32单片机应用与全案例实践——DAC及其应用71DAC的配置接口函数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及其应用72DAC的配置接口函数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及其应用73DAC的配置接口函数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及其应用74DAC的配置接口函数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及其应用75DAC的配置接口函数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_HandleTypeDef*hdac)应用范例:HAL_DAC_GetState(&hdac);STM32单片机应用与全案例实践——DAC及其应用76STM32的DAC应用实例DAC输出正弦波11.功能描述正弦波具有周期性和简谐振动的特点,在各领域都有广泛应用,如电力系统、音频系统。正弦波振幅在时间轴上按照正弦函数变化。振幅变化可以用如下公式描述:
式中,A为振幅;ω为圆频率;t为时间;φ为初始相位。为使DAC输出光滑、连续的正弦波,需要大量采样点。可以通过MATLAB对正弦波进行采样,采样代码如下。该代码的运行结果是1个周期的正弦波,采样点数是32个。用户可以根据需要,自行调整正弦波相关参数。N=32;% 采样点数n=0:N-1;t=n/N;y=int16(2047.5*sin(2*pi*t)+2047.5);STM32单片机应用与全案例实践——DAC及其应用77STM32的DAC应用实例DAC输出正弦波22.软件设计具体操作步骤如下。(1)新建STM32CubeIDE工程,选择MCU。(2)DAC功能参数设置。第一步:配置RCC。第二步:配置DAC。第三步:配置系统时钟和ADC时钟。(3)生成工程代码。单击“保存”按钮,IDE弹出是否生成代码文件的提示,选择生成即可。(4)编写应用程序。STM32单片机应用与全案例实践——DAC及其应用78STM32的DAC应用实例DAC输出三角波11.功能描述三角波是一种周期信号,其波形类似于等腰直角三角形,在电子学和通信领域中非常常见,在音频合成、图像处理和测试设备中都有广泛应用。在音频合成中,可以将一系列三角波叠加来模拟复杂的声音波形。在图像处理中,可以使用三角波来产生灰度条纹,以检查扫描仪或打印机的性能。在测试仪器中,可以使用三角波来测试信道带宽、进行光谱分析和时序测量等。三角波可以由不同方式产生,如RC电路、IC和计算机软件等。在本实例中,将使用STM32的DAC自带的波形发生器生成三角波。在对应寄存器中,需要将WAVEx[1:0]位设置为“10”,选择DAC生成三角波;通过DAC_CR寄存器中的MAMPx[3:0]位配置三角波振幅。在每个触发器事件之后,内部的三角波计数器等待3个APB1时钟周期后累加1。计数器的值与DAC_DHRx寄存器的数值相加并丢弃溢出位后写入DAC_DORx寄存器。在传入DAC_DORx寄存器的数值小于MAMP[3:0]位定义的最大振幅时,三角波计数器逐步累加。一旦达到设置的最大幅度,计数器的值就开始递减,达到0后再开始累加,周而复始。STM32单片机应用与全案例实践——DAC及其应用79STM32的DAC应用实例DAC输出三角波22.软件设计具体操作步骤如下。(1)新建STM32CubeIDE工程,选择MCU。(2)DAC功能参数设置。第一步:配置RCC。第二步:配置DAC。使能DAC1,操作步骤同10.3.1节对应部分。本实例使用硬件生成三角波,DAC配置如图10.8所示。第三步:配置触发源TIM2。在图10.9所示界面中,单击Timers目录下的TIM2;在TIM2的Mode选项中配置时钟源(ClockSource)为内部时钟(InternalClock)。设置后即使能TIM2。(3)生成工程代码。单击“保存”按钮,IDE弹出是否生成代码文件的提示,选择生成即可。(4)编写应用程序。STM32单片机应用与全案例实践——DAC及其应用80STM32的DAC应用实例经验教训——3DMA的通道选择——在实验中,曾经走了一段弯路,那就是DMA的通道对应问题,DMAx的有严格的对应外设例如DMA2的通道4对应DAC的通道2,而DAC的通道1只能对应DMA的通道3在ST的官方使用手册里说的很清楚,具体可参阅“STM32F10xxx参考手册”的“9.3.7DMA请求映像”但是在具体程序实现的时候往往会被忽略,尤其是从别人那里借鉴来的程序,特别要注意调整程序的时候要系统联动STM32单片机应用与全案例实践——DAC及其应用81反思与总结关于DAC————STM32的DAC有几个?能产生哪些波形?——简要DAC的配置要点能力配不上野心和虚荣心,是所有烦恼的根源你可以什么都想要,但前提是你真的去做替将来的你谢谢现在努力的你TheENDSTM32Flash存储器架构与应用目录ContentsSTM32Flash存储器概述01Flash模块的组织关系02STM32的Flash架构03Flash的相关操作04Flash的解锁与上锁05Flash的编程与擦除06Flash的擦除操作07选项字节编程08Flash接口函数09Flash解锁与上锁函数10Flash擦除函数11Flash应用实例12Flash实验结果与验证13Flash应用总结与展望14STM32Flash存储器概述PowerpointDesignPART01常见存储器分类嵌入式系统中常见的存储器主要包括ROM、RAM和Flash三种类型。ROM具有断电保持能力,用于存储程序代码和不常修改的数据;RAM作为临时数据存储媒介,读写速度快但断电后数据丢失;Flash则结合了ROM的断电保持和RAM的可擦写特性,广泛应用于需要频繁读写且需保持数据的场景。存储器特性对比不同存储器在特性和应用场景上存在显著差异。ROM适合存储固定程序和数据,RAM适用于临时数据处理,而Flash则在需要持久化存储且支持擦写操作的场景中表现突出。理解这些差异有助于在嵌入式系统设计中合理选择存储器类型,优化系统性能和成本。嵌入式系统中的存储器类型Flash模块的组织关系PowerpointDesignPART02页的定义与作用页是Flash存储器中的基本存储单元,每一页可以存储固定容量的数据。页的大小因Flash型号不同而有所差异,通常以KB为单位。页作为最小的擦写单元,其设计使得Flash存储器在数据管理和操作上更加高效,能够满足不同应用场景下的存储需求。扇区与块的关系扇区和块是Flash存储器中更高层次的存储单元。扇区通常由多个页组成,块则由多个扇区构成。这种层次化的组织结构不仅提高了存储管理的灵活性,还优化了数据读写和擦除的效率。理解页、扇区和块的关系对于高效使用Flash存储器至关重要。页、扇区和块的概念STM32的Flash架构PowerpointDesignPART03STM32的Flash架构主要由主存储块、信息块和Flash接口寄存器组成。主存储块用于存储用户程序和数据,信息块则包含系统内存和选项字节,用于存储配置信息和系统参数。这种分块设计使得Flash存储器在功能划分上更加明确,便于管理和维护。主存储块与信息块Flash接口寄存器是STM32Flash架构中的重要组成部分,用于控制Flash的操作和状态。这些寄存器包括访问控制寄存器、键寄存器、状态寄存器等,通过配置这些寄存器可以实现对Flash的读写、擦除和保护等操作。理解这些寄存器的功能和使用方法是掌握Flash操作的关键。Flash接口寄存器0102Flash架构组成Flash的相关操作PART04读接口与预取存储器Flash的读操作通过专用的读接口实现,该接口包括读控制器和AHB接口。预取存储器作为读接口的一部分,能够提前加载CPU需要的数据,提高读取速度。通过合理配置预取控制器,可以在不同系统时钟频率下优化Flash的读取性能,满足嵌入式系统对数据访问速度的需求。读操作注意事项在进行Flash读操作时,需要注意系统时钟频率对读取速度的影响。当SYSCLK频率低于24MHz时,可以启用预取缓冲区以提高读取效率。此外,还需要考虑AHB时钟的分频设置,确保Flash访问在合适的时钟周期内完成,避免数据读取错误或延迟。Flash读操作Flash的解锁与上锁PART05解锁后的操作限制解锁后的Flash控制器允许进行擦写操作,但需要注意操作的时效性。在解锁状态下,应尽快完成所需的擦写操作,并及时上锁以防止意外写入或数据损坏。此外,解锁状态下的Flash控制器对错误操作更加敏感,需要严格按照操作规范进行,避免因操
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 满意度调查反馈处理规范
- 小麦赤霉病防控应急技术方案
- 客诉危机公关处理应急手册
- 炼化装置爆炸事故处置方案
- 现场安全警示标识设置规范
- 厂区工作场所卫生管理考核标准
- 牛羊越冬保膘饲养方案
- 节后复工安全教育实施方案
- 风力发电运输组织方案
- 风电场夜间高空作业防护方案
- 云南省曲靖一中2026届高三年级教学质量检测(七)语文+答案
- 2025年浙江宁波市慈溪市国有企业招聘工作人员面谈笔试历年常考点试题专练附带答案详解
- 2026来凤同风建筑工程有限责任公司招聘项目经理等工作人员2人笔试备考试题及答案解析
- 2026年事业单位面试中的公基热点预测
- 2026年湖南省安全员-C2证题库(附答案)
- 2026智能工厂梯度培育行动专项申报解读及建设方案
- 2026届西藏自治区拉萨市高三下学期第二次联考数学试卷(解析版)
- 2026届浙江省杭州市高三二模英语试题(含答案和音频)
- 2026届江苏省南京市、盐城市高三一模物理卷(含答案)
- 巴楚钒钛磁铁矿选矿项目(600万吨-年)环境影响报告书
- 排水管网清淤疏通方案(技术方案)
评论
0/150
提交评论