两个LED灯尽管能够闪了,可是总是需求CPU的参加。现在测验运用一种更为自动化的办法:让脉宽调制(PWM)操控器输出具有必定周期和占空比的方波,以此操控LED灯的亮灭。
一、完成思路
仍然运用蓝色和琥珀色的LED灯。开发板上能启用四个PWM通道,每个通道能输出两个互补的方波。咱们会启用其间的一个通道,然后让这个通道的两个输出别离操控一个LED灯。可是由于这两个引脚上不存在同一通道的输出,所以需求第三个引脚辅佐。
咱们将运用PWM的通道0。
1. PWMH0输出至引脚PA0(外设A)。
2. PWML0输出至引脚PC0(外设B)。
3. 引脚PD20装备为纯输入引脚。
4. 将PC0和PD20两个引脚短接起来。
这样就能够使这两个LED灯替换闪耀了。
二、PWM设置
在PMC中启用PWM时钟。
1
2
3
4/* PMC 启用
* PWM的ID大于31,需求在PMC_PCER1中启用
*/
PMC->PMC_PCER1 = 1 << (ID_PWM – 32);
禁用PWM通道。
通道在启用时不能进行完好的操控,先禁用通道。
1
2/* 禁用通道0,以进行装备 */
PWM->PWM_DIS = PWM_DIS_CHID0;
设置时钟。
通道挑选的时钟直接或直接由主时钟分频得到。由于主时钟频率较高,所认为确保能发生肉眼可见的闪耀,这儿会挑选尽可能大的分频数。为对PWM的特性有更多的了解,咱们将敞开它的Clock A。
经过向PWM时钟操控器的(PWM_CLK)中的PERA字段写入 9,以装备Clock A的输入时钟为MCK / 512;经过向DIVA字段写入125,再将输入时钟进行125分频。装备完成后,CLKA输出的时钟的频率即为MCK / (512 * 125)。初始化时,MCK的频率为4MHz(4000000Hz),所以CLKA输出频率即为62.5 Hz。
1
2
3/* clockA */;
PWM->PWM_CLK = PWM_CLK_DIVA(125)
| PWM_CLK_PREA(9);
挑选通道的形式。
为简略起见,将运用默许的特点:周期为左对齐,极性为先输出低电平,不运用中止以及死区发生器。一起,在这儿为通道挑选时钟CLKA。
1
2/* 装备通道0 */
PWM->PWM_CH_NUM[0].PWM_CMR = PWM_CMR_CPRE_CLKA;
装备周期和占空比。
为调查便利,将输出脉冲方波的周期设置为2秒,占空比50%。由于运用的时钟频率为62.5Hz,所以需求将计数器的周期设置为62.5 * 2 = 125。将比较器阀值设置为63,使占空比大约为50%。
1
2PWM->PWM_CH_NUM[0].PWM_CPRD = PWM_CPRD_CPRD(125); /* 周期 */
PWM->PWM_CH_NUM[0].PWM_CDTY = PWM_CDTY_CDTY(63); /* 占空比,精确来说是阀值 */
使能PWM通道。
1
2/* 使能 PWM */
PWM->PWM_ENA = PWM_ENA_CHID0;
三、PIO设置
在完成思路中现已说明晰PIO引脚的装备,并且不是太为杂乱,且后边将会给出完好代码,这儿就不独自解说了。