你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32L053的PWM

[复制链接]
强仔00001 发布时间:2015-1-7 01:24
本帖最后由 强仔00001 于 2015-1-13 18:44 编辑

学到单片机,肯定会弄到PWM这个功能,其实PWM说白了也就是定时器产生的,PWM的应用很广泛,如电机和电源等方面。STM32L053系列64pin只有3个定时器,如下图:
QQ截图20141202013522.png
定时器24个通道,而定时器21和定时器22各有两个通道。所以最多只能输出8PWM
对于我们一般的应用足以了。定时器2是挂在APB1桥的,而定时器21和定时器22挂在APB2桥的,这个大家要注意。

现在我的例程是打开定时器2CH1CH2,然后输出PWM。首先我们先决定哪个脚作为PWM输出口,我这里就选择了PA0PA1作为PWM输出口。如下图的管脚功能分布图:
QQ截图20141202014319.png
打开管脚复用的初始化使用以下函数:
QQ截图20141202014454.png
PWM参数的初始化代码如下:
  1. void Config_PWM(int PULSE1_VALUE, int PULSE2_VALUE)
  2. {
  3.         TIM_OC_InitTypeDef sConfig;
  4.   TIM_HandleTypeDef    TimHandle;
  5.         
  6.         TimHandle.Instance = TIM2;
  7.   
  8.   TimHandle.Init.Prescaler     = 1;
  9.   TimHandle.Init.Period        = 1599;
  10.   TimHandle.Init.ClockDivision = 0;
  11.   TimHandle.Init.CounterMode   = TIM_COUNTERMODE_UP;
  12.   if(HAL_TIM_PWM_Init(&TimHandle) != HAL_OK)
  13.   {
  14.     /* Initialization Error */
  15.     Error_Handler();
  16.   }
  17.         
  18.         
  19.         
  20.   sConfig.OCMode     = TIM_OCMODE_PWM1;
  21.   sConfig.OCPolarity = TIM_OCPOLARITY_HIGH;
  22.   sConfig.OCFastMode = TIM_OCFAST_DISABLE;

  23.   /* Set the pulse value for channel 1 */
  24.   sConfig.Pulse = PULSE1_VALUE;  
  25.   if(HAL_TIM_PWM_ConfigChannel(&TimHandle, &sConfig, TIM_CHANNEL_1) != HAL_OK)
  26.   {
  27.     /* Configuration Error */
  28.      Error_Handler();
  29.   }
  30.   
  31.   /* Set the pulse value for channel 2 */
  32.   sConfig.Pulse = PULSE2_VALUE;
  33.   if(HAL_TIM_PWM_ConfigChannel(&TimHandle, &sConfig, TIM_CHANNEL_2) != HAL_OK)
  34.   {
  35.     /* Configuration Error */
  36.     Error_Handler();
  37.   }
  38.         
  39.         
  40.   
  41.         
  42.          if(HAL_TIM_PWM_Start(&TimHandle, TIM_CHANNEL_1) != HAL_OK)
  43.   {
  44.     /* Starting Error */
  45.     Error_Handler();
  46.   }
  47.   /* Start channel 2 */
  48.   if(HAL_TIM_PWM_Start(&TimHandle, TIM_CHANNEL_2) != HAL_OK)
  49.   {
  50.     /* Starting Error */
  51.     Error_Handler();
  52.   }


  53. }
复制代码
频率计算时:F = SYSCLK/(( Prescaler + 1)*( Period + 1));最大占空比为 Period+ 1
我这里设置了10KPWM频率,我的SYSCLK32M
主函数很简单,就是把CH1CH2的占空比设为25%50%。如果一切无误,可以板上的led会亮,提示初始化成功,否则程序或者硬件有问题,导致初始化失败。

下面贴上我我的测试图:
IMG_20141202_012748.jpg
源代码:
PWM_TEST.zip (682.92 KB, 下载次数: 226)
收藏 2 评论13 发布时间:2015-1-7 01:24

举报

13个回答
jp-425638 回答时间:2015-1-7 08:02:46
好贴子,看看不错,收藏了
iwqt1983 回答时间:2015-1-7 08:11:54
如果有支持PS级别的PWM就好了。
shaoziyang 回答时间:2015-1-7 13:57:55
赞一个。
boyubeiyu 回答时间:2015-1-7 14:04:12
好贴,有干货,支持
强仔00001 回答时间:2015-1-7 15:11:55
jp-425638 发表于 2015-1-7 08:02
好贴子,看看不错,收藏了

谢谢支持
强仔00001 回答时间:2015-1-7 15:12:17
iwqt1983 发表于 2015-1-7 08:11
如果有支持PS级别的PWM就好了。

PS是啥???求科普
强仔00001 回答时间:2015-1-7 15:13:48

谢谢支持
强仔00001 回答时间:2015-1-7 15:15:40
boyubeiyu 发表于 2015-1-7 14:04
好贴,有干货,支持

必须的,谢谢支持
沐紫 回答时间:2015-1-7 16:07:07
谢谢
12下一页

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版