PAGE1
PAGE1
定时器与计数器应用
定时器与计数器概述
在嵌入式系统中,定时器和计数器是非常重要的模块,它们用于生成定时中断、测量时间间隔、计数外部事件等。LPC1700系列单片机提供了多个定时器和计数器模块,包括通用定时器(GeneralPurposeTimers,GPT)和脉宽调制器(PulseWidthModulation,PWM)。
通用定时器(GPT)
LPC1700系列单片机包含多个通用定时器,每个定时器都可以独立配置和运行。这些定时器可以用于生成定时中断、测量时间间隔、控制外部设备的定时操作等。每个定时器都包括一个32位的计数器和一个32位的预分频器,可以实现多种定时功能。
脉宽调制器(PWM)
脉宽调制器用于生成脉宽调制信号,这种信号在电机控制、LED调光、声音合成等应用中非常常见。LPC1700系列单片机的PWM模块可以生成多路PWM信号,并且支持多种工作模式,如单脉冲模式、连续脉冲模式等。
定时器与计数器的基本配置
通用定时器的配置
通用定时器的基本配置包括设置定时器的时钟源、预分频值、匹配值和中断使能等。以下是一个典型的通用定时器配置步骤:
选择时钟源:LPC1700系列单片机的定时器可以使用内部时钟(如PCLK)或外部时钟源。
设置预分频器:预分频器用于减缓定时器的时钟频率,从而实现更长的定时周期。
设置匹配值:匹配值用于确定定时器在何时触发中断或执行其他操作。
使能定时器:将定时器配置为运行状态。
配置中断:设置定时器中断使能,并配置中断处理函数。
代码示例:配置通用定时器
以下是一个配置通用定时器的示例代码,使用定时器0生成1秒的定时中断:
#includeLPC17xx.h
//定义定时器中断处理函数
voidTimer0_IRQHandler(void){
//清除中断标志
LPC_TIM0-IR=1;
//在这里处理定时器中断
//例如:控制LED闪烁
LPC_GPIO0-FIOSET=(122);//点亮LED
LPC_GPIO0-FIOCLR=(122);//熄灭LED
}
voidTimer0_Init(void){
//使能定时器0的时钟
LPC_SC-PCONP|=(11);
//选择时钟源为PCLK
LPC_TIM0-CTCR=0x00;
//设置预分频器,假设PCLK为100MHz,预分频器设置为10000
LPC_TIM0-PR=9999;//预分频值
//设置匹配值,1秒的定时周期
//1秒=100000000/10000=10000
LPC_TIM0-MR0=10000;//匹配值
//使能MR0匹配中断
LPC_TIM0-MCR=(10);//当匹配值达到时产生中断
//使能定时器0
LPC_TIM0-TCR=(10);//使能定时器
//配置定时器0中断
NVIC_EnableIRQ(Timer0_IRQn);//使能定时器0中断
}
intmain(void){
//初始化GPIO
LPC_PINCON-PINSEL4|=(122);//设置P2.22为GPIO
LPC_GPIO0-FIODIR|=(122);//设置P2.22为输出
//初始化定时器0
Timer0_Init();
while(1){
//主循环
}
}
脉宽调制器(PWM)的配置
PWM模块的配置步骤包括选择时钟源、设置周期、设置占空比、使能PWM输出等。以下是一个典型的PWM配置步骤:
选择时钟源:LPC1700系列单片机的PWM模块可以使用内部时钟(如PCLK)或外部时钟源。
设置周期:周期决定了PWM信号的一个完整的周期时间。
设置占空比:占空比决定了PWM信号高电平持续的时间。
使能PWM输出:将PWM配置为运行状态。
配置中断(可选):设置PWM中断使能,并配置中断处理函数。
代码示例:配置PWM
以下是一个配置PWM的示例代码,使用PWM0生成50Hz的PWM信号,占空比为50%:
#includeLPC17xx.h
voidPWM0_Init(void){
//