STM32-HAL库04-PWM输出

STM32-HAL库04-PWM输出

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

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

第一步-新建工程
1.选择MCU-F103C6Tx
STM32-HAL库04-PWM输出_第1张图片
第二步-SYS设置
将DEBUG选线设置为Serial Wire
STM32-HAL库04-PWM输出_第2张图片
第三步-RCC设置
选择高速外部时钟
STM32-HAL库04-PWM输出_第3张图片
第四步-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.
--------------------------------------------------*/

STM32-HAL库04-PWM输出_第4张图片

第五步-时钟配置
STM32-HAL库04-PWM输出_第5张图片
第六步-文件配置
STM32-HAL库04-PWM输出_第6张图片
STM32-HAL库04-PWM输出_第7张图片
第七步-程序编写

  1. 打开MDK5
  2. 烧录程序设置:魔术棒-DEBUG(选择STlink)-Settings-Flash Download-勾选Reset and run
    STM32-HAL库04-PWM输出_第8张图片
  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 */
}

你可能感兴趣的:(STM32HAL,stm32,单片机,嵌入式硬件)