WCH沁恒单片机
直播中

吕钢格

7年用户 973经验值
私信 关注
[问答]

CH582 TIM0定时器设置延时无效怎么解决?

我尝试用CH582的tim0做查询方式的延时,但是设置后似乎不生效,请教下该如何解决。

void mdelay100ms()
{
R8_TMR0_CTRL_MOD &= RB_TMR_ALL_CLEAR;
R32_TMR0_CNT_END = (FREQ_SYS / 10);
R8_TMR0_CTRL_MOD |= RB_TMR_COUNT_EN;
do
{
printf("count:0x%08x
",R32_TMR0_COUNT);
printf("cnt:0x%08x
",R32_TMR0_CNT_END);
} while (R32_TMR0_COUNT == (FREQ_SYS / 10));
R8_TMR0_CTRL_MOD &= ~RB_TMR_COUNT_EN;
}

int main()
{
SetSysClock(CLK_SOURCE_PLL_60MHz);
DebugInit();
mdelay100ms();
while (1)
{

}
}

串口的显示





回帖(2)

h1654155275.5889

2022-8-10 09:17:50
这个样子配置来试一下
举报

杨波

2022-8-10 09:18:02
void DebugInit(void)
{
  GPIOA_SetBits(GPIO_Pin_9);
  GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PU);
  GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeOut_PP_5mA);
  UART1_DefInit();
}

void mdelay100ms()
{
    TMR0_TimerInit( FREQ_SYS/10 );                              //定时100ms
    do
    {
        
    } while (TMR0_GetITFlag( TMR0_3_IT_CYC_END )==0); //判断计数是否完成
    TMR0_ClearITFlag( TMR0_3_IT_CYC_END );      //清标志
}

int main()
{

  SetSysClock(CLK_SOURCE_PLL_60MHz);
  DebugInit();
  while (1)
  {
    printf("1n");
    mdelay100ms();
    printf("8n");
    mdelay100ms();
  }
}
这样修改,打印如图所示
举报

更多回帖

发帖
×
20
完善资料,
赚取积分