专注电子技术学习与研究
当前位置:单片机教程网 >> STM32 >> 浏览文章

Rainbow通过PWM输出控制LED亮度

作者:huqin   来源:本站原创   点击数:  更新时间:2014年05月06日   【字体:

    PWM广泛用于电机调速、LED控制器调光等领域,有些开源硬件(如:Arduino)将这种输出称之为“模拟输出”。Rainbow使用的MCU包含四个通用定时器,每个定时器可以支持四个通道的PWM输出,所以理论上我们可以使用的PWM输出管脚有16个。Rainbow的软件设计中使用36M时钟作为定时器的计数时钟,使用12bit的计数,因此占空比可以在0-100%之间有4096个不同的PWM输出等级,对应的PWM波的频率大约为9K左右。

 
    在Rainbow中进行PWM输出非常简单,只需要按照下列步骤即可:
    1、设置对应管脚的输出模式为:GPIO_Mode_Out_PP,例如:我们使用PA0输出PWM,pinMode(PA0, GPIO_Mode_Out_PP);
    2、调用pwmWrite()在指定管脚输出PWM,如:pwmWrite(PA0, 100),表示在PA0口输出的PWM占空比为:100/4096 * 100%
 
    在软件包的“Projects\PWM”文件夹包含了本文的完整工程,可以直接编译、烧写和调试。来看看main.cpp的代码:
#include "WProgram.h"
 
void setup()
{
  //初始化开发板
  boardInit();
  //设置LED的输出模式
  pinMode(LED1_PIN, GPIO_Mode_Out_PP);
}
 
void loop()
{
  //先让LED从暗变亮
  for(int16_t i=0; i<0x0FFF; i+=100)
  {
    pwmWrite(LED1_PIN, i);
    //延时100ms
    delay(100);
  }
 
  //再让LED从亮变暗
  for(int16_t i=0x0FFF; i>0; i-=100)
  {
    pwmWrite(LED1_PIN, i);
    //延时100ms
    delay(100);
  }
}
 
int main(void)
{
  setup();
  while(1) loop();
}
    程序非常简单,在setup()函数中设置了PWM输出管脚的模式为GPIO_Mode_Out_PP,然后通过一个循环使得LED由暗变亮,然后再由亮变暗,周而复始进行。
 
    上面的程序编译无误后,将程序烧写到Rainbow中,我们可以看到板载的LED亮度由暗变亮,然后再由亮变暗。
关闭窗口

相关文章