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

本文介绍了定时器在单片机中的重要性,包括精确时间控制、事件计数、中断触发以及功耗优化。通过HT32系列的BFTM0和BFTM1定时器实例,展示了如何配置定时器、计数和触发中断,以及在实际项目中的使用。
摘要由CSDN通过智能技术生成

目录

定时器作用、重要性

精确的时间控制

事件计数

中断触发

功耗优化

HT32(BFTM0,BFTM1)

Timer.c

Timer.h

视频演示


定时器作用、重要性

精确的时间控制

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

事件计数

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

中断触发

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

功耗优化

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

HT32(BFTM0,BFTM1)

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

AHB总线

下面是配置部分

Timer.c

#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也是类似配置即可

Timer.h

#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

  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值