LPC1768 PWM1输出PWM示例

void Init_PWM1(void)
{
	LPC_PINCON->PINSEL7 |= (3<<18);	// P3.25 
	LPC_PWM1->CTCR=0;	//工作于定时器模式
	LPC_PWM1->PR=4;		//预分频比例为1:5
	LPC_PWM1->PC=0;
	LPC_PWM1->TC=0;
	LPC_PWM1->MR0=PCLK0/10000-1;		//配置PWM频率为10kHz
	LPC_PWM1->MR2=(LPC_PWM1->MR0+1)*(15)/100-1;	//配置PWM1.2的PWM占空比为15
	LPC_PWM1->LER=(1<<2)|(1<<0);	//锁存PWM值并立即生效
	LPC_PWM1->MCR=0x02;				//LPC_PWM1->TC计数到LPC_PWM1->MR0的时候TC复位
	LPC_PWM1->PCR=(1<<10)|(0<<2);	//配置PWM1.2为单边输出,并使能
	LPC_PWM1->TCR=(1<<3)|(1<<0);	//使能PWM1定时器并使能PWM功能
}

观察上图,通过调整占空比(MR2寄存器)可以调整占空比;

通过PR寄存器可以在不改变占空比的情况下调整PWM的频率;

 

如果要想动态修改PWM的占空比,可以随时调用如下2句:

LPC_PWM1->MR2=(LPC_PWM1->MR0+1)*duty/100-1;  //duty就是占空比

LPC_PWM1->LER=(1<<2)|(1<<0);    //锁存PWM值并立即生效

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在LPC1778中,可以通过Timer/Counter模块来输出PWM波。下面是一个简单的示例代码,可以输出一个50%占空比的PWM波: ```c #include "LPC177x_8x.h" #include "timer.h" #define PWM_PIN 2 // PWM输出引脚,这里以P0.2为例 void InitPWM(void) { // 初始化定时器 TIM_TIMERCFG_Type TIM_ConfigStruct; TIM_ConfigStruct.PrescaleOption = TIM_PRESCALE_USVAL; TIM_ConfigStruct.PrescaleValue = 1; TIM_Init(LPC_TIM0, TIM_TIMER_MODE, &TIM_ConfigStruct); // 设置PWM周期 uint32_t period_us = 1000; // PWM周期为1ms uint32_t period_ticks = SystemCoreClock / (1000000 / period_us); TIM_UpdateMatchValue(LPC_TIM0, 0, period_ticks); // 设置PWM占空比 uint32_t duty_us = 500; // 占空比为50% uint32_t duty_ticks = period_ticks * duty_us / period_us; TIM_UpdateMatchValue(LPC_TIM0, 1, duty_ticks); TIM_SetMatchControl(LPC_TIM0, 1, TIM_MATCH_TOGGLE); // 配置PWM输出引脚 LPC_IOCON->P0_2 &= ~0x3F; LPC_IOCON->P0_2 |= 0x02; // 将P0.2配置为PWM输出引脚 // 启动定时器 TIM_Cmd(LPC_TIM0, ENABLE); } int main(void) { InitPWM(); while (1) { // do something } return 0; } ``` 在这段代码中,我们使用了LPCOpen提供的Timer/Counter库函数来初始化定时器,并设置PWM周期和占空比。注意,在设置占空比时,我们使用了TIM_MATCH_TOGGLE选项,这将使定时器在比较匹配时翻转PWM输出引脚的电平,从而实现PWM输出。 在配置完定时器后,我们将PWM输出引脚配置为PWM输出模式,并启动定时器。在主循环中,我们可以添加自己的代码,这里略去。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值