9272|4

1291

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

【Nucleo心得】+ PWM输出 [复制链接]

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

现在我的例程是打开定时器2CH1CH2,然后输出PWM。首先我们先决定哪个脚作为PWM输出口,我这里就选择了PA0PA1作为PWM输出口。如下图的管脚功能分布图:
打开管脚复用的初始化使用以下函数:
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会亮,提示初始化成功,否则程序或者硬件有问题,导致初始化失败。

下面贴上我我的测试图:
HAL库还是挺容易上手的
附上源代码:
PWM_TEST.zip (682.92 KB, 下载次数: 209)



此帖出自stm32/stm8论坛

最新回复

非常不错。。。。。。。。。。。。。  详情 回复 发表于 2014-12-2 08:33

赞赏

2

查看全部赞赏

点赞 关注(5)
 

回复
举报

1658

帖子

1

TA的资源

纯净的硅(高级)

沙发
 
赞,好细致啊
此帖出自stm32/stm8论坛

点评

感谢支持  详情 回复 发表于 2014-12-6 00:31
 
 

回复

4996

帖子

19

TA的资源

裸片初长成(初级)

板凳
 
非常不错。。。。。。。。。。。。。
此帖出自stm32/stm8论坛

点评

感觉还可以,谢谢版主支持  详情 回复 发表于 2014-12-2 11:53
 
个人签名我的博客
 

回复

1291

帖子

0

TA的资源

纯净的硅(中级)

4
 
zhaojun_xf 发表于 2014-12-2 08:33
非常不错。。。。。。。。。。。。。
感觉还可以,谢谢版主支持
此帖出自stm32/stm8论坛
 
 
 

回复

1291

帖子

0

TA的资源

纯净的硅(中级)

5
 
感谢支持
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表