学习笔记——STM32定时器程序应用(一)

这篇博客介绍了如何在STM32中实现PWM互补输出,涉及死区时间和刹车控制。通过野火固件库例程,详细讲解了配置过程,包括GPIO设置、定时器结构体初始化、高级定时器初始化函数的编写。在测试程序时,使用示波器观察波形,解释了死区时间的作用和互补通道的工作原理。
摘要由CSDN通过智能技术生成

PWM互补输出带死区时间和刹车控制代码讲解

时隔11天,我又回来了

之间写了STM32的三种定时器的一些基本概念,今天我来讲解一下相关的程序应用。

我们直接从野火的固件库例程中拷贝一个串口的例程:USART接发。

由于我们这个例程是关于互补输出,因此需要两个GPIO;死区时间用软件配置,而刹车控制也需要使用一个GPIO。所以我们在正通道中选择PA8,在互补通道中选择PB13,刹车控制选用PB12。

首先,在目标文件下的User文件夹下新建AdvanceTim文件夹,在其目录下创建bsp_AdvanceTim.c和bsp_AdvanceTim…h两个文件。

然后先在.h文件中添加条件编译语句:

#ifndef __BSP_ADVANCETIME_H
#define __BSP_ADVANCETIME_H

#include "stm32f10x.h"

#endif /* __BSP_ADVANCETIME_H */

在编写主体程序时,我们先来看看其原理:
我们先假设占空比为50%,需要配置CNT,CCR,ARR,当CNT从0向上计数时,初始设的有效电平为高电平,当CNT<CCR,则CNT一直为高电平,当CNT到达CCR时,电平就会发生跳变,从高变低,当到达ARR时,CNT清零,电平翻转,如此反复。

我们在刚刚创建的.c文件中配置GPIO为复用输出模式:

static void ADVANCE_TIM_GPIO_Config(void) 
{
   
  GPIO_InitTypeDef GPIO_InitStructure;
  
  /*输出比较通道初始化*/
  RCC_APB2PeriphClockCmd(ADVANCE_TIM_CH1_GPIO_CLK, ENABLE);
  GPIO_InitStructure.GPIO_Pin =  ADVANCE_TIM_CH1_PIN;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(ADVANCE_TIM_CH1_PORT, &GPIO_InitStructure);

  /*输出比较通道互补通道GPIO初始化*/
  RCC_APB2PeriphClockCmd(ADVANCE_TIM_CH1N_GPIO_CLK, ENABLE);
  GPIO_InitStructure.GPIO_Pin =  ADVANCE_TIM_CH1N_PIN;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  
STM32的1S #include "stm32f10x_it.h" /** @addtogroup STM32F10x_StdPeriph_Template * @{ */ /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ extern u32 SystickCounter; extern u8 KeySwitch_Press; extern u8 KeyAdjust_Press; #define TRUE 1 #define FALSE 0 /* Private function prototypes -----------------------------------------------*/ /* Private functions ---------------------------------------------------------*/ /******************************************************************************/ /* Cortex-M3 Processor Exceptions Handlers */ /******************************************************************************/ /** * @brief This function handles NMI exception. * @param None * @retval None */ void NMI_Handler(void) { } /** * @brief This function handles Hard Fault exception. * @param None * @retval None */ void HardFault_Handler(void) { /* Go to infinite loop when Hard Fault exception occurs */ while (1) { } } /** * @brief This function handles Memory Manage exception. * @param None * @retval None */ void MemManage_Handler(void) { /* Go to infinite loop when Memory Manage exception occurs */ while (1) { } } /** * @brief This function handles Bus Fault exception. * @param None * @retval None */ void BusFault_Handler(void) { /* Go to infinite loop when Bus Fault exception occurs */ while (1) { } } /** * @brief This function handles Usage Fault exception. * @param None * @retval None */ void UsageFault_Handler(void) { /* Go to infinite loop when Usage Fault exception occurs */ while (1) { } } /** * @brief This function handles SVCall exception. * @param None * @ret
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值