yidingyaoaini 发表于 2023-2-3 09:13

ch579程序请教

本帖最后由 yidingyaoaini 于 2023-2-3 10:44 编辑

请教下面程序有什么问题?
#include "CH57x_common.h"
UINT16 test0_value=0;

void time0_init(void)
{
      /*配置定时器0,定时器的时钟是FREQ_SYS*/
      TMR0_TimerInit( 1*(FREQ_SYS/1000) );   //定时1ms
      TMR0_ITCfg(ENABLE, TMR0_3_IT_CYC_END); //使能定时器周期中断
      NVIC_EnableIRQ( TMR0_IRQn );
}



/*TMR0周期中断*/
void TMR0_IRQHandler(void)
{
      if( TMR0_GetITFlag( TMR0_3_IT_CYC_END ) )
      {
                TMR0_ClearITFlag( TMR0_3_IT_CYC_END );
                CH57xNET_TimeIsr(CH57xNETTIMEPERIOD);                                       /* 定时器中断服务函数 */
                test0_value--;
      }
}

int main()
{
      UINT8 i = 0;
      systick_config();
      GpioInit();
      DebugUSARTInit(115200);                                                   /* 检查错误 */
      time0_init( );      
      test0_value=1000;
      while(test0_value!=0)
      {

      
      };
      PRINT("CH579 TCP client create!\r\n");
      while(1)
      {

      };   
}

程序为什么为一直死在while(test0_value!=0)里面?测试在STM32运行是没问题的,在CH579运行不正常。附上2张图片,在while里面加一个PRINT就能正常运行。






tpgf 发表于 2024-3-4 11:26

我猜测是不是需要有一个小小的延时 就能正常运行

观海 发表于 2024-3-4 20:14

因为中断有优先级 有可能执行完两次中断才会执行while循环从而导致条件判定失败

八层楼 发表于 2024-3-4 20:46

可以考虑把while循环的判定条件改成一个区间

晓伍 发表于 2024-3-4 21:18

楼主可以尝试一下 用单步执行 应该是可以实现的

磨砂 发表于 2024-3-4 21:50

我觉得主要是数据类型的问题

木木guainv 发表于 2024-3-4 22:22

查看一下晶振是否正常工作
页: [1]
查看完整版本: ch579程序请教