使用STM32 HAL库实现PWM输出

STM32-HAL库04-PWM输出

所用材料:
STM32F103C6T6(最小系统板)
STM32cubemx(HAL库软件)
MD5(编程软件)
示波器(DS100)

本节所学内容:
通过TIM2定时器输出500HZ频率的PWM波;
修改部分参数实现PWM波频率的改变;

第一步-新建工程
1.选择MCU-F103C6Tx

第二步-SYS设置
将DEBUG选线设置为Serial Wire

第三步-RCC设置
选择高速外部时钟

第四步-PWM配置

  1. Timers-TIM2-Channel1-(PWM Generation CH1)
  2. Parameter Settings-Counter Settings-Prescale-(71)
  3. Parameter Settings-Counter Settings-Counter Period-(1999)
  4. Parameter Settings-Counter Settings-auto reload preload-Enable
  5. Parameter Settings-PWM Generation CH1-Pluse-(1000)

其中Prescale为预分频值,Counter Period为计数值,两者共同决定PWM波的频率,而Pluse用于确定PWM波的占空比,具体公式如下:

/*--------------------------------------------------
PWM波频率:F=72M/[(ARR+1)*(PSC+1)]
占空比:	  Q=Pluse/(ARR+1)
本文中为输出500HZ频率的占空比为50%的PWM波,故PSC取值为71,
ARR取值为1999,Pluse取值为1000.
--------------------------------------------------*/

第五步-时钟配置

第六步-文件配置


第七步-程序编写

  1. 打开MDK5
  2. 烧录程序设置:魔术棒-DEBUG(选择STlink)-Settings-Flash Download-勾选Reset and run
  3. 实现输出500HZ的PWM波
    在main.c中添加如下程序:
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);

其中主函数具体如下:

int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_TIM2_Init();
  /* USER CODE BEGIN 2 */
	HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
  /* USER CODE END 2 */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}
  1. 实现修改参数输出目标频率的PWM波

通过修改参数PSC或ARR可以改变PWM波的频率:目标5000HZ,改ARR,PSC不变

__HAL_TIM_SET_AUTORELOAD(&htim2, 199);						//可以改变arr以改变频率

通过修改参数Pluse可以改变PWM波的占空比:目标为40%

__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_1, 80); //修改占空比比较值,一直保持占空比50%	

其中主函数如下:

int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_TIM2_Init();
  /* USER CODE BEGIN 2 */
	HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
	HAL_Delay(500);
	__HAL_TIM_SET_AUTORELOAD(&htim2, 199);						//可以改变arr以改变频率
	__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_1, 80); //修改占空比比较值,一直保持占空比50%	
  /* USER CODE END 2 */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}
物联沃分享整理
物联沃-IOTWORD物联网 » 使用STM32 HAL库实现PWM输出

发表评论