本次实验分享的是合泰HT32F52352中的基本定时器BFTM的使用,通过定时器实现LED的1s闪烁
在合泰HT32F52352系统中一共有5种定时器
实验效果
ht32定时器
了解HT32F52352单片机内核特性
1、马达控制定时器 – MCTM
2、PWM 产生和捕捉定时器 – GPTM
3、单通道产生与捕捉定时器 – SCTM
4、基本功能定时器 – BFTM
5、看门狗定时器 – WDT
time.c
#include "time.h"
#include "led.h"
#include "uart.h"
uint16_t count = 0; //计时
uint8_t led_flag = 0; //led进行翻转标志
void Timer_Init(void)
{
CKCU_PeripClockConfig_TypeDef CKCUClock= {{0}};
CKCUClock.Bit.BFTM1 = 1; //开启中断时钟
CKCU_PeripClockConfig(CKCUClock, ENABLE);
NVIC_EnableIRQ(BFTM1_IRQn);
BFTM_SetCounter(HT_BFTM1, 0);
//BFTM_SetCompare(HT_BFTM1, SystemCoreClock);//定时1s产生中断
BFTM_SetCompare(HT_BFTM1, SystemCoreClock/1000);//定时1ms产生中断
BFTM_IntConfig(HT_BFTM1, ENABLE);//使能中断
BFTM_EnaCmd(HT_BFTM1, ENABLE);//使能BFTM
}
void BFTM1_IRQHandler(void)
{
if(BFTM_GetFlagStatus(HT_BFTM1) != RESET )
{
count++;
if(count == 1000) //1s
{
printf("-------------LED 1S FLASH TEST------------\n");
count = 0;
if(led_flag == 0)
{
LED1_ON();
led_flag = 1;
}
else if(led_flag == 1)
{
led_flag = 0;
LED1_OFF();
}
}
BFTM_ClearFlag(HT_BFTM1);//清除中断标志
}
}
time.h
#ifndef _TIME_H_
#define _TIME_H_
#include "ht32f5xxxx_bftm.h"
void Timer_Init(void);
#endif
main.c
#include "ht32.h"
#include "ht32_board.h"
#include "led.h"
#include "delay.h"
#include "uart.h"
#include "time.h"
/**********************TH32 定时器闪烁点灯**********************
Author:小殷
Date:2022-4-21
***************************************************************/
int main()
{
Led_Init();
Timer_Init();
USARTx_Init();
printf("---------Time Test------\n");
while(1)
{
}
}
对系统时钟进行分析
我们点击SystemCoreClock进行跳转,然后去将每个参数记录下来
32-bit ARM® CortexTM-M0+ 处理器内核
高达 48MHz 的工作频率
系统时钟分析
//我们从下往上推会发现这里的系统时钟最终为48Mhz 也是该系统的最大时钟
SystemCoreClock = __CK_AHB
__CK_AHB (__CK_SYS >> HCLK_DIV)
//48Mhz 1分频相当于没变
HCLK_DIV (0) /*!< 0: DIV1, 1: DIV2, 2: DIV4, 3: DIV8, 4: DIV16, 5: DIV32
_CK_SYS __CK_PLL
__CK_PLL (__CK_VCO >> PLL_NO2_DIV)
//48Mhz 一分频 相当于没变
PLL_NO2_DIV (0) /*!< 0: DIV1, 1: DIV2, 2: DIV4, 3: DIV8
__CK_VCO (HSE_VALUE * PLL_NF2_DIV)
//8000000*6 = 48Mhz
HSE_VALUE 8000000UL
PLL_NF2_DIV (6) /*!< 1~16: DIV1~DIV16
以上就是对HT32F52352通用定时器的基本使用