合宙AIR001,高级定时器TIM1通道2带死区互补输出

使能GPIOA,GPIOB的时钟,调用结构体初始化GPIO。

/**
  * @brief 初始TIM1_Gpio
  */
static void HAL_TIM_PWM_GpioInit(void)
{
  GPIO_InitTypeDef   GPIO_InitStruct;                    
  /* GPIOA时钟使能 */
  __HAL_RCC_GPIOA_CLK_ENABLE();                   
  /* GPIOB时钟使能 */
  __HAL_RCC_GPIOB_CLK_ENABLE();                   

  /*初始化PB0/PA13为TIM1通道2*/
  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  GPIO_InitStruct.Alternate = GPIO_AF2_TIM1;
  GPIO_InitStruct.Pin = GPIO_PIN_0;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
    
  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  GPIO_InitStruct.Alternate = GPIO_AF13_TIM1;
    //  /* A9-TIM1_CH2 */
  GPIO_InitStruct.Pin = GPIO_PIN_13;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}

然后使能TIM1时钟,初始化TIM1

static TIM_HandleTypeDef    TimHandle;
static TIM_OC_InitTypeDef   sPWMConfig;
static TIM_BreakDeadTimeConfigTypeDef sBreakConfig;

static void Timer1Init(uint32_t periodUs)
{
    /* TIM1时钟使能 */
    __HAL_RCC_TIM1_CLK_ENABLE(); 
    HAL_TIM_PWM_GpioInit();
    TimHandle.Instance = TIM1;                                                      /* 选择TIM1 */
    TimHandle.Init.Period            = periodUs - 1;                                     /* 自动重装载值 */
    TimHandle.Init.Prescaler         = 1-1;                                    /* 预分频为1000-1 */
    TimHandle.Init.ClockDivision     = TIM_CLOCKDIVISION_DIV1;                      /* 时钟不分频 */
    TimHandle.Init.CounterMode       = TIM_COUNTERMODE_UP;                          /* 向上计数 */
    TimHandle.Init.RepetitionCounter = 1 - 1;                                       /* 不重复计数 */
    TimHandle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;              /* 自动重装载寄存器没有缓冲 */
    /* PWM初始化 */
    HAL_TIM_PWM_Init(&TimHandle);

    sPWMConfig.OCMode       = TIM_OCMODE_PWM1;                                      /* 配置为PWM1 */
    sPWMConfig.OCPolarity   = TIM_OCPOLARITY_HIGH;                                  /* 高电平有效 */
    sPWMConfig.OCNPolarity  = TIM_OCNPOLARITY_HIGH;                                 /* 高电平有效 */
    sPWMConfig.OCIdleState  = TIM_OCIDLESTATE_SET;                                  /* 输出空闲状态1(OC1输出) */
    sPWMConfig.OCNIdleState = TIM_OCNIDLESTATE_RESET;                               /* 输出空闲状态1(OC1N输出) */
    sPWMConfig.OCFastMode   = TIM_OCFAST_DISABLE;                                   /* 关闭快速使能 */

    sPWMConfig.Pulse = periodUs/2;                                                /* 通道1占空比 */
    HAL_TIM_PWM_ConfigChannel(&TimHandle, &sPWMConfig, TIM_CHANNEL_2);
    
    /* 刹车和死区相关配置 */
    sBreakConfig.BreakState       = TIM_BREAK_ENABLE;                      /* 使能刹车 */
    sBreakConfig.DeadTime         = 10;                                     /* 死区时间 */
    sBreakConfig.OffStateRunMode  = TIM_OSSR_ENABLE;                       /* 运行模式下关闭状态:开启输出 */
    sBreakConfig.OffStateIDLEMode = TIM_OSSI_ENABLE;                       /* 空闲模式下关闭状态:开启输出 */
    sBreakConfig.LockLevel        = TIM_LOCKLEVEL_OFF;                     /* 关闭锁定 */
    sBreakConfig.BreakPolarity    = TIM_BREAKPOLARITY_HIGH;                /* 刹车有效极性:高电平 */
    sBreakConfig.AutomaticOutput  = TIM_AUTOMATICOUTPUT_ENABLE;            /* 开启自动输出 */
    /* 配置刹车和死区 */
    HAL_TIMEx_ConfigBreakDeadTime(&TimHandle, &sBreakConfig);
    
    /* 通道1输出PWM */
    HAL_TIM_PWM_Start(&TimHandle, TIM_CHANNEL_2);
    /* 通道1N输出PWM */
    HAL_TIMEx_PWMN_Start(&TimHandle, TIM_CHANNEL_2);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值