找回密码
 立即注册
查看: 1461|回复: 1

STC32G记录一个magic事件

[复制链接]

该用户从未签到

1

主题

0

回帖

5

积分

新手上路

积分
5
发表于 2023-4-22 12:53:47 | 显示全部楼层 |阅读模式
本帖最后由 蒙蒙plus 于 2023-4-22 12:58 编辑

例程放这里了 05_MultiButton.zip (797.43 KB, 下载次数: 30)
MCU情况

  . 内部参考电压: 1186 mV (参考范围: 1100~1300mV)
  . 内部安排测试时间: 2022年8月6日

  单片机型号: STC32G12K128-Beta
  固件版本号: 7.4.5U



功能分配情况
Timer0 做全局的滴答时钟

UART1 用BRT_Timer1 做波特率发生器

3个LED 灯




#define LED_RED P50
#define LED_GREEN P51
#define LED_YELLOW P52



两个按键 P54,P32
  1. 主程序任务
  2. /**
  3. * @brief 主程序 程序入口
  4. *
  5. */
  6. void main()
  7. {
  8.         /** 局部变量定义*/
  9.         /** 变量初始化*/
  10.         /*!< 1.CPU 初始化 */
  11.         WTST = 0;  // 设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
  12.         EAXSFR();  // 扩展SFR(XFR)访问使能
  13.         CKCON = 0; // 提高访问XRAM速度
  14.         /*!< 2.模块初始化 */
  15.         Tick_init();
  16.         Tick_start();
  17.         LED_Init();
  18.         UART_init();
  19.         EA = 1;
  20.         /*!< 3.任务初始化 */
  21.         Task_Button_init();
  22.         PrintString1("STC32G UART1 Test Programme!\r\n"); // UART1发送一个字符串
  23.         while (1)
  24.         {
  25.                 /** @brief 1.LED 流水灯功能
  26.                  * 这里查询时间
  27.                  */
  28.                 LED_Task();
  29.                 /**
  30.                  * @brief 串口收发任务
  31.                  *
  32.                  */
  33.                 Task_UART();
  34.                 Task_Button_tick();
  35.         }
  36. }
复制代码


上面的 结构不动,出问题在LED_Task();任务里
这里一共放了4个任务 分别是
1.流水灯
2.RED 1s一闪烁
3.GREEN 2s一闪烁
3.YELLOW 4s 一闪烁
当前发现的 魔法现象是
1.只开任务1 流水灯正常
2.只开后面3个的任意一个,可能也正常
3.3个全开,很大概率不正常,换个时间再烧录这个hex,它又正常了

全程录音录像,可以随时查阅我的操作。
根据当前测试可以排除以下问题
1.我量产多块板子,问题一样
2.LED没烧,IO也没烧 因为流水灯就正常
3.多次测试,问题相似
4.我用了待串口心跳包的,心跳包有的正常10s一条数据,有事没有,但是有心跳包的时候 LED也不亮
5.也不是负载不起来,我流水灯全点亮或者灭,也都是能亮的
6.更换板子,同样的代码也能出现不同的异常

总之就是一个魔法事件,里面也未用指针操作,我无法对STC32G进行实时仿真,只好放在这里,希望有人能够解决这个疑惑
  1. /**
  2. * @brief LED 任务入口
  3. *
  4. */
  5. void LED_Task()
  6. {
  7.     /** @brief 1.LED 流水灯功能
  8.      * 这里查询时间
  9.      */
  10.        uint32_t tick_curr = Tick_GetClock();
  11.      {
  12.          static uint32_t tick_last; // 滴答时钟
  13.          if (tick_curr > tick_last + 1000)
  14.          { // 1000ms 执行一次 避免了阻塞
  15.              tick_last = tick_curr;
  16.              LED_setLED_all(LED_Data[i]);
  17.              i = (i + 1) % numof(LED_Data);
  18.          }
  19.      }
  20. //    {
  21. //        static uint8_t flag;
  22. //        static uint32_t tick_last; // 滴答时钟
  23. //        if (tick_curr > tick_last + 1000)
  24. //        { // 100ms 闪烁
  25. //            tick_last = tick_curr;
  26. //            LED_setLED(LED_RED_PIN, flag);
  27. //            flag = !flag;
  28. //        }
  29. //    }
  30. //    {
  31. //        static uint8_t flag;
  32. //        static uint32_t tick_last; // 滴答时钟
  33. //        if (tick_curr > tick_last + 2000)
  34. //        { // 100ms 闪烁
  35. //            tick_last = tick_curr;
  36. //            LED_setLED(LED_GREEN_PIN, flag);
  37. //            flag = !flag;
  38. //        }
  39. //    }
  40. //    {
  41. //        static uint8_t flag;
  42. //        static uint32_t tick_last; // 滴答时钟
  43. //        if (tick_curr > tick_last + 4000)
  44. //        { // 100ms 闪烁
  45. //            tick_last = tick_curr;
  46. //            LED_setLED(LED_YELLOW_PIN, flag);
  47. //            flag = !flag;
  48. //        }
  49. //    }
  50. }
复制代码













回复 送花

使用道具 举报

  • TA的每日心情
    奋斗
    昨天 08:56
  • 签到天数: 164 天

    [LV.7]常住居民III

    27

    主题

    1447

    回帖

    4512

    积分

    论坛元老

    积分
    4512
    发表于 2023-4-23 11:28:09 | 显示全部楼层
    把memory mode改成xSmall模式试试:

    1.png

    此外需要注意C语言对大小写敏感:
    2.png

    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-6-15 21:22 , Processed in 0.069356 second(s), 35 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表