STM32 CubeIDE(八)通用定时器PWM

本文详细介绍了STM32F407系列中的通用定时器及其在PWM应用中的工作原理,包括不同定时器的特性、配置方法、PWM模式设置以及输出比较初始化结构体。通过实例展示了如何使用CubeIDE配置通用定时器14生成1KHz、占空比70%的PWM波,并提供了相关的HAL库函数。
摘要由CSDN通过智能技术生成

STM32 CubeIDE(八)通用定时器PWM

通用定时器

STM32F407 系列控制器有10 个通用定时器,所有通用定时器都是彼此独立的,不共享任何资源。

APB1接口定时器(42MHz)
TIM2、TIM5:32位计数器、支持向上计数、向下计数、向上向下计数,可生产DMA请求、四路捕获/比较通道,支持正交解码。
TIM3、TIM4:16位计数器、支持向上计数、向下计数、向上向下计数,可生产DMA请求、四路捕获/比较通道,支持正交解码。
TIM12:16位计数器、支持向上计数,两路捕获/比较通道。
TIM13、TIM14:16位计数器、支持向上计数,一路捕获/比较通道。

APB2接口定时器(84MHz)
TIM9:16位计数器、支持向上计数,两路捕获/比较通道。
TIM10、TIM11:16位计数器、支持向上计数,一路捕获/比较通道。

输入/比较通道可用于

  1. 输入捕获
  2. 输出比较
  3. PWM生产
  4. 单脉冲输出

PWM

脉冲宽度调制,简称PWM,是利用微型处理器的数字信号输出来对模拟电路进行控制的一种非常有效的技术,广泛应用于测量、通讯、功率控制与变换的许多领域中。

在模拟电路中,时间和值在幅度上几乎没有限制,基本上可以取任何实数值,所以电压和电流可以直接用来控制对象。

而在数字电路中,只能输出1和0两种状态,所以电压或电流会通过通断方式的重复脉冲序列加载到模拟负载。

PWM波就是用数字信号对模拟信号的电平进行编码后的脉冲。

PWM的优点是从处理器到被控系统信号都是数字形式的,无需进行数模转换,让信号保持为数字形式可将噪声影响降到最小。噪声只有在强到足以将逻辑 1 改变为逻辑 0 或将逻辑 0 改变为逻辑 1 时,也才能对数字信号产生影响。

总之,PWM既经济、节约空间、抗噪性能强,是一种广大工程师在许多设计应用中使用的有效技术。

在这里插入图片描述
在这里插入图片描述
通用定时器PWM原理

以向上计数模式为例,除了定时器计数值CNT和自动重装载值ARR之外,还有一个计数比较值CCR,当CNT > CCR时,通道输出高电平,当CNT < CCR时,通道输出低电平,当CNT = ARR时,重新开始计时,至此就输出了一个PWM波。
在这里插入图片描述
输出比较初始化结构体

/**
  * @brief  TIM Output Compare Configuration Structure definition
  */
typedef struct
{
  uint32_t OCMode;        /*!< 输出比较模式 */

  uint32_t Pulse;         /*!< 输出比较值 */

  uint32_t OCPolarity;    /*!< 输出极性 */

  uint32_t OCNPolarity;   /*!< 互补通道输出极性 */

  uint32_t OCFastMode;    /*!< PWM快速模式 */


  uint32_t OCIdleState;   /*!< 空闲状态输出极性 */

  uint32_t OCNIdleState;  /*!< 互补通道空闲状态输出极性 */
  
} TIM_OC_InitTypeDef;

PWM模式

TIM_OCMODE_PWM1:在向上计数时,一旦CNT<CCR时通道为有效电平,否则为无效电平;在向下计数时,一旦CNT>CCR时通道为无效电平,否则为有效电平。
TIM_OCMODE_PWM2:在向上计数时,一旦CNT<CCR时通道为无效电平,否则为有效电平;在向下计数时,一旦CNT>CCR时通道为有效电平,否则为无效电平。

PWM函数

HAL_TIM_PWM_Init(TIM_HandleTypeDef *htim);	//PWM定时器初始化
HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel);	//PWM通道初始化
HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel);		//开启定时器通道的PWM
HAL_TIM_PWM_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);	//开启定时器通道的PWM和中断
__HAL_TIM_SetCompare(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t Compare);	//设置定时器通道比较值

PWM输出实验
本次实验基于野火STM32F407-霸天虎V2开发板实现,使用通用定时器14产生1KHz,占空比70%的PWM波,,并通过示波器进行观察。

打开Cube,在Timers中激活TIM14,Channel1设置为PWM Generation CH1,设置分频系数83,向上计数模式,自动重装载值999,使能自动重装载,PWM模式1,比较值699,有效电平High。TIM14时钟频率为84MHz,84分频后为1MHz,即计数周期1us,计数值1000即PWM周期1ms,频率1KHz,比较值700,占空比70%。
在这里插入图片描述
生成代码后,在main函数中相应位置添加以下代码开启PWM输出。

int main(void)
{
  /* USER CODE BEGIN 2 */
  HAL_TIM_PWM_Start(&htim14, TIM_CHANNEL_1);
  /* USER CODE END 2 */
}

在这里插入图片描述

### 回答1: STM32F103C8T6是一款基于ARM Cortex-M3内核的32位微控制器,而CubeIDE是针对STM32系列微控制器的集成开发环境。STM32F103CubeIDE例程是在这个开发环境下提供的一些示例代码,用于帮助开发人员快速上手并理解STM32F103系列微控制器的功能与特性。 这些例程涵盖了从基本的GPIO(通用输入输出)控制和串口通信,到高级的定时器和中断处理等各个方面的应用。它们可以作为开发人员学习和开发的起点,帮助了解和掌握STM32F103系列微控制器的编程方法和架构设计。 通过使用STM32F103CubeIDE例程,开发人员可以快速搭建起一个基础的硬件平台,并在此基础上进行二次开发。例如,通过了解GPIO例程,我们可以学习如何配置和控制芯片的输入输出引脚,实现LED的亮灭控制、按钮的输入检测等功能。而通过学习定时器和中断处理的例程,可以了解如何使用定时器产生精确的定时中断,实现各种定时功能,比如PWM呼吸灯、定时采集传感器数据等。 此外,STM32F103CubeIDE例程还提供了一些外设的驱动程序,如UART(通用异步收发器)和SPI(串行外设接口)等,这些驱动程序可以直接被集成到我们的应用中,简化了编程的过程,提高了开发效率。 总之,STM32F103CubeIDE例程是一个非常有用的资源,它可以帮助开发人员快速上手STM32F103系列微控制器的开发,并且可以在实际项目中提供一些基础的代码框架,为我们的开发和学习提供了很大的便利。 ### 回答2: STM32F103CubeIDE是适用于STMicroelectronics的STM32F1系列微控制器的集成开发环境。它提供了一套用于开发STM32F1系列芯片的例程。 首先,例程包含了一系列代码模板和功能实现的示例代码。这些示例代码覆盖了GPIO、串口通信、定时器、中断处理等基本功能的实现。开发者可以参考这些例程,快速了解每个功能模块的使用方法。 其次,例程还提供了外设的初始化函数。在初次开发时,我们需要配置各个外设的寄存器来使其正常工作。例程中提供了相应的初始化函数,可以帮助我们快速初始化外设。 同时,例程还包含了一些应用示例,例如温度传感器、LED灯控制等。这些示例演示了如何使用STM32F1系列微控制器实现各种应用场景,为开发者提供了基础的参考和学习资料。 最后,例程还提供了一套调试工具。使用STM32F103CubeIDE可以方便地进行代码的调试和跟踪。开发者可以在开发过程中使用调试工具对代码进行单步调试,以便于查找和修复错误。 综上所述,STM32F103CubeIDE例程是一个非常实用的开发工具,它提供了一套完整的例程和示例代码,帮助开发者快速上手STM32F1系列微控制器的开发,并且提供调试工具方便开发者进行调试和测试。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值