STM32G070xx单片机PWM配置——HAL库

TIM_HandleTypeDef Motor_Pwm_Handle; 

  //定时器14
  //PWM  16KHZ
  TIM_ClockConfigTypeDef sClockSourceConfig = {0};                        //时钟配置句柄结构定义
  TIM_MasterConfigTypeDef sMasterConfig = {0};                                //TIM主配置结构定义
  TIM_OC_InitTypeDef sConfigOC = {0};                                                    //TIM输出比较配置结构定义
  TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};    //TIM中断输入和死时间配置结构定义

  Motor_Pwm_Handle.Instance                = TIM14;            //配置TIM14
  Motor_Pwm_Handle.Init.Prescaler          = 32-1;      //预分频器
  Motor_Pwm_Handle.Init.CounterMode        = TIM_COUNTERMODE_UP;      //向上计数
  Motor_Pwm_Handle.Init.Period             = 126-1;        //自动重装载值
  Motor_Pwm_Handle.Init.ClockDivision      = TIM_CLOCKDIVISION_DIV1;  //时钟1
  Motor_Pwm_Handle.Init.RepetitionCounter  = 0;
  Motor_Pwm_Handle.Init.AutoReloadPreload  = TIM_AUTORELOAD_PRELOAD_ENABLE;
  if (HAL_TIM_Base_Init(&Motor_Pwm_Handle) != HAL_OK)
  {
    Error_Handler();
  }
  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  if (HAL_TIM_ConfigClockSource(&Motor_Pwm_Handle, &sClockSourceConfig) != HAL_OK)
  {
    Error_Handler();
  }
  if (HAL_TIM_PWM_Init(&Motor_Pwm_Handle) != HAL_OK)
  {
    Error_Handler();
  }
  sMasterConfig.MasterOutputTrigger   = TIM_TRGO_RESET;
  sMasterConfig.MasterOutputTrigger2  = TIM_TRGO2_RESET;
  sMasterConfig.MasterSlaveMode       = TIM_MASTERSLAVEMODE_DISABLE;
  if (HAL_TIMEx_MasterConfigSynchronization(&Motor_Pwm_Handle, &sMasterConfig) != HAL_OK)
  {
    Error_Handler();
  }
  sConfigOC.OCMode        = TIM_OCMODE_PWM1;    //配置成PWM1
  sConfigOC.Pulse         = 0;
  sConfigOC.OCPolarity    = TIM_OCPOLARITY_HIGH;   //捕获/比较输出极性
  sConfigOC.OCNPolarity   = TIM_OCNPOLARITY_HIGH; //捕获/比较互补输出极性
  sConfigOC.OCFastMode    = TIM_OCFAST_DISABLE;        //输出比较快速禁用
  sConfigOC.OCIdleState   = TIM_OCIDLESTATE_RESET;
  sConfigOC.OCNIdleState  = TIM_OCNIDLESTATE_RESET;
  if (HAL_TIM_PWM_ConfigChannel(&Motor_Pwm_Handle, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
  {
    Error_Handler();
  }
  sBreakDeadTimeConfig.OffStateRunMode  = TIM_OSSR_DISABLE;
  sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
  sBreakDeadTimeConfig.LockLevel        = TIM_LOCKLEVEL_OFF;
  sBreakDeadTimeConfig.DeadTime         = 0;
  sBreakDeadTimeConfig.BreakState       = TIM_BREAK_DISABLE;
  sBreakDeadTimeConfig.BreakPolarity    = TIM_BREAKPOLARITY_HIGH;
  sBreakDeadTimeConfig.BreakFilter      = 0;
  sBreakDeadTimeConfig.BreakAFMode      = TIM_BREAK_AFMODE_INPUT;
  sBreakDeadTimeConfig.Break2State      = TIM_BREAK2_DISABLE;
  sBreakDeadTimeConfig.Break2Polarity   = TIM_BREAK2POLARITY_HIGH;
  sBreakDeadTimeConfig.Break2Filter     = 0;
  sBreakDeadTimeConfig.Break2AFMode     = TIM_BREAK_AFMODE_INPUT;
  sBreakDeadTimeConfig.AutomaticOutput  = TIM_AUTOMATICOUTPUT_DISABLE;
  if (HAL_TIMEx_ConfigBreakDeadTime(&Motor_Pwm_Handle, &sBreakDeadTimeConfig) != HAL_OK)
  {
    Error_Handler();
  }
    
    //GPIO配置
    GPIO_InitStruct.Pin         = MOTOR_PWM_GPIO_PIN;
    GPIO_InitStruct.Mode        = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull        = GPIO_NOPULL;
    GPIO_InitStruct.Speed       = GPIO_SPEED_FREQ_LOW;
    GPIO_InitStruct.Alternate   = GPIO_AF2_TIM14;      //复用TIM14PWM模式
    HAL_GPIO_Init(MOTOR_PWM_GPIO, &GPIO_InitStruct);        
    //使用PWM输出
    //HAL_TIM_Base_Start(&Motor_Pwm_Handle);
    HAL_TIM_PWM_Start(&Motor_Pwm_Handle,TIM_CHANNEL_1);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值