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\n",R32_TMR0_COUNT);
        printf("cnt:0x%08x\n",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)
  {

  }
}

串口的显示

QQ截图20220307112504.png

这个样子配置来试一下

1.png


谢谢,但是我这边还是有些问题,实现mdelay100ms是为了等待延时,但是我这样修改后延时还是不准,会一直打印。

volatile uint32_t ms_cnt = 0;
volatile uint32_t ms_count = 0;

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()
{
  R8_TMR0_CTRL_MOD = RB_TMR_ALL_CLEAR;
  R8_TMR0_CTRL_MOD = RB_TMR_COUNT_EN;
  R32_TMR0_CNT_END = (FREQ_SYS / 10);
  ms_cnt = R32_TMR0_CNT_END;
  do
  {
    ms_count = R32_TMR0_COUNT;
  } while (ms_count == ms_cnt); //等待R32_TMR0_COUNT=R32_TMR0_CNT_END
  R8_TMR0_CTRL_MOD &= ~RB_TMR_COUNT_EN; //关闭计数
}

int main()
{

  SetSysClock(CLK_SOURCE_PLL_60MHz);
  DebugInit();
  while (1)
  {
    printf("1\n");
    mdelay100ms();
    printf("10\n");
    mdelay100ms();
  }
}

QQ截图20220307194914.png


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("1\n");
    mdelay100ms();
    printf("8\n");
    mdelay100ms();
  }
}

这样修改,打印如图所示

1.png



好的,已解决,谢谢


只有登录才能回复,可以选择微信账号登录