赞
踩
目录
定时器可以提供精确的时间基准,用于实现各种时间相关的功能,如定时执行任务、延时控制等。单片机系统通常需要在特定的时间点执行某些操作,例如定时采集传感器数据、发送数据、控制执行器等,定时器可以帮助实现这些功能。
定时器可以用于计算事件的发生次数或持续时间。通过定时器可以统计外部事件的频率、测量脉冲的宽度、计算两个事件之间的时间间隔等。这对于许多应用场景如计时、频率测量、脉冲宽度调制(PWM)等至关重要。
定时器通常可以配置为在特定时间点触发中断,从而实现及时响应某些事件或执行任务。中断可以使单片机在处理多任务时能够更加灵活,提高系统的实时性和响应能力。
定时器可以帮助实现功耗优化策略,例如周期性地使单片机从低功耗模式唤醒以执行任务,然后再进入低功耗模式等待下一次触发。这在对电池供电的嵌入式系统中尤为重要,可以延长系统的电池寿命。
在单片机开发中基本都有用到定时,在HT32中有5中定时器实现方式,定时要用到计时控制单片机或者做时钟功能的一般是用基本定时器。现在对它进行分析编程理解。下面是它在芯片上一些关联配置。
AHB总线
下面是配置部分
- #include "Timer.h"
- // SystemCoreClock/1000 == 1ms , SystemCoreClock 1Hz= 1s
- //100ms触发一次
- void BFTM0_Configuration(void)
- {
- CKCU_PeripClockConfig_TypeDef CKCUClock = {{ 0 }};
- CKCUClock.Bit.BFTM0 = 1;
- CKCU_PeripClockConfig(CKCUClock, ENABLE);
-
- // 设置定时器计数器初值和比较值
- BFTM_SetCounter(HT_BFTM0, 0);
- BFTM_SetCompare(HT_BFTM0, SystemCoreClock/10); //100ms产生中断
-
- // 清除中断标志位
- BFTM_ClearFlag(HT_BFTM0);
- // 开启定时器中断
- BFTM_IntConfig(HT_BFTM0, ENABLE);
- // 使能中断向量
- NVIC_EnableIRQ(BFTM0_IRQn);
- // 启动定时器
- BFTM_EnaCmd(HT_BFTM0, ENABLE);
- }
BFTM1也是类似配置即可
- #ifndef __TIMER_H__
- #define __TIMER_H__
-
-
- #include "ht32.h"
-
- void BFTM0_Configuration(void);
-
- #endif
main.c
- #include "ht32.h"
- #include "ht32_board.h"
- #include "led.h"
- #include "delay.h"
- #include "USART.h"
- #include "IIC.h"
- #include "SHT30.h"
- //#include "modbus485.h"
- #include "motor.h"
- #include "DC_Motor.h"
- //#include "Timer.h"
- #include "Lock.h"
-
- volatile u32 milliseconds = 0;
- volatile u32 seconds = 0;
-
-
- int main()
- {
- USART0_Configuration();
-
- BFTM0_Configuration();
-
-
- while(1)
- {
-
- }
-
- }
-
- // 定时器中断处理函数
- void BFTM0_IRQHandler(void) {
- // 每次定时器中断,毫秒数加1
- milliseconds++;
- // 每秒更新一次秒数
- if (milliseconds >= 10) {
- milliseconds = 0;
- seconds++;
- printf("%3d\n", seconds);
- }
- // 处理完成后清除中断标志位
- BFTM_ClearFlag(HT_BFTM0);
- }
BFTM
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。