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,蜂鸣器的电平翻转一次,同时串口可以看到开发板的打印信息。

注意事项

  1. 本实验采用的是外部晶振,晶振频率32M。
  2. 本实验的设置定时器的基本单位是ms,如果需要us级的定时,可自行修改代码实现。
  3. 应尽可能避免在中断函数内部执行过多代码,应使用标志位的方式,将代码动作放在中断响应函数外部执行。
posted @ 2022-02-07 14:43  realiot  阅读(437)  评论(0)    收藏  举报