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

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扩展软件包
关注我们
st-img 微信公众号
st-img 手机版