[活动专区] 【AT-START-F425测评】6、TMR

[复制链接]
 楼主| lisingch 发表于 2022-3-20 17:10 | 显示全部楼层 |阅读模式
本帖最后由 lisingch 于 2022-3-20 17:12 编辑

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

一、知识准备
      本次实验使用了TMR3,这是一个通用型的16位精度定时器。所谓定时器无非就是对脉冲进行计数操作,关键的参数就是脉冲的频率。
2022-03-20_142525.bmp
从上面描述中可以看出TMR3的计数时钟可使用内部CK_INT时钟,但在手册中没有查到关于“CK_INT”的更多说明。
2022-03-20_163545.bmp
在上图中可以看到“TMR_CLK”,这个有来路
2022-03-20_143605.bmp
2022-03-20_143637.bmp
2022-03-20_143114.bmp
      另外,通过分析“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
2022-03-20_165246.bmp

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

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

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


  12.   nvic_priority_group_config(NVIC_PRIORITY_GROUP_0);
  13.   nvic_irq_enable(TMR3_GLOBAL_IRQn, 0, 0);

  14.   tmr_counter_enable(TMR3, TRUE);
  15. }
TMR3中断溢出100ms处理:
  1. void TMR3_GLOBAL_IRQHandler(void)
  2. {
  3.         if(tmr_flag_get(TMR3, TMR_OVF_FLAG) != RESET)
  4.   {
  5.     at32_led_toggle(LED4);
  6.     tmr_flag_clear(TMR3, TMR_OVF_FLAG);
  7.   }
  8. }


三、实验结果
2022-03-20_162327.bmp

TMR.rar (286.4 KB, 下载次数: 5)

评论

[url=home.php?mod=space&uid=2502980]@mxkw0514[/url] :就是某宝上最便宜的那种。  发表于 2022-3-20 17:25
这种逻辑分析仪是以上位机显示波形的吗?  发表于 2022-3-20 17:14
您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

15005

帖子

19

粉丝
快速回复 在线客服 返回列表 返回顶部

99

主题

15005

帖子

19

粉丝
快速回复 在线客服 返回列表 返回顶部