NXP

LPC1768 PWM单边沿触发

2019-07-12 13:33发布

   在总结孙安青老师编著的  《ARM Cortex-M3嵌入式开发实例详解——基于NXP LPC1768》的基础上写下这篇很基础的PWM单边沿触发,很感谢孙老师的书,在此表示感谢。同时我的代码是在开发板的历程上修改的,主要是验证电路板上PWM。由于我的开发板的P2.1(74引脚)引脚接的是LED,所以我就选用该引脚作为PWM的输出。以下是我pwm.c代码:pwm.c*********************************************************************************************************/
#include "lpc17xx.h"
#include "pwm.h"


#define PCLK 25000000                                        //外设频率为25MHz,可以在手册功率中知道
unsigned  long PulseLength = 20;                        //PWM占空比变量,在此修改占空比


/*********************************************************************************************************
** Function name:       uint32_t PWM1_Init(void) 
** Descriptions:       初始化单边沿PWM输出
** input parameters:    无
** output parameters:   无
** Returned value:      无
*********************************************************************************************************/
void PWM1_Init( void )
{
 LPC_PINCON->PINSEL4 = (1 << 2);        //配置P2.1引脚为PWM1.2功能
    LPC_PWM1->CTCR = 0;         //PWM1工作于定时模式
  LPC_PWM1->PR = 0;       //PWM1预分频比为1:1
 LPC_PWM1->PC = 0;              
          LPC_PWM1->TC = 0;                                //定时器设置为0
  LPC_PWM1->TCR = 0x02;                        //复位PWM1定时器
 //以下很重要,可以查看手册P468   PWM触发器的置位和复位输入
 LPC_PWM1->MR0 = PCLK - 1;                //配置PWM1.2的PWM频率为1HZ (可以修改频率)   匹配位置都是MR0
  LPC_PWM1->MR2 = (LPC_PWM1->MR0 + 1) * PulseLength / 100 - 1;//匹配PWM1.5的PWM的占空比为20%(可以修改)  复位位置的MR2(此处的2是根据选择的PWM不同不同,我这里是2,如果选择是PWM1.5则,此处的2是就改为5,查看手册P468)    LPC_PWM1->LER =  (1 << 2);                         //锁存PWM值并生效,需要改动此处
   LPC_PWM1->MCR = 0x02;                     //MR0与TC匹配时复位TC,不需要修改
           LPC_PWM1->PCR =(0 << 2)|(1 << 10);           //配置PWM1.2为单边为输出,并使能输出,需要修改此处
   LPC_PWM1->TCR = 0x09;                                //使能PWM1.2定时器并使能PWM功能,不需要改动此处}然后就是主函数main.c#include "lpc17xx.h"
#include "pwm.h"

//LED函数
void LED_config(void)
{
LPC_GPIO2->FIODIR |= 0x0000000ff; 
}
/*********************************************************************************************************
** Function name:       int main (void)
** Descriptions:       主函数
** input parameters:    无
** output parameters:   无
** Returned value:      无
*********************************************************************************************************/
int main (void)
{    
SystemInit();//系统初始化
        PWM1_Init();//PWM初始化
LED_config();

while(1);
}


/******************************************************************************
**                            End Of File
******************************************************************************/实验验证可以。以上就是LPC1768PWM单边沿输出简单代码。