当前位置:   article > 正文

HT32 基本定时器(BFTM0,BFTM1)实现计时功能

HT32 基本定时器(BFTM0,BFTM1)实现计时功能

目录

定时器作用、重要性

精确的时间控制

事件计数

中断触发

功耗优化

HT32(BFTM0,BFTM1)

Timer.c

Timer.h

视频演示


定时器作用、重要性

精确的时间控制

         定时器可以提供精确的时间基准,用于实现各种时间相关的功能,如定时执行任务、延时控制等。单片机系统通常需要在特定的时间点执行某些操作,例如定时采集传感器数据、发送数据、控制执行器等,定时器可以帮助实现这些功能。

事件计数

         定时器可以用于计算事件的发生次数或持续时间。通过定时器可以统计外部事件的频率、测量脉冲的宽度、计算两个事件之间的时间间隔等。这对于许多应用场景如计时、频率测量、脉冲宽度调制(PWM)等至关重要。

中断触发

         定时器通常可以配置为在特定时间点触发中断,从而实现及时响应某些事件或执行任务。中断可以使单片机在处理多任务时能够更加灵活,提高系统的实时性和响应能力。

功耗优化

         定时器可以帮助实现功耗优化策略,例如周期性地使单片机从低功耗模式唤醒以执行任务,然后再进入低功耗模式等待下一次触发。这在对电池供电的嵌入式系统中尤为重要,可以延长系统的电池寿命。

HT32(BFTM0,BFTM1)

        在单片机开发中基本都有用到定时,在HT32中有5中定时器实现方式,定时要用到计时控制单片机或者做时钟功能的一般是用基本定时器。现在对它进行分析编程理解。下面是它在芯片上一些关联配置。

AHB总线

下面是配置部分

Timer.c

  1. #include "Timer.h"
  2. // SystemCoreClock/1000 == 1ms , SystemCoreClock 1Hz= 1s
  3. //100ms触发一次
  4. void BFTM0_Configuration(void)
  5. {
  6. CKCU_PeripClockConfig_TypeDef CKCUClock = {{ 0 }};
  7. CKCUClock.Bit.BFTM0 = 1;
  8. CKCU_PeripClockConfig(CKCUClock, ENABLE);
  9. // 设置定时器计数器初值和比较值
  10. BFTM_SetCounter(HT_BFTM0, 0);
  11. BFTM_SetCompare(HT_BFTM0, SystemCoreClock/10); //100ms产生中断
  12. // 清除中断标志位
  13. BFTM_ClearFlag(HT_BFTM0);
  14. // 开启定时器中断
  15. BFTM_IntConfig(HT_BFTM0, ENABLE);
  16. // 使能中断向量
  17. NVIC_EnableIRQ(BFTM0_IRQn);
  18. // 启动定时器
  19. BFTM_EnaCmd(HT_BFTM0, ENABLE);
  20. }

BFTM1也是类似配置即可

Timer.h

  1. #ifndef __TIMER_H__
  2. #define __TIMER_H__
  3. #include "ht32.h"
  4. void BFTM0_Configuration(void);
  5. #endif

main.c

  1. #include "ht32.h"
  2. #include "ht32_board.h"
  3. #include "led.h"
  4. #include "delay.h"
  5. #include "USART.h"
  6. #include "IIC.h"
  7. #include "SHT30.h"
  8. //#include "modbus485.h"
  9. #include "motor.h"
  10. #include "DC_Motor.h"
  11. //#include "Timer.h"
  12. #include "Lock.h"
  13. volatile u32 milliseconds = 0;
  14. volatile u32 seconds = 0;
  15. int main()
  16. {
  17. USART0_Configuration();
  18. BFTM0_Configuration();
  19. while(1)
  20. {
  21. }
  22. }
  23. // 定时器中断处理函数
  24. void BFTM0_IRQHandler(void) {
  25. // 每次定时器中断,毫秒数加1
  26. milliseconds++;
  27. // 每秒更新一次秒数
  28. if (milliseconds >= 10) {
  29. milliseconds = 0;
  30. seconds++;
  31. printf("%3d\n", seconds);
  32. }
  33. // 处理完成后清除中断标志位
  34. BFTM_ClearFlag(HT_BFTM0);
  35. }

视频演示

BFTM

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/565976
推荐阅读