STM32-9 PWM 呼吸灯(下)

设定.ioc档

这边选择TIM2来做,首先进到.ioc当中先确认系统时钟频率为多少,这边我的是16Mhz
http://img2.58codes.com/2024/20146325BpHLtpX5Cf.png
接着点选左侧的Timer选择TIM2进行PWM的设置,在Channel 1的地方选择PWM Generation CH1,同时CH_1的接脚为PA0。
http://img2.58codes.com/2024/20146325BdwapRKqzd.png
http://img2.58codes.com/2024/201463253kiHJW2FgF.png
接着可以看到下方的配置部分,Prescaler与auto-reload preload(ARR)在前几篇Timer有介绍过,Prescaler设置为15 ARR设置为5000会得到200Hz的PWM方波,Pulse设置为3750会得到佔空比75%,要注意这边选择模式1,高电位会在CNT小于Pluse时产生。
http://img2.58codes.com/2024/20146325es1EvoFYyF.png


函数介绍

启动PWM输出模式(放在main当中启动一次就可以了)
//第一个参数为定时器//第二个参数为通道HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel)//EXHAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
修改ARR值 : 可以改变PWM的频率
//将TIM3的ARR值改为1000//第一个参数为定时器//第二个参数为要修改的值__HAL_TIM_SET_AUTORELOAD(&htim3, 1000);
修改Pulse值 : 可以改变佔空比
//将TIM3的Pulse值改为1000//第一个参数为定时器//第二个参数为输出通道//第三个参数为要修改的值__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,1000);

呼吸灯实作

由于手边没有马达可以做测试,这边就先使用PWM来输出LED~
假设以1Hz的频率去输出LED灯,那也就代表1秒当中0.5为亮灯0.5会熄灯,这时会看到LED是闪烁的状况。
以200Hz的频率去输出LED灯,5ms当中暗与亮各佔一半,这时因为频率太快导致看起来只有亮度减少。
所以在频率相同时改变佔空比可以改变LED的亮度达到呼吸灯的效果。

/* USER CODE BEGIN 2 */  HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);  /* USER CODE END 2 */  /* Infinite loop */  /* USER CODE BEGIN WHILE */  while (1)  {    /* USER CODE END WHILE */    /* USER CODE BEGIN 3 */  for(x=0;x<=4999;x++)  //从最暗到最亮  {  __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,x);  HAL_Delay(5); //方便观察LED灯明暗变化  }  for(x=4999;x>=0;x--) //从最亮到最暗  {  __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,x);  HAL_Delay(5);  }  }  /* USER CODE END 3 */
暗到亮
暗到亮亮到暗
亮到暗
有兴趣的话也可以结合其他中断方式去做不同模式变化~~
以上内容如果有误的话,麻烦各位通知我。感谢~

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章