前段时间因为准备比赛和一系列的事情没有更新帖子,最近总算抽出时间了来继续更新我们的uFun开发板的试用体验报告,本次的话我们要去驱动三色LED灯和蜂鸣器。 先说一下LED灯吧,板载了一颗三色的全彩RGB灯(LED1),如下图所示。
从原理图中可以以看出,在LED1的内部是集成了3颗单色的LED灯(分别是红色、蓝色、绿色),我们可以通过调节PWM调节占空比的方式来调节每个灯珠的亮度,RGB三个颜色亮度不同的掺杂情况将展现出不同的颜色,就像下图所示。
下面我们来说说PWM,PWM全名Pulse Width Modulation,翻译过来就是脉冲宽度调制技术,通俗的来说就是通过高速的开关作用来控制灯的亮暗程度。具体的PWM的介绍可以参看爱搞机(http://www.igao7.com/news/201807/oJMDaPCKHbeufGdI.html)的《PWM调光科普(上篇):人类显示器的黑历史》这篇文章的讲解,这里就不再过度的做赘述。 然后我们说一下板子上的IO连接,经过程序的测试我发现原理图上的标注实际上是错误的,如下图所示。
实际上PA0------->PWM_R PA1------->PWM_G PA2------->PWM_B 从原理图中我们可以知道,PA0、PA1、PA2三个IO的复用功能都有一个在TIM5,因此我们可以使能定时器5作为一个PWM发生器。具体的配置流程为: - 使能APB2和相应的GPIO
- 设置定时器5的预装在值和分频系数
- 初始化定时为PWM模式,并且初始化相应的通道
- 使能定时器5
经过以上几个步骤之后我们就已经将LED使用的GPIO口配置成了PWM模式我们可以写一个呼吸灯的程序来验证我们的配置是否成功。具体的程序编写思路如下:
- 初始化一个变量i;
- 让i在嵌套循环中去遍历三个PWM通道的输出脉宽;
- 在i变量==定时器5的预分频系数时(脉宽100%)让i循环减小;
- 在减小的过程中在去遍历PWM通道;
最后附上程序,谢谢各位读者赏光!
|