STM32Cube系列PWM

前言

PWM理论相关,点下方链接

STM32F103ZE_PWM笔记

Cube配置 

打开STM32CubeMX新建工程,选择STMF103ZET6芯片,选择外部高速晶振(HSE)。根据数据手册,LED3管脚PB5配置为定时器3的通道2输出。同时TIM3的通道2配置为PWM

STM32Cube系列PWM

 STM32Cube系列PWM

STM32Cube系列PWM 配置系统时钟为72MHz。由上一例可知,定时挂载到APB1,时钟频率为72MHz。此处设置为7200-1分频。经过分频后的时钟频率为10000Hz,若要设置PWM周期为20ms,则计数器的值为200-1。

其他参数为默认不用修改。其中Pulse的为设置脉宽,即为捕获/比较寄存器(TIMx_CCRx)。通过修改它的值可以修改占空比。

STM32Cube系列PWM

生成报告,以及生成代码,编译程序。

添加应用程序

调整PWM脉宽有两种方式,一种是调用TIM3->CCR2 = pwm_value;修改脉宽,另一种通过__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_2,pwm_value);修改脉宽

不建议通过每调用一次PWM就对PWM进行一次初始化初始化来修改脉宽量过波形就发现不对,在高电平的地方由有很多半波组成

void user_pwm_setvalue(uint16_t value)
{
		TIM_OC_InitTypeDef sConfigOC = {0};

	    sConfigOC.OCMode = TIM_OCMODE_PWM1;
		sConfigOC.Pulse = value;
		sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
		sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
		HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_2);
        HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2);  
		
}

调用函数进行调整

在把main()函数中添加HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2)开启定时器PWM输出。在while循环中不断修改脉宽,实现LED亮度渐变。Pulse的值最大为200,从0开始,每100ms增加10,当增加到200时,又逐渐递减到0。

STM32Cube系列PWM

  /* USER CODE BEGIN 2 */
	HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  HAL_Delay(100); 
  if(pwm_value == 0) step = 10;
  if(pwm_value == 200) step = -10;
  pwm_value += step;
  TIM3->CCR2 = pwm_value;
  //__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_2,pwm_value);
  }

在main.c函数前面声明pwm_value,step变量.编译程序下载。按复位后可以看到LED1亮度渐变闪烁。

STM32Cube系列PWM

有什么问题可以留下评论,我会及时回答

上一篇:【嵌入式系统】板级支持包BSP和硬件抽象层HAL的区别和关联


下一篇:[STM32]BSP_LED