一:CW32L0系列几种定时器介绍:
CW32L010 微控制器内部集成一个通用定时器、三个基本定时器、一个低功耗定时器和一个高级控制定时器。各个定时器的功能差异如下表所示:
高级定时器(ATIM):
高级定时器 (ATIM) 包含一个 16bit 自动重载计数器,并由一个可编程的预分频器驱动。ATIM 支持定时、计数、复位、门控、触发和编码器等多种工作模式,带6路独立的捕获/比较通道,可实现6路独立 PWM 输出或6对带死区互补PWM 输出或对6路输入进行捕获。可用于基本的定时/计数、测量输入信号的脉冲宽度和周期、产生输出波形(PWM、单脉冲、插入死区时间的互补 PWM 等)。
通用定时器(GTIM):
通用定时器 (GTIM)包含一个 16bit 自动重载计数器,并由一个可编程预分频器驱动。GTIM 支持定时、计数、复位、门控、触发和编码器等多种工作模式,带4路独立的捕获/比较通道,可以测量输入信号的脉冲宽度(输入捕获)或者产生输出波形(输出比较和 PWM)。
低功耗定时器(LPTIM):
内部集成1个 16 位低功耗定时器(LPTIM),可以以很低的功耗实现定时或对外部脉冲计数的功能。通过选择合适的时钟源和触发信号,可以实现系统低功耗休眠时将其唤醒的功能。LPTIM 内部具有一个比较寄存器,可实现比较输出和 PWM 输出,并可以控制输出波形的极性。此外,LPTIM 还可以与正交编码器连接,自动实现递增计数和递减计数。
基本定时器(BTIM1..3):
内部集成3个基本定时器(BTIM),每个 BTIM 完全独立且功能完全相同,各包含一个 16bit 自动重装载计数器并由一个可编程预分频器驱动。BTIM 支持内部计数模式、外部计数模式、触发启动模式和门控计数模式4种工作模式,支持更新事件和触发事件发生时产生中断。不同工作模式下均可由复位输入信号控制计数器复位。
独立看门口(IWDT):
内部集成独立看门狗定时器(IWDT),一旦启动 IWDT,用户需要在规定时间隔内对 IWDT的计数器进行重载,否则产生溢出会触发复位或产生中断信号。IWDT 启动后,可停止计数。用户可选择在深度休眠模式下IWDT保持运行或暂停计数。
专门设置的键值寄存器可以锁定 IWDT 的关键寄存器,防止寄存器被意外修改。
SysTick定时器:
此定时器常用于实时操作系统,但也可用作标准递减计数器。它的特点是:
24 位递减计数器
自动重装载能力
当计数器达到0时产生可屏蔽的系统中断
二:简单分享一下高级定时器的主要特点:
16bit 递增、递减和递增/递减自动重载计数器可编程预分频器支持 1、2、3、4、…、65536 分频支持单次计数模式和连续计数模式6 路独立输入捕获和输出比较通道死区时间可编程的互补 PWM 输出支持双点比较移相,支持逻辑与移相
支持2个刹车输入
触发输入信号(TRGI)控制定时器实现多种从模式定时器级联 ITR 和片内外设互联 ETR支持针对定位的增量(正交)编码器和霍尔传感器电路多种事件发生时产生中断请求
- 更新事件
触发事件
输入捕获
输出比较
换向事件
刹车事件
编码器事件
三:简单分享一下 使用外部时钟模式的编程过程:
ATIM_CH1 通道的上升沿进行计数,步骤如下:
步骤 1:设置SYSCTRL AHBEN,GPIO为1,SYSCTRL APBEN1.TIM为1,打开ATIM_CH1引脚对应的GPIO时钟和ATIM配置时钟及工作时钟;
步骤 2:将 ATIM CH1引脚对应的 GPI0 配置成复用输入模式,具体寄存器配置请参见8通用输入输出端口(GPIO);
步骤3:设置ATIM TISEL1.TI1SEL为0,选择TI1来源为ATIMCH1通道;
步骤 4:设置 ATIM_CCMRICAP.ICIF,配置输入滤波带宽,
步骤5:设置 ATIM CCER.CCINP为0、ATIM CCER.CCIP为0,选择上升沿计数有效;步骤
6: 设置ATIM SMCR.TS为0x5,选择TRGI输入为TI1FP1;
步骤7:设置ATIM_SMCR.SMS为0x7,使ATIM工作于外部时钟模式1;
步骤8:设置ATIM IER.UIE为1并配置对应NVIC,使能更新中断;
步骤 9:配置计数器预分频器 ATIM_PSC;
步骤 10:设置期望的重载值;
步骤 11:设置ATIM CR 1.CEN为1,使能计数器;
步骤 12:当计数器溢出时,ATIM_ISR.UIF标志位置1,进入中断服务程序,设置ATIM_ICR.UIF为0清除该中断标志。
四:软件编写:
4.1使用 CW32单片机的定时器时候,注意使能高级定时器的中断
void NVIC_Configuration(void)
{
__disable_irq();
NVIC_EnableIRQ(ATIM_IRQn);
__enable_irq();
}
4.2 配置高级定时器的基本参数:预分频系数、分频系数、触发模式、重装值等等如下所示,配置完成后,记得使能定时器,这时候定时器开始工作
就计算方法: 定时器的主频为 8Mhz。8000000 /80 =100000 100000/10000 =10次,也就是说 每秒进入中断的次数为10次,
ATIM_InitStruct.BufferState = ENABLE; //使能缓存寄存器
ATIM_InitStruct.CounterAlignedMode = ATIM_COUNT_ALIGN_MODE_EDGE; //边沿对齐
ATIM_InitStruct.CounterDirection = ATIM_COUNTING_UP; //向上计数;
ATIM_InitStruct.CounterOPMode = ATIM_OP_MODE_REPETITIVE; //连续运行模式
ATIM_InitStruct.Prescaler = 80-1; // 80分频
ATIM_InitStruct.ReloadValue = 9999; // 重载周期9999+1
ATIM_InitStruct.RepetitionCounter = 0; // 重复周期0
ATIM_Init(&ATIM_InitStruct);
ATIM_ITConfig(ATIM_IT_UIE, ENABLE); // 有重复计数器溢出产生进入中断
ATIM_Cmd(ENABLE);
4.3 定时器中断回调函数编写
void ATIM_IRQHandlerCallBack(void)
{
if (ATIM_GetITStatus(ATIM_STATE_UIF))
{
ATIM_ClearITPendingBit(ATIM_STATE_UIF);
PB03_TOG();
}
}
试验现象:板载的LED1以100ms的间隔闪烁。
|