[综合信息] HC32L190 定时器3配置us延时函数

[复制链接]
182|0
小海师 发表于 2025-10-9 15:30 | 显示全部楼层 |阅读模式
一、定时器配置

设置其工作模式为16位自动重载,并使用PCLK时钟源分频至1MHz,使得每个计数周期为1微秒。

二、代码

hd_gpt_timer3.c

#include "hd_gpt_timer.h"

/**
* @brief   TIM3 微秒延时(1 tick = 1 µs)
* @param   us  要延时的微秒数(最大 65535 µs)
*/
void delay_us(uint16_t us)
{
    if (us == 0) return;  // 避免出现 start==CNT 死等
    uint16_t start = Tim3_M0_Cnt16Get();
    while ((uint16_t)(Tim3_M0_Cnt16Get() - start) < us);
}



/**
* @brief   TIM3 初始化,使用 PCLK÷32 → 1 MHz, tick = 1 µs
*           在 main 或系统初始化时调用一次
*/
void Timer3_Init_ForDelay(void)
{
    stc_tim3_mode0_cfg_t cfg;
    DDL_ZERO_STRUCT(cfg);

    Sysctrl_SetPeripheralGate(SysctrlPeripheralTim3, TRUE);

    cfg.enWorkMode = Tim3WorkMode0;
    cfg.enCT       = Tim3Timer;
    cfg.enPRS      = Tim3PCLKDiv32;       // 32MHz / 32 = 1MHz
    cfg.enCntMode  = Tim316bitArrMode;   // 自动重载
    cfg.bEnTog     = FALSE;
    cfg.bEnGate    = FALSE;

    Tim3_Mode0_Init(&cfg);
    Tim3_M0_Cnt16Set(0);  // CNT清零
    Tim3_M0_Run();      // 启动定时器
}








hd_gpt_timer.h

#ifndef HD_GPT_TIMER_H
#define HD_GPT_TIMER_H


#include "ddl.h"
#include "timer3.h"
#include "gpio.h"

void Timer3_Init_ForDelay(void);
void delay_us(uint16_t us);
#endif





————————————————
版权声明:本文为CSDN博主「chem4111」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_46286415/article/details/148057787

您需要登录后才可以回帖 登录 | 注册

本版积分规则

89

主题

272

帖子

1

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