CH579M开发笔记08——定时器
专栏目录:CH579M开发笔记——目录
功能概述
CH579M提供了 4 个 26 位定时器,TMR0、TMR1、TMR2 和 TMR3,最长定时时间为 2^26 个时钟周期。
它适用于多种场合,包括测量输入信号脉冲长度(输入捕捉)或者产生输出波形(PWM),另外 TMR1和 TMR2 支持 DMA 功能。每个定时器都是完全独立的,可以一起同步操作。
本次实验的目的是初始化TIM0,实现500ms的定时,并在定时器的中断响应函数中翻转PB3的电平状态、并通过串口打印测试信息。

核心代码
初始化定时器
GPIOB_SetBits(GPIO_Pin_3);
GPIOB_ModeCfg(GPIO_Pin_3, GPIO_ModeOut_PP_5mA);
timer0_init(500);
void timer0_init(u16 ms)
{
TMR0_TimerInit(FREQ_SYS / (1000/ms)); // 设置定时时间 100ms
TMR0_ITCfg(ENABLE, TMR0_3_IT_CYC_END); // 开启中断
NVIC_EnableIRQ(TMR0_IRQn);
}
中断响应
void TMR0_IRQHandler(void) // TMR0 定时中断
{
if (TMR0_GetITFlag(TMR0_3_IT_CYC_END)) {
TMR0_ClearITFlag(TMR0_3_IT_CYC_END); // 清除中断标志
GPIOB_InverseBits(GPIO_Pin_3);
printf("Realiot Timer0 test\r\n");
}
}
功能验证
使用烧录工具将编译后的hex文件写入开发板后,每隔500ms,蜂鸣器的电平翻转一次,同时串口可以看到开发板的打印信息。
注意事项
- 本实验采用的是外部晶振,晶振频率32M。
- 本实验的设置定时器的基本单位是ms,如果需要us级的定时,可自行修改代码实现。
- 应尽可能避免在中断函数内部执行过多代码,应使用标志位的方式,将代码动作放在中断响应函数外部执行。

浙公网安备 33010602011771号