文章目录
- 一、STM32定时器
 - 二、脉宽调制pwm
 - 三、定时器控制led
 - (1)实验内容
 - (2)创建工程
 - (3)Keli程序
 - (4)观察波形图
 - (5)实物连接图
 - (6)实践效果
 
- 四、PWM模式控制呼吸灯
 - (1)实验内容
 - (2)创建工程
 - (3)Keli程序
 - (4)观察波形图
 - (5)实物连接图
 - (6)实践效果
 
- 五、参考引用
 - 六、总结
 
一、STM32定时器
定时器分类
 
 功能
 
二、脉宽调制pwm


 
 PWM工作原理
 
三、定时器控制led
(1)实验内容
 使用STM32F103的 Tim2~Tim5其一定时器的某一个通道pin,连接一个LED,用定时器计数方式,控制LED以2s的频率周期性地亮-灭。
(2)创建工程


 

 

 
 
(3)Keli程序
在主函数main中写入以下程序。所选led管脚为PA6
 /* USER CODE BEGIN 2 */
  HAL_TIM_Base_Start_IT(&htim2);
  /* USER CODE END 2 */
 
/* USER CODE BEGIN 4 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    static unsigned char ledState = 0;
    if (htim == (&htim2))
    {
        if (ledState == 0)
            HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6,GPIO_PIN_RESET);
        else
            HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6,GPIO_PIN_SET);
        ledState = !ledState;
    }
}
/* USER CODE END 4 */
 
(4)观察波形图

(5)实物连接图

(6)实践效果

四、PWM模式控制呼吸灯
(1)实验内容
 采用定时器PWM模式,让 LED 以呼吸灯方式渐亮渐灭,周期为1~2秒,自己调整占空比变化到一个满意效果;使用Keil虚拟示波器,观察 PWM输出波形。
(2)创建工程
除了选择TIM不同外其他均与前面步骤相同
 

 
 
(3)Keli程序
 /* USER CODE BEGIN 1 */
    uint16_t pwmVal=0;  
    uint8_t dir=1;  
  /* USER CODE END 1 */
 
 /* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);
  /* USER CODE END 2 */
 
  /* USER CODE BEGIN WHILE */
 while (1)
  {
    /* USER CODE END WHILE */
    /* USER CODE BEGIN 3 */
	  while (pwmVal< 500)
	  {
		  pwmVal++;
		  __HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, pwmVal);    
		  HAL_Delay(1);
	  }
	  while (pwmVal)
	  {
		  pwmVal--;
		  __HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, pwmVal);    
		  HAL_Delay(1);
	  }
	  HAL_Delay(200);
  }
  /* USER CODE END 3 */
 
(4)观察波形图

(5)实物连接图

(6)实践效果

五、参考引用
STM32CubeMX & Keil——STM32F103C8T6:PWM控制LED灯
六、总结
本次实验我学习到了更多定时器和pwm的知识。



















