定时器&PWM应用编程

一、实验任务

深入了解STM32定时器原理,掌握脉宽调制pwm生成方法。

一. 使用STM32F103的 Tim2~Tim5其一定时器的某一个通道pin(与GPIOx管脚复用,见下图),连接一个LED,用定时器计数方式,控制LED以2s的频率周期性地亮-灭。

二. 接上,采用定时器pwm模式,让 LED 以呼吸灯方式渐亮渐灭,周期为1~2秒,自己调整到一个满意效果。使用Keil虚拟示波器,观察 pwm输出波形。

三. 再接上,采用定时器的另外一个通道,编程采集上面的pwm输出信号,获得其周期和脉宽,并重定向输出到串口显示。

在这里插入图片描述

二、定时器和PWM

1.定时器介绍

STM32定时器是一种重要的外设,可用于实现定时、计数、捕获、比较和脉宽调制(PWM)等功能。STM32总共有8个定时器,分别是2个高级定时器(TIM1、TIM8),4个通用定时器(TIM2、TIM3、TIM4、TIM5)和2个基本定时器(TIM5、TIM6),如下图所示:

在这里插入图片描述

基本定时器

基本定时器是一个简单的定时器,通常用于生成精确的时间延迟。它有单个16位计数器,可以通过设置预分频系数实现不同的计数速度。基本定时器通常用于简单的定时任务。

通用定时器

通用定时器是一种更通用功能更强大的定时器,通常用于更复杂的定时和计数任务。STM32系列微控制器通常配备了多个通用定时器,如TIM2、TIM3等。通用定时器具有多个16位或32位计数器,可以通过设置预分频系数和计数周期来实现不同的计数速度和定时精度。

2.定时器的工作原理

定时器可分为四个大部分,分别是:时钟产生部分,时基单元部分,输入捕获部分,输出比较部分。

(1)时钟产生部分可选择四种时钟源:①内部时钟(CK_INT);②外部时钟模式:外部触发输入(ETR);③内部触发输入(ITRx);④外部时钟模式:外部输入脚(TIx)。

(2)时基单元部分包括三个寄存器:

①计数器寄存器(TIMx_CNT):向上计数、向下计数或者中心对齐计数;

②预分频器寄存器(TIMx_PSC):可将时钟频率按1到65535之间的任意值进行分频,可在运行时改变其设置值;

③自动装载寄存器(TIMx_ARR):如果TIMx_CR1寄存器中的ARPE位为0,ARR寄存器的内容将直接写入影子寄存器;如果ARPE为1,ARR寄存器的那日同将在每次的更新时间UEV发生时,传送到影子寄存器;如果TIM1_CR1中的UDIS位为0,当计数器产生溢出条件时,产生更新事件。

(3)输入捕获部分

IC1、2和IC3、4可以分别通过软件设置将其映射到TI1、TI2、TI3和TI4;

4个16位捕捉比较寄存器可以编程用于存放检测到对应的每一次输入捕捉时计数器的值;

当产生一次捕捉,相应的CCxIF标志位被置1;同时如果中断或DMA请求使能,则产生中断或DMA请求。

如果当CCxIF标志位已经为1,当又产生一个捕捉,则捕捉溢出标志位CCxOF将被置1。

3.PWM介绍

STM32PWM模块通常由一个或多个通用定时器(TIM)和相关的GPIO引脚组成。为了配置和控制STM32PWM模块,我们可以使用相应的库函数或直接操作寄存器。主要从频率设置,占空比设置,极性设置,中断使能四个方面来设置PWM。

STM32系列微控制器中一些常用定时器的PWM功能比较:

在这里插入图片描述

三、用定时器控制LED周期性闪烁

1.使用STM32CubeMX配置项目

使用STM32F103C8芯片进行实现

在这里插入图片描述

2.设置SYS

在这里插入图片描述

3.配置GPIO

在这里插入图片描述

4.设置TIM2

在这里插入图片描述

5.设置TIM3

在这里插入图片描述

6.配置NVIC

在这里插入图片描述

在这里插入图片描述

7.配置USART1

在这里插入图片描述

8.编写中断函数

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
 static uint32_t time_cnt=0;
 static uint32_t time_cntck=0;
 if (htim->Instance==TIM2)
 {
  if(++time_cnt >=400)
  {
   time_cnt =0;
   HAL_GPIO_TogglePin(D1_GPIO_Port,D1_Pin);
  }
  if (htim->Instance== TIM3)
  {
   if(++time_cntck >=1000)
    {
     time_cntck =0;
     HAL_UART_Transmit (&huart1,hel1o,20,100000);
    }
  }
}

编译烧录,实现效果:

在这里插入图片描述

四、使用PWM实现LED闪烁

STM32CubeMX配置在上面的基础上进行一些更改,不用配置TIM3

1.配置TIM2

在这里插入图片描述

2.配置时钟

在这里插入图片描述

3.编写代码

1.在main.c 设置初始值为10
uint16_t duty_num=10;
2.编写while函数
 HAL_Delay(50);
	duty_num= duty_num+15;
	if(duty_num>500){
		duty_num=0;
	}
	__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_2,duty_num);

编译烧录,实现效果:

在这里插入图片描述

4.示波器显示效果

在这里插入图片描述

五、总结

此次实验的内容为定时器&PWM应用编程。在这次实验我再次熟悉了STM32的开发环境。hal库的这些工具为STM32的编程提供了便捷的方式,能够轻松配置定时器和PWM参数。这次实验也学习了定时器和PWM的工作原理;如何配置PWM输出,包括设置占空比、频率和极性,以及如何编写中断服务程序,以响应定时器中断或PWM事件。在编程过程中遇到了一些问题,通过csdn的查阅和查阅群里的相关讨论,问题都得到了相应的解决,本次实验使我获益匪浅。
为STM32的编程提供了便捷的方式,能够轻松配置定时器和PWM参数。这次实验也学习了定时器和PWM的工作原理;如何配置PWM输出,包括设置占空比、频率和极性,以及如何编写中断服务程序,以响应定时器中断或PWM事件。在编程过程中遇到了一些问题,通过csdn的查阅和查阅群里的相关讨论,问题都得到了相应的解决,本次实验使我获益匪浅。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: STM32F4系列微控制器中的高级定时器,可以用来产生PWM(脉宽调制)信号。PWM信号常用于电机驱动、LED灯控制、音频信号生成等应用。 首先,我们需要选择一个高级定时器来作为PWM输出源。STM32F4系列微控制器有多个高级定时器可供选择,如定时器1(TIM1)、定时器2(TIM2)、定时器3(TIM3)等。我们可以根据具体需求选择一个合适的定时器。 然后,在初始化定时器之前,需要先对GPIO端口进行配置。设置GPIO引脚的模式为复用模式,并选择合适的引脚复用功能,以使其连接到定时器的输出通道。 接下来,我们需要初始化选定的高级定时器。通过配置定时器的时钟源、分频系数和计数模式等参数,来设置定时器的工作频率和计数范围。同时,还需要配置定时器的模式为PWM输出模式,并选择合适的通道模式和极性。 在初始化完成后,我们可以通过修改定时器的自动重载寄存器(ARR)和占空比调整寄存器(CCR)来控制PWM信号的周期和占空比。自动重载寄存器用于设置PWM信号的周期,占空比调整寄存器则用于设置PWM信号的占空比。 最后,启动定时器即可开始输出PWM信号。通过设置定时器的使能位,我们可以启动定时器开始计数,并将生成的PWM信号输出到相应的GPIO引脚。 需要注意的是,通过高级定时器输出PWM信号时,需要仔细计算和设置定时器的参数,确保生成的PWM信号满足具体应用要求。 以上就是使用STM32F4高级定时器输出PWM的基本步骤。当然,具体的实现还需要根据具体芯片型号和使用的开发环境来进行细致调整和配置。 ### 回答2: STM32F4高级定时器是一种功能强大的定时器模块,可用于输出PWM信号。以下是使用STM32F4高级定时器输出PWM的步骤: 第一步,配置定时器: 首先,选择要使用的定时器,如TIM1、TIM2等。然后,根据需要配置周期、分频系数和计数模式等参数。可通过寄存器设置或使用STM32CubeMX进行配置。 第二步,配置PWM模式: 选择PWM输出模式,例如选择PWM模式1或2。配置输出通道的极性、周期和占空比等参数。此外,还可以设置多通道的自动更新和互补输出功能。 第三步,配置GPIO引脚: 选定用于输出PWM信号的GPIO引脚,并配置为复用功能。确保GPIO引脚与定时器通道相匹配。 第四步,编程实现PWM输出: 使用适当的编程语言,例如C或汇编语言,编写程序以初始化和启动定时器。在程序中,设置PWM的周期和占空比,然后启动定时器。 第五步,输出PWM信号: 定时器开始计数后,会自动输出PWM信号。根据配置的周期和占空比参数,定时器会生成相应的PWM波形信号。 除了上述步骤外,还可以根据需要使用中断来处理定时器事件。通过配置中断服务例程,可以在定时器溢出、计数匹配等事件发生时执行特定的操作,以实现更精确的控制。 总之,STM32F4高级定时器提供了强大的PWM输出功能,通过适当的配置和编程,可以实现高精度的PWM信号输出。 ### 回答3: STM32F4系列微控制器中的高级定时器(advanced timer)可以用于输出PWM信号。以下是使用STM32CubeIDE配置高级定时器输出PWM的步骤: 1. 在STM32CubeIDE中创建一个新的工程,并选择适合的STM32F4系列微控制器型号。 2. 打开RCC配置工具,在高级定时器的时钟源中选择合适的时钟源,例如内部时钟。 3. 打开GPIO配置工具,选择需要使用的IO引脚,并将其配置为复用功能。 4. 打开定时器配置工具,选择需要使用的高级定时器(如TIM1、TIM2等)。根据需要,配置定时器的计数模式、计数频率、自动重装载值等。 5. 配置定时器通道,选择需要用于PWM输出的通道,并设置通道的输出模式为PWM模式。 6. 根据具体需求设置PWM的周期和占空比。可以通过调整自动重装载值和通道的比较值来实现。 7. 配置定时器的时钟分频系数,使其与所需的PWM频率相匹配。 8. 生成代码,并将生成的代码添加到工程中。 9. 在生成的代码中,根据需要调用HAL库提供的函数来启动和停止定时器。 通过上述步骤,就可以使用STM32F4的高级定时器输出PWM信号了。在实际应用中,还可以根据需要调整PWM的周期、占空比以及使用中断等功能来实现更复杂的PWM输出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值