STM32单片机应用与全案例实践(第2版)课件 第7、8章 TIMER与PWM及其应用、直接存储器访问DMA_第1页
STM32单片机应用与全案例实践(第2版)课件 第7、8章 TIMER与PWM及其应用、直接存储器访问DMA_第2页
STM32单片机应用与全案例实践(第2版)课件 第7、8章 TIMER与PWM及其应用、直接存储器访问DMA_第3页
STM32单片机应用与全案例实践(第2版)课件 第7、8章 TIMER与PWM及其应用、直接存储器访问DMA_第4页
STM32单片机应用与全案例实践(第2版)课件 第7、8章 TIMER与PWM及其应用、直接存储器访问DMA_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

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

文档简介

第7章TIMER与PWM及其应用定时器的工作原理及其基本应用定时器的计数功能PWM定时器配置重点——定时器的工作原理难点——定时器的工作模式、特性设置、参数计算TIMER与PWM及其应用1主要接口函数定时器应用实例关于STM32的定时器的概况STM32最多达11个定时器,其中2个为高级控制定时器,4个为普通定时器和2个为基本定时器,2个看门狗定时器和1个SysTick滴答定时器高级控制定时器——TIM1、TIM8通用定时器——TIM2~TIM5,超大容量产品还有通用定时器TIM9~TIM14基本定时器——TIM6和TIM7STM32定时器的分类高级控制定时器——功能最强,可以实现所有其他定时器的所有功能,在APB2总线上3对互补PWM,可用于电机控制通用定时器——功能次之。在APB1总线上基本定时器——功能最简单。在APB1总线上STM32定时器的特性重点学习TIMER与PWM及其应用2定时器的工作原理及其基本应用通用定时器的核心是一个通过可编程预分频器驱动的16位自动装载计数器。通俗地讲,就是按一定的频率计数的计数器。计数到预设值,则置位相关标志、输出信号切换、触发中断,同时,自动重装预设值。它适用于多种场合,包括测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)STM32通用定时器的原理STM32通用定时器的时钟高级控制定时器——由APB2输出产生通用定时器、基本定时器——由APB1输出产生定时器的时钟不是直接来自APB1或APB2,而是来自于输入为APB1或APB2的一个倍频器。通用定时器的计数用时钟是来自于输入为APB1的一个倍频器。为什么要注这样?TIMER与PWM及其应用3定时器的工作原理及其基本应用STM32通用定时器的时钟当APB1的预分频系数为1时,这个倍频器不起作用,定时器的时钟频率等于APB1的频率;当APB1的预分频系数为其它数值(即预分频系数为2、4、8或16)时,这个倍频器起作用,定时器的时钟频率等于APB1的频率两倍。APB1不但要为TIM2~7提供时钟,而且还要为其它外设提供时钟;设置这个倍频器可以在保证其它外设使用较低时钟频率时,TIM2~7仍然能够得到较高的时钟频率(计数频率)举例说明——假定AHB=36MHz,因为APB1允许的最大频率为36MHz,所以APB1的预分频系数可以取任意数值:当预分频系数=1时,APB1=36MHz,TIM2~7的时钟频率=36MHz(倍频器不起作用);当预分频系数=2时,APB1=18MHz,在倍频器的作用下,TIM2~7的时钟频率=36MHz。当AHB=72MHz时,APB1的预分频系数必须大于2,因为APB1的最大频率只能为36MHz。如果APB1的预分频系数=2,则因为这个倍频器,TIM2~7仍然能够得到72MHz的时钟频率。TIMER与PWM及其应用4定时器的工作原理及其基本应用周期的设置是关键。定时器的本质是计数器,即对一定周期(频率)的脉冲进行计数,计数方式可为向上计数、也可向下计数,计数到了则溢出使输出信号翻转。周期设置的重点有两个方面:——是计数用的脉冲的频率(周期)设定——是计数值的设定。对于STM32的固件库而言,即为设置TIMx的PSC(预分频值)和ARR(自动重装溢出值),前者就是对定时器所用的时钟进行分频,后者就是设置计数目标。STM32通用定时器的基本应用——定时周期设置①

TIM_TimeBaseStructure.TIM_Prescaler=72-1;//必须减1,因为在内部计算时自动加1②

TIM_TimeBaseStructure.TIM_Period=2000-1;//自动重装溢出值如果定时器所用时钟为72MHz,预分频71+1次,得到TIM计数时钟频率为1MHz。计数长度(自动重装溢出值)为1999+1=2000,因此,得定时周期=2ms(对应频率1M/2000=500Hz的倒数

)Caution!TIMER与PWM及其应用5定时器的工作原理及其基本应用以通用定时器TIM2为例,基本的配置要点如下:——选择时钟来源——选择计数器模式——程序步骤PSC(预分频值)和ARR(自动重装溢出值),前者就是对定时器所用的时钟进行分频,后者就是设置计数目标。STM32通用定时器的基本应用——配置要点——内部时钟(CK_INT)——外部时钟模式1:外部输入脚(TIx)——外部时钟模式2:外部触发输入(ETR)——内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器,例如,可以配置定时器TIM1作为另一个定时器TIM2的预分频器。使用系统默认时钟,即72M,则APB2为72M、APB1为36M(即2分频)定时器TIM2的使用倍频特性,得到计数频率:72MTIMER与PWM及其应用6定时器的工作原理及其基本应用以通用定时器TIM2为例,基本的配置要点如下:——选择时钟来源——选择计数器模式——程序步骤PSC(预分频值)和ARR(自动重装溢出值),前者就是对定时器所用的时钟进行分频,后者就是设置计数目标。STM32通用定时器的基本应用——配置要点TIM2-TIM5可以有向上计数、向下计数、向上向下双向计数三种计数模式——向上计数模式中,计数器从0计数到自动重装溢出值(TIMx_ARR计数器内容),然后重新从0开始计数并且产生一个计数器溢出事件——向下计数模式中,计数器从自动装入的值(TIMx_ARR)开始向下计数到0,然后从自动装入值重新开始,并产生一个计数器向下溢出事件——中央对齐模式(向上/向下计数),是计数器从0开始计数到自动装入的值-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数TIMER与PWM及其应用7定时器的工作原理及其基本应用以通用定时器TIM2为例,基本的配置要点如下:——选择时钟来源——选择计数器模式——程序步骤PSC(预分频值)和ARR(自动重装溢出值),前者就是对定时器所用的时钟进行分频,后者就是设置计数目标。STM32通用定时器的基本应用——配置要点第一步:配置系统时钟;

所有涉及的外设的时钟第二步:配置NVIC;

中断及其使能第三步:配置GPIO;

所用的GPIO(根据需要,这一步不是必须的)第四步:配置TIMER。

所用的定时器配置

TIMER与PWM及其应用8定时器的计数器功能及其应用把STM32的定时器内部结构简化为下图——对内部时钟计数是典型的定时器对外部脉冲计数可以理解其为定时器,也可以视其为计数器从图中可以看出——可以对ETR引脚输入脉冲计数——也可以对CHx引脚输入的脉冲计数当然两者特性和使用要求不一样STM32通用定时器的计数器功能——原理这些特性及其设置,请你认真查阅ST官方手册或其他资料,消化它!TIMER与PWM及其应用9定时器的计数器功能及其应用TIM2作脉冲计数器,脉冲信号连接到PA0引脚,就是TIM2的时钟输入引脚。以下是STM32F10xVxT6中的TIM2的外部时钟输入端:T2_CH1_ETRSTM32通用定时器的计数器功能——举例说明主要步骤——1)配置相应的GPIO引脚2)配置TIM2定时器的有关特性和参数3)使能定时器(如果采用中断法,则要使能定时器中断,设置优先级,自定义中断函数4)采用中断法或查询法读取计数值TIMER与PWM及其应用10STM32定时器的PWM及其应用11.什么是“PWM”脉宽调制(PWM,PulseWidthModulation)是脉冲宽度调制的简称,被广泛应用在从测量、通信到功率控制与变换的许多领域中。随着电子技术的发展,出现了多种PWM技术,其中包括:相电压控制PWM、脉宽PWM法、随机PWM、SPWM法、线电压控制PWM等。它是把每一脉冲宽度均相等的脉冲列作为PWM波形,通过改变脉冲列的周期可以调频,通过改变脉冲的宽度或占空比可以调压,如果采用适当控制方法即可使电压与频率协调变化,从而实现通过调整PWM的周期、PWM的占空比而达到改变电压、或电流的目的。占空比(DutyCycle)的含义:在一串理想的脉冲序列(如方波)中,正脉冲的持续时间与脉冲总周期的比值。例如:脉冲宽度1μs,信号周期4μs的脉冲序列占空比为0.25。2.基本应用PWM的应用十分广泛。——直流电机调速——LED发光二极管亮度调节——变频调速STM32定时器的PWM实现——一般原理各自的原理又是什么?TIMER与PWM及其应用11STM32定时器的PWM及其应用11.STM32的PWM原理STM32单片机的定时器中的计数单元对一定频率的时钟进行计数,当计数值达到某个设定值时,某一对应的引脚的输出状态进行翻转(例如:由高电平翻转为低电平),然后直到计数单元溢出,输出状态再次翻转回到原始状态。周而复始显然,在计数频率一定的情况下,改变计数值,就能改变脉冲宽度,即PWM其实PWM就是定时器的一个比较功能而已2.两个相关概念——输出通道:就是PWM波形的输出引脚,STM32单片机的每个定时器通常都有对应的4个输出通道,即:TIMx_CHX——互补输出:互补输出是针对高端与低端开关提供交替驱动所必需的信号。例如,无刷直流电机(BrushlessDirectCurrentMotor,BLDCM)马达每转一圈,每个相位的驱动电流方向便会改变两次。这必须使连接在该相位端的驱动电压改变方向。STM32定时器的PWM实现——STM32定时器的PWMTIMER与PWM及其应用12STM32定时器的PWM及其应用13.STM32的PWM的三个基本步骤——配置输出通道:选择使用某个通道或某几个通道作为PWM功能的定时器的输出通道,那么对应的引脚(其实就是GPIO)必须进行时钟和引脚输出方式配置PWM输出口要配置为复用推挽输出GPIO_Mode_AF_PP(也许还会使用重映射)还记得它吗?——配置定时器:设置TIMx定时器的相关寄存器。主要是设置的ARR和PSC。这部分配置与前述内容没有本质差异。这一步设置PWM波形的周期(频率)——配置PWM模式:设置相关引脚为PWM模式(默认是冻结的)。通过函数TIM_OC1Init()~TIM_OC4Init(),不同通道的设置函数是不同的。STM32定时器的PWM实现——STM32定时器的PWMTIMER与PWM及其应用13定时器配置以高级定时器TIM1为例进行分析。单击TIM1,右侧显示可配置信息,如图7.5所示。定时器模式TIMER与PWM及其应用14在Mode选项下,从上往下配置的内容分别为:SlaveMode(从模式)TriggerSource(触发源)ClockSource(时钟源)Channelx(通道x)CombinedChannels(结合通道)定时器配置可以通过设置内部时钟等方式启用定时器。启用后,下方将弹出三个可设置选项卡,分别是UserConstants、NVICSettings和DMASettings,如图7.6所示。定时器参数TIMER与PWM及其应用15在Configuration区域的UserConstants下,ParameterSettings即为定时器参数设置,从上往下为计数设置(CounterSettings)和触发输出参数设置[TriggerOutput(TRGO)Parameters]。用预分频(PSC)和计数周期(ARR)计算溢出时间的公式如下:

定时器配置单击图7.6中的NVICSettings选项卡,下方显示可以启用的定时器中断,如图7.7所示。定时器中断TIMER与PWM及其应用16由图7.7可知,定时器中断有四种触发方式,分别是溢出中断、更新中断、触发与传输中断、捕获比较中断,可根据需要选用。主要接口函数定时器的HAL库接口函数定义在:stm32f1xx_hal_tim.c和stm32f1xx_hal_tim_ex.c两个源文件中。定时器库函数声明与相关的结构体定义则在:stm32f1xx_hal_tim.h和stm32f1xx_hal_tim_ex.h两个头文件中。本节只对主要函数进行解析。TIMER与PWM及其应用17主要接口函数1.非中断方式定时器启停TIMER与PWM及其应用18(1)普通方式启动。函数原型:HAL_StatusTypeDefHAL_TIM_Base_Start(TIM_HandleTypeDef*htim)功能描述:以普通方式启动指定定时器。(2)停止定时器。函数原型:HAL_StatusTypeDefHAL_TIM_Base_Stop(TIM_HandleTypeDef*htim)功能描述:停止定时器。主要接口函数2.中断方式定时器启停TIMER与PWM及其应用19(1)中断方式启动。函数原型:HAL_StatusTypeDefHAL_TIM_Base_Start_IT(TIM_HandleTypeDef*htim)功能描述:以中断方式启动定时器。(2)停止定时器中断。函数原型:HAL_StatusTypeDefHAL_TIM_Base_Stop_IT(TIM_HandleTypeDef*htim)主要接口函数1.比较输出的启动、关闭比较输出TIMER与PWM及其应用20(1)启动定时器的比较输出。函数原型:HAL_StatusTypeDefHAL_TIM_OC_Start(TIM_HandleTypeDef*htim,uint32_tChannel)功能描述:启动定时器的指定通道的比较输出。(2)关闭定时器的比较输出。函数原型:HAL_StatusTypeDefHAL_TIM_OC_Stop(TIM_HandleTypeDef*htim,uint32_tChannel)功能描述:关闭定时器的指定通道的比较输出。主要接口函数2.比较输出中断的启动、关闭比较输出TIMER与PWM及其应用21(1)启动定时器的比较输出中断。函数原型:HAL_StatusTypeDefHAL_TIM_OC_Start_IT(TIM_HandleTypeDef*htim,uint32_tChannel)功能描述:启动定时器的指定通道的比较输出中断。(2)关闭定时器的比较输出中断。函数原型:HAL_StatusTypeDefHAL_TIM_OC_Stop_IT(TIM_HandleTypeDef*htim,uint32_tChannel)功能描述:关闭定时器的指定通道的比较输出中断。主要接口函数3.比较输出DMA的启动、关闭比较输出TIMER与PWM及其应用22(1)启动定时器的比较输出DMA。函数原型:HAL_StatusTypeDefHAL_TIM_OC_Start_DMA(TIM_HandleTypeDef*htim,uint32_tChannel)功能描述:启动定时器的指定通道的比较输出DMA。(2)关闭定时器的比较输出DMA。函数原型:HAL_StatusTypeDefHAL_TIM_OC_Stop_DMA(TIM_HandleTypeDef*htim,uint32_tChannel)功能描述:关闭定时器的指定通道的比较输出DMA。主要接口函数1.非中断方式的PWM输出PWM输出TIMER与PWM及其应用23(1)启动PWM输出。函数原型:HAL_StatusTypeDefHAL_TIM_PWM_Start(TIM_HandleTypeDef*htim,uint32_tChannel)功能描述:启动指定通道的PWM输出。(2)停止PWM输出。函数原型:HAL_StatusTypeDefHAL_TIM_PWM_Stop(TIM_HandleTypeDef*htim,uint32_tChannel)功能描述:停止指定通道的PWM输出。主要接口函数1.非中断方式的输入捕获输入捕获TIMER与PWM及其应用24(1)启动输入捕获。函数原型:HAL_StatusTypeDefHAL_TIM_IC_Start(TIM_HandleTypeDef*htim,uint32_tChannel)功能描述:启动指定通道的输入捕获。(2)停止输入捕获。函数原型:HAL_StatusTypeDefHAL_TIM_IC_Stop(TIM_HandleTypeDef*htim,uint32_tChannel)功能描述:停止指定通道的输入捕获。主要接口函数2.中断方式的输入捕获输入捕获TIMER与PWM及其应用25(1)启动中断方式的输入捕获。函数原型:HAL_StatusTypeDefHAL_TIM_IC_Start_IT(TIM_HandleTypeDef*htim,uint32_tChannel)功能描述:启动指定通道的中断方式的输入捕获。(2)停止中断方式的输入捕获。函数原型:HAL_StatusTypeDefHAL_TIM_IC_Stop_IT(TIM_HandleTypeDef*htim,uint32_tChannel)功能描述:停止指定通道的中断方式的输入捕获。定时器应用实例本实例使用定时器中断控制LED亮灭,每隔1s变换一次状态。选用定时器TIM1。定时器控制LEDTIMER与PWM及其应用26(1)新建STM32CubeIDE工程,选择MCU。(2)时钟与引脚功能配置:TIM1挂载在APB2上,设置APB2的频率为8MHz。配置RCC、GPIO引脚,具体的配置过程参见本书GPIO相关章节,本实例使用LED0,对应的物理引脚为PB5。(3)配置定时器:按照图7.8所示的①②③顺序,依次单击TIM1,设置时钟源(ClockSource)为内部时钟,以使能TIM1。(4)按照间隔1s的要求,更改计数器设置(CounterSettings)的预分频器PSC和计数周期ARR。注意无须设置自动重载。定时周期计算如下:T=(799+1)×(9999+1)/8MHz=1s

(5)设置定时器中断。单击NVICSettings选项卡,勾选TIM1updateinterrupt复选框,如图7.9所示。(6)代码编写。

在main.c文件中的/*USERCODEBEGIN2*/与/*USERCODEEND2*/之间添加以下代码,启动定时器中断。HAL_TIM_Base_Start_IT(&htim1);//启动定时器中断

在中断文件stm32f1xx_it.c的/*USERCODEBEGINTIM1_UP_IRQn1*/与/*USERCODEENDTIM1_UP_IRQn1*/之间添加控制LED状态翻转的函数。HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);//翻转LED0状态定时器应用实例呼吸灯是PWM最简单的应用。利用PWM输出,有节奏调节通过LED的电流大小,实现它的亮度变化模拟人的呼吸状态,即为呼吸灯。本实例中,占空比从0增加到1000,再降至0。LED的亮度从低到高再变低,如此反复循环。PWM呼吸灯TIMER与PWM及其应用27(1)新建STM32CubeIDE工程,选择MCU。(2)时钟与引脚功能配置:由原理图得知,LED0的引脚对应TIM3的通道2。TIM3挂载在APB1上,设置APB2的频率为72MHz。(3)配置定时器:按照图7.10所示的①②③顺序,依次单击TIM3,设置时钟源(ClockSource)为内部时钟,以使能TIM3。由于默认情况下通道2使用的引脚不是PB5,因此需要将PB5引脚分配给TIM3的通道2(TIM3_CH2),方法如下:先单击PB5,选择TIM3_CH2,此时高亮颜色为黄色,表示尚未连接定时器。通道2设置为PWMGenerationCH2,右侧高亮颜色变绿色,表示连接成功。(4)设定PWM周期:本实例为1kHz,因此图7.10中③所示的预分频器PSC和计数周期ARR更改了,由定时时间计算得到周期:T=(71+1)×(999+1)/72MHz=1s其他参数保留默认设置。若希望初始条件下占空比不为0,可对以下代码中PWMVal=0进行调整,占空比=Pulse/CounterPeriod。(5)代码编写。在main.c文件中的/*USERCODEBEGIN2*/与/*USERCODEEND2*/之间添加以下PWM输出的启动代码。uint16_tPWMVal=0; //PWM占空比HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2); //启动PWM在/*USERCODEBEGIN3*/与/*USERCODEEND3*/之间添加以下控制占空比变更的代码。定时器应用实例呼吸灯是PWM最简单的应用。利用PWM输出,有节奏调节通过LED的电流大小,实现它的亮度变化模拟人的呼吸状态,即为呼吸灯。本实例中,占空比从0增加到1000,再降至0。LED的亮度从低到高再变低,如此反复循环。PWM呼吸灯TIMER与PWM及其应用28while(PWMVal<1000){PWMVal++;HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_2,PWMVal);//修改占空比

HAL_Delay(1);}while(PWMVal){PWMVal--;HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_2,PWMVal);//修改占空比

HAL_Delay(1);}HAL_Delay(200);定时器应用实例输入捕获模式可用来测量脉冲宽度或频率。STM32的定时器中,除基本定时器TIM6、TIM7外,其他的定时器都有输入捕获功能。输入捕获测量脉冲宽度与频率的原理可结合图7.11加以说明,主要分为6步。输入捕获TIMER与PWM及其应用29第一步:设置输入捕获为上升沿捕获,如图7.11中①所示。第二步:记录发生上升沿时TIMx_CNT(计数器)的值或清除计数器值,如图7.11中②所示。第三步:设置输入捕获为下降沿捕获,如图7.11中③所示。第四步:记录发生下降沿时的计数器值,计算高电平计数值,如图7.11中④所示。第五步:设置输入捕获为上升沿捕获,如图7.11中⑤所示。第六步:记录发生上升沿时的计数器值,计算低电平计数值,如图7.11中⑥所示。在第4步和第6步得到高、低电平的计数值的基础上,即可计算得到脉冲宽度或频率。本实例通过TIM3输出PWM,通过TIM2对该PWM波形进行捕获,然后计算PWM的占空比。定时器应用实例输入捕获模式可用来测量脉冲宽度或频率。STM32的定时器中,除基本定时器TIM6、TIM7外,其他的定时器都有输入捕获功能。输入捕获测量脉冲宽度与频率的原理可结合图7.11加以说明,主要分为6步。输入捕获TIMER与PWM及其应用30(1)新建STM32CubeIDE工程,选择MCU。(2)时钟与引脚功能配置,参见7.5.1节。(3)配置PWM输出。按图7.12所示,选择TIM3,设置时钟源为内部时钟,用通道1输出PWM,物理引脚为PA6。设置PWM频率为10Hz,初始占空比为40%,相应参数如图7.12所示。(4)设置输入捕获。如图7.13所示,选择TIM2,设置时钟源为内部时钟,使用通道4作为输入捕获通道,物理引脚为PA3。(5)代码编写。在/*USERCODEBEGINPV*/与/*USERCODEENDPV*/之间添加以下定义变量的代码。uint32_tCap_Buf[2]; //用于存放下降沿与第二个上升沿时间uint8_tCap_End=0; //一个周期结束标志位floatduty=0; //占空比uint8_tover_time=0; //溢出次数定时器应用实例输入捕获模式可用来测量脉冲宽度或频率。STM32的定时器中,除基本定时器TIM6、TIM7外,其他的定时器都有输入捕获功能。输入捕获测量脉冲宽度与频率的原理可结合图7.11加以说明,主要分为6步。输入捕获TIMER与PWM及其应用31在/*USERCODEBEGIN2*/与/*USERCODEEND2*/之间添加以下启动定时器代码。HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1); //启动PWMHAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_4); //启动输入捕获定时器应用实例输入捕获模式可用来测量脉冲宽度或频率。STM32的定时器中,除基本定时器TIM6、TIM7外,其他的定时器都有输入捕获功能。输入捕获测量脉冲宽度与频率的原理可结合图7.11加以说明,主要分为6步。输入捕获TIMER与PWM及其应用32在/*USERCODEBEGIN3*/与/*USERCODEEND3*/之间添加以下占空比计算代码。if(Cap_End==1){//设置为上升沿捕获__HAL_TIM_SET_CAPTUREPOLARITY(&htim2,TIM_CHANNEL_4,TIM_ICPOLARITY_RISING);HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_4); //启动输入捕获

duty=(float)Cap_Buf[0]/(over_time*65535+Cap_Buf[1])*100; //占空比计算

Cap_End=0;over_time=0;}if(TIM2->CNT==0xFFFF)over_time++; //记录溢出次数定时器应用实例输入捕获模式可用来测量脉冲宽度或频率。STM32的定时器中,除基本定时器TIM6、TIM7外,其他的定时器都有输入捕获功能。输入捕获测量脉冲宽度与频率的原理可结合图7.11加以说明,主要分为6步。输入捕获TIMER与PWM及其应用33在/*USERCODEBEGINTIM2_IRQn1*/和/*USERCODEENDTIM2_IRQn1*/之间添加以下中断代码。if(Cap_End==0)switch(Cap_Cnt){case0:HAL_TIM_SET_COUNTER(&htim2,0); //清除计数器的计数

//设置为下降沿捕获

HAL_TIM_SET_CAPTUREPOLARITY(&htim2,TIM_CHANNEL_4,TIM_ICPOLARITY_FALLING);Cap_Cnt=1;break;case1://获取当前的捕获时间

Cap_Buf[0]=HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_4);HAL_TIM_SET_COUNTER(&htim2,0); //清除计数器的计数

//设置为上升沿捕获

HAL_TIM_SET_CAPTUREPOLARITY(&htim2,TIM_CHANNEL_4,TIM_ICPOLARITY_RISING);Cap_Cnt=2;break;定时器应用实例输入捕获模式可用来测量脉冲宽度或频率。STM32的定时器中,除基本定时器TIM6、TIM7外,其他的定时器都有输入捕获功能。输入捕获测量脉冲宽度与频率的原理可结合图7.11加以说明,主要分为6步。输入捕获TIMER与PWM及其应用34case2://获取当前的捕获时间

Cap_Buf[1]=HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_4);HAL_TIM_IC_Stop_IT(&htim2,TIM_CHANNEL_4); //停止捕获

Cap_Cnt=0; //清空标志

Cap_End=1; //一个周期捕获完成

break;}STM32定时器的PWM及其应用13.呼吸灯的具体程序请自行阅读教材4.注意基本定时器不具有PWM功能STM32定时器的PWM实现——LED呼吸灯考考你——请你归纳总结下STM32定时器的PWM实现要点,可以吗?TIMER与PWM及其应用35STM32定时器的PWM及其应用2STM32实验系统通过L298N控制电机以实现直流马达正反转控制和转速控制直流电机工作电压为4.5—36VSTM32定时器的PWM实现——马达控制——设计要求马达L298N最小系统12V/5VTIMER与PWM及其应用36STM32定时器的PWM及其应用2驱动电路采用的是淘宝网上购买的以L298N为核心的驱动模块,如下图。这种模块往往有4个输入(IN1~IN4),可实现对2个直流马达正反转控制。STM32定时器的PWM实现——马达控制——L298N两组使能信号:——ENA——ENB两组输出:——A+、A-、COM——B+、B-、COM两路电源输入:信号电源(+5V)——IN1、IN2——IN3、IN4马达电源(4.5~36V)马达刹车电阻(1路1个)TIMER与PWM及其应用37STM32定时器的PWM及其应用2正反转——按照L298N的原理,如果IN1高电平、IN2低电平,此时马达正转的话,那么,IN1低电平、IN2高电平,即可实现马达反转调速度——一般情况下,直流电机的调速可以通过改变加在马达上的供电电压加以实现本项目采用的方式是:不是简单地使能L298N模块(ENA高电平,模块就被使能),而是通过将PWM信号加在使能引号引脚ENA上,这样同样可以达到改变A+、A-两端的电压,从而达到调速的目的本项目采用100Hz的PWM波形,占空比从100%改变到0,在驱动模块电压为12V的情况下,在马达连接的情况下(工作状态),实测A+、A-两端的电压从10.68调节到0.01,在电压低于0.8V左右,马达停转STM32定时器的PWM实现——马达控制——正反转、调速对于不同型号的直流电机,其调速所用PWM的频率是不一样的。这个频率参数需要由生产厂家提供,或通过实验获得。如果毫无依据地设置一个频率参数,轻则会出现诸如堵转等现象,严重情况下甚至发生烧毁电机的问题。本例中,通过实验证明100Hz是最佳的PWM频率。此处高能TIMER与PWM及其应用38STM32定时器的PWM及其应用2自行实现哦STM32定时器的PWM实现——马达控制——程序代码定时器是STM32最让人望而却步的内容和功能。这一章只介绍了定时去器的基本应用。还有一个很重要的内容,请大家作为自学内容——输入捕获与输出比较知识和能力不是老师教会的,而是你自己学会的!谢谢你的努力TIMER与PWM及其应用39直接存储器访问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通道,导致数据传输错误。开发者需

温馨提示

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

评论

0/150

提交评论