哆啦美

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  29 随笔 :: 0 文章 :: 0 评论 :: 21188 阅读

1 步骤:

1.1 初始化PWM

复制代码
TIM_HandleTypeDef htim3;  //定时器3PWM句柄
TIM_OC_InitTypeDef TIM3_CH3Handler;  //定时器3通道3句柄

void TIM3_PWM_Init(void)
{
  htim3.Instance = TIM3;  //定时器3
  htim3.Init.Prescaler = 16-1;  //分频PSC
  htim3.Init.CounterMode = TIM_COUNTERMODE_UP;  //向上计数模式
  htim3.Init.Period = 1000-1;  //自动重装载值
  htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  HAL_TIM_PWM_Init(&htim3);  //初始化PWM

  sConfigOC.OCMode = TIM_OCMODE_PWM1;  //模式选择PWM1
  sConfigOC.Pulse = 0;  //此值用来设置占空比,若占空比变化次处可先不设置
  sConfigOC.OCPolarity = TIM_OCPOLARITY_LOW;  //输出比较极性为低
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  
  HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_3) ;  //配置TIM3通道3
}
复制代码

1.2  使能TIM时钟、配置复用功能引脚

复制代码
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    __HAL_RCC_GPIOB_CLK_ENABLE();  //使能GPIOB时钟
    __HAL_RCC_TIM3_CLK_DISABLE();  //使能定时器3时钟

    GPIO_InitStruct.Pin = GPIO_PIN_0;  //PB0
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;  //复用推挽输出
    GPIO_InitStruct.Pull = GPIO_PULLUP;  //上拉
    GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;  //高速
    GPIO_InitStruct.Alternate = GPIO_AF2_TIM3;  //PB0复用TIM3_CH3,根据芯片选择,此处需要改
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}
复制代码

1.3 设置TIM的占空比

复制代码
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_3);  //在main函数中,开启PWM通道3

if(dir) dutycycle++;
else dutycycle--;
if(dutycycle>499) dir=0;
if(dutycycle==0) dir=1;
TIM3->CCR3=dutycycle;  //用来设置占空比

//__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_2,dutycycle);  //用来设置占空比,同上
复制代码

 2 使用CubeMX配置

 

 

 

 

 

posted on   哆啦美  阅读(298)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示