打印
[活动专区]

【AT-START-F425测评】6、TMR

[复制链接]
665|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 lisingch 于 2022-3-20 17:12 编辑

      本次实验为利用定时器产生100ms计时中断控制板载LED4产生亮、灭变化。同时利用逻辑分析仪对这一中断电平变化进行捕捉验证。

一、知识准备
      本次实验使用了TMR3,这是一个通用型的16位精度定时器。所谓定时器无非就是对脉冲进行计数操作,关键的参数就是脉冲的频率。

从上面描述中可以看出TMR3的计数时钟可使用内部CK_INT时钟,但在手册中没有查到关于“CK_INT”的更多说明。

在上图中可以看到“TMR_CLK”,这个有来路



      另外,通过分析“system_clock_config()”可以得知系统时钟来自外部晶振被12倍“PLL”了,即fTMR_CLK = 8MHz * 12 = 96MHz。后面的实验中按此数据计算TMR3的配置数据。在TMR3配置中有个“void tmr_base_init(tmr_type* tmr_x, uint32_t tmr_pr, uint32_t tmr_div)”函数,其中参数“tmr_pr”、“tmr_div”的内容对应“TMRx_PR”与“TMRx_DIV”两个寄存器。
“tmr_div”决定TMR3计数脉冲频率:CK_INT = TMR_CLK / tmr_div;
“tmr_pr”决定TMR3计数个数(中断溢出时间):中断溢出时间 = CK_INT * tmr_pr


二、程序实现
TMR3配置:
void TMR_Config(void)
{
        crm_periph_clock_enable(CRM_TMR3_PERIPH_CLOCK, TRUE);

/*
        系统时钟=96MHz
        CK_INT = 系统时钟/TMR_DIV = 96MHz/9600 = 10000 = 1MHz = 0.0001s
        溢出中断时间 = CK_INT*TMR_PR = 0.0001s * TMR_PR = 0.0001s * 1000 = 0.1s =100ms
        */
  tmr_base_init(TMR3, TMR_PR-1, TMR_DIV-1);
  tmr_cnt_dir_set(TMR3, TMR_COUNT_UP);//向上计数

  tmr_interrupt_enable(TMR3, TMR_OVF_INT, TRUE);//使能TMR3溢出中断


  nvic_priority_group_config(NVIC_PRIORITY_GROUP_0);
  nvic_irq_enable(TMR3_GLOBAL_IRQn, 0, 0);

  tmr_counter_enable(TMR3, TRUE);
}
TMR3中断溢出100ms处理:
void TMR3_GLOBAL_IRQHandler(void)
{
        if(tmr_flag_get(TMR3, TMR_OVF_FLAG) != RESET)
  {
    at32_led_toggle(LED4);
    tmr_flag_clear(TMR3, TMR_OVF_FLAG);
  }
}


三、实验结果


TMR.rar (286.4 KB)

使用特权

评论回复
评论
lisingch 2022-3-20 17:25 回复TA
@mxkw0514 :就是某宝上最便宜的那种。 
mxkw0514 2022-3-20 17:14 回复TA
这种逻辑分析仪是以上位机显示波形的吗? 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

14979

帖子

17

粉丝