[STM32F0] 解密开发板界”小精灵“之定时器篇---STM32F042 Nucleo32评测

[复制链接]
1359|3
 楼主| Micachl 发表于 2016-3-12 20:57 | 显示全部楼层 |阅读模式
大家都知道,STM32的片内资源是相当丰富的,而这些资源里面,要数定时器功能最强大了,F042K6有1个16位高级控制定时器,1个32位4个16位通用定时器,共26通道PWM输出,用来控制电机是非常不错的,下面,让我们看看定时器的PWM输出功能。

看原理图:




板载LED连在了PB3上,而PB3正好是TIM2的CH2,那么,本篇将介绍如何使用定时器弄一个呼吸灯。


新建工程目录如图,并添加相应标准库文件




选择型号,建立工程
 楼主| Micachl 发表于 2016-3-12 20:58 | 显示全部楼层
编写初始化代码如下:
  1. void TIM_Init(void)
  2. {
  3.         GPIO_InitTypeDef GPIO_InitStructure;
  4.         TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
  5.         TIM_OCInitTypeDef TIM_OCInitStructure;
  6.         
  7.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
  8.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB,ENABLE);
  9.         
  10.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;
  11.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
  12.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  13.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  14.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  15.         GPIO_Init(GPIOB,&GPIO_InitStructure);
  16.         
  17.         GPIO_PinAFConfig(GPIOB,GPIO_PinSource3,GPIO_AF_2);
  18.         
  19.         TIM_TimeBaseInitStructure.TIM_ClockDivision = 0;
  20.         TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Down;
  21.         TIM_TimeBaseInitStructure.TIM_Period = 1000-1;
  22.         TIM_TimeBaseInitStructure.TIM_Prescaler = 48-1;
  23.         TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);
  24.         
  25.         TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;
  26.         TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
  27.         TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;
  28.         TIM_OCInitStructure.TIM_Pulse = 0;
  29.         TIM_OC2Init(TIM2,&TIM_OCInitStructure);

  30.         TIM_CtrlPWMOutputs (TIM2,ENABLE);
  31.         
  32.         TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);  //CH2
  33.         TIM_ARRPreloadConfig(TIM2, ENABLE);
  34.         
  35.         TIM_Cmd(TIM2,ENABLE);
  36. }

然后编写呼吸灯相关代码
  1. i=0;
  2.                 while(i+=5)
  3.                 {
  4.                         TIM_SetCompare2(TIM2,i);
  5.                         delay_ms(10);
  6.                         if(i>=1000)
  7.                                 break;
  8.                 }
  9.                 i=1000;
  10.                 while(i-=5)
  11.                 {
  12.                         TIM_SetCompare2(TIM2,i);
  13.                         delay_ms(10);
  14.                         if(i<=0)
  15.                                 break;
  16.                 }
  17.                 delay_ms(1000);
  18.                 delay_ms(1000);
 楼主| Micachl 发表于 2016-3-12 21:00 | 显示全部楼层
写完,编译连接下载,便可以看到这颗绿色LED渐亮渐灭了。



呼吸灯.rar

4.1 MB, 下载次数: 13

eurphan 发表于 2016-3-13 13:13 | 显示全部楼层
转载请注明出处,谢谢~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

43

主题

300

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部