21ic问答首页 - HC32L190FCUA无法进入定时器0溢出中断
HC32L190FCUA无法进入定时器0溢出中断
我在HC32L190FCUA上运行TIMER0定时中断,进不了中断,为什么?
注:使用驱动库中的DEMO, keil 中有 --keep=*Handler。
然后主函数while循环中能正常运行,然后初始化时我把stcBtBaseCfg.enGateP = BtGatePositive;是无效的,必须要在debug中手动开启gatep=1才会开启计数?然后UIE我也需要手动勾选,然后呢勾选完这两个之后他可以进入中断函数Tim0_IRQHandler(),但是进入不了溢出中断里面,这又是为啥呀???下面是我的配置
时钟配置:

定时器配置:


注:使用驱动库中的DEMO, keil 中有 --keep=*Handler。
然后主函数while循环中能正常运行,然后初始化时我把stcBtBaseCfg.enGateP = BtGatePositive;是无效的,必须要在debug中手动开启gatep=1才会开启计数?然后UIE我也需要手动勾选,然后呢勾选完这两个之后他可以进入中断函数Tim0_IRQHandler(),但是进入不了溢出中断里面,这又是为啥呀???下面是我的配置
时钟配置:
定时器配置:
赞0
也许你就是这个小概率。在不熟悉的情况下尽可能的去跑例程。
评论
2025-03-10
赞0
static void App_Timer0Cfg(void)
{
uint16_t u16ArrValue = 0x10000 - 6000; // 1ms中断一次(24MHz系统时钟)
uint16_t u16CntValue = 0x10000 - 6000;
stc_bt_mode0_cfg_t stcBtBaseCfg;
DDL_ZERO_STRUCT(stcBtBaseCfg);
Sysctrl_SetPeripheralGate(SysctrlPeripheralBaseTim, TRUE); // Base Timer外设时钟使能
stcBtBaseCfg.enWorkMode = BtWorkMode0; // 定时器模式
stcBtBaseCfg.enCT = BtTimer; // 定时器功能,计数时钟为内部PCLK
stcBtBaseCfg.enPRS = BtPCLKDiv4; // PCLK/4
stcBtBaseCfg.enCntMode = Bt16bitArrMode; // 自动重载16位计数器/定时器
stcBtBaseCfg.enGateP = BtGatePositive;
stcBtBaseCfg.bEnTog = FALSE;
stcBtBaseCfg.bEnGate = FALSE;
Bt_Mode0_Init(TIM0, &stcBtBaseCfg);
Bt_M0_ARRSet(TIM0, u16ArrValue); // 设置重载值
Bt_M0_Cnt16Set(TIM0, 0); // 设置计数初值
Bt_ClearAllIntFlag(TIM0); // 清中断标志
Bt_Mode0_EnableIrq(TIM0); // 使能TIM0中断
EnableNvic(TIM0_IRQn, IrqLevel0, TRUE); // TIM0中断使能
Bt_M0_Run(TIM0); // 启动定时器
}
volatile uint32_t delaytick = 0;
void Tim0_IRQHandler(void)
{
if (TRUE == Bt_GetIntFlag(TIM0, BtUevIrq))
{
Bt_ClearIntFlag(TIM0, BtUevIrq); // 中断标志清零
delaytick++;
}
}
评论
2025-03-10
赞0
uint32_t SystemHclkClock = 0;
// add clock source.
void ClockUpdate(void) // Update SystemCoreClock variable
{
SystemCoreClock = Sysctrl_GetHClkFreq();
SystemHclkClock = Sysctrl_GetPClkFreq();
}
// 系统时钟配置
void App_ClkCfg(void)
{
stc_sysctrl_clk_cfg_t stcCfg;
// 因要使用的时钟源HCLK小于等于24M:此处设置FLASH 读等待周期为0 cycle(默认值也为0 cycle)
Flash_WaitCycle(FlashWaitCycle0);
// 时钟初始化前,优先设置要使用的时钟源
Sysctrl_SetRCHTrim(SysctrlRchFreq24MHz);
// 选择内部RCH作为HCLK时钟源;
stcCfg.enClkSrc = SysctrlClkRCH;
// HCLK SYSCLK/1
stcCfg.enHClkDiv = SysctrlHclkDiv1;
// PCLK 为HCLK/1
stcCfg.enPClkDiv = SysctrlPclkDiv1;
// 系统时钟初始化
Sysctrl_ClkInit(&stcCfg);
}
void BSPInit(void)
{
App_ClkCfg();
ClockUpdate();
}
评论
2025-03-10
赞0
评论
2025-03-10
您需要登录后才可以回复 登录 | 注册