第一次使用LPC芯片。在NXP官网上面下载了官方库函数如下图
但是在使用过程中发现该库很多东西都不齐全,比如说硬件pwm,是的,连这个都没有,然后当我想要移植在网上下载的寄存器硬件PWM列子进去的时候,却发现移植不了。原因是因为寄存器编程使用的头文件LPC17xx.h和官方库文件大量重复导致报错,尝试过注释掉重复的内容,但是结果是报错从30个变成117个。
确实有被气到,因此决定自己在官方库的基础上写寄存器开启PWM。遇到有些坑,比如说官方库只给了PWM的基地址而没有映射出来导致无法调用。。等等,需要自己去查阅芯片手册然后重新给他加上。
最终成功开启两个硬件PWM。很好用。
代码如下:
#include “board.h”
#include “PWM.h”
void PWM_Init()
{
LPC_SYSCTL->PCONP|=(1<<6);//ʹÄÜPWMÍâÉ蹦ÂʼĴæÆ÷
LPC_IOCON->PINSEL[4] = (1<<2)|(1<<4);
LPC_PWM1->CTCR=0; //¹¤×÷ÓÚ¶¨Ê±Æ÷ģʽ
LPC_PWM1->PR=0; //Ô¤·ÖƵ±ÈÀýΪ1:5
LPC_PWM1->PC=0;
LPC_PWM1->TC=0;
LPC_PWM1->MR0=2500-1; //ÅäÖÃPWMƵÂÊΪ10kHz pclk/2500-1=10khz
LPC_PWM1->MR2=(LPC_PWM1->MR0+1)(15)/100-1; //ÅäÖÃPWM2.1µÄPWMÕ¼¿Õ±ÈΪ15
LPC_PWM1->MR3=(LPC_PWM1->MR0+1)(15)/100-1; //ÅäÖÃPWM2.2µÄPWMÕ¼¿Õ±ÈΪ15
LPC_PWM1->LER=(1<<2)|(1<<0)|(1<<3); //Ëø´æPWMÖµ²¢Á¢¼´ÉúЧ
LPC_PWM1->MCR=0x02; //LPC_PWM1->TC¼ÆÊýµ½LPC_PWM1->MR0µÄʱºòTC¸´Î»
LPC_PWM1->PCR=(1<<10)|(0<<2)|(1<<11)|(0<<3); //ÅäÖÃPWM1.2Ϊµ¥±ßÊä³ö,²¢Ê¹ÄÜ
LPC_PWM1->TCR=(1<<3)|(1<<0); //ʹÄÜPWM1¶¨Ê±Æ÷²¢Ê¹ÄÜPWM¹¦ÄÜ
}
/************************************************************************************************
º¯ÊýÃû: void PWM_SET(uint16_t duty )
º¯Êý¹¦ÄÜ:ÉèÖÃÕ¼¿Õ±È
²ÎÊý:duty Õ¼¿Õ±È
·µ»ØÖµ:ÎÞ
*************************************************************************************************/
void PWM_SET(uint16_t duty ){
LPC_PWM1->MR2=(LPC_PWM1->MR0+1)*duty/100-1; //duty¾ÍÊÇÕ¼¿Õ±È
LPC_PWM1->MR3=(LPC_PWM1->MR0+1)*duty/100-1; //ÅäÖÃPWM2.2µÄPWMÕ¼¿Õ±ÈΪ15
LPC_PWM1->LER=(1<<2)|(1<<0)|(1<<3); //Ëø´æPWMÖµ²¢Á¢¼´ÉúЧ
}
有问题的可以联系我