找回密码
 立即注册
楼主: zhp

使用AiCube遇到的典型问题反馈与讨论

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:154
  • 最近打卡:2026-06-29 18:12:05

28

主题

1299

回帖

4867

积分

超级版主

积分
4867
发表于 2026-5-14 15:49:10 | 显示全部楼层
yzhk*** 发表于 2026-5-14 11:29
今天第一次用。发现一个问题 def.h文件
为什么
重复定义别名?是为了多种命名习惯搭配?

是的,不同的程序员有不同的习惯
1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:154
  • 最近打卡:2026-06-29 18:12:05

28

主题

1299

回帖

4867

积分

超级版主

积分
4867
发表于 2026-5-14 15:50:56 | 显示全部楼层
yzhk*** 发表于 2026-5-14 11:48
还有一个问题。定时器时间,从32ms改成别的数字一律自动改回去。莫名其妙!!!搞定了。这个最大就是32,可 ...

说明你当前的工作频率和工作模式,最大只能定时到32ms
要定时更长时间,可选择1T模式,或者选择具有24位定时模式的单片机
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:487
  • 最近打卡:2026-07-04 23:47:48

35

主题

199

回帖

718

积分

高级会员

积分
718
发表于 2026-5-17 12:07:24 | 显示全部楼层
aicube目前给出的定时器程序是

void TIMER0_Init(void)
{
#define T0_PSCR                 (1)
#define T0_RELOAD               (65536 - (float)SYSCLK / (T0_PSCR + 1) * 1 / 1000) //定时周期1毫秒

    TIMER0_TimerMode();                 //设置定时器0为定时模式
    TIMER0_1TMode();                    //设置定时器0为1T模式
    TIMER0_Mode0();                     //设置定时器0为模式0 (16位自动重载模式)
    TIMER0_DisableGateINT0();           //禁止定时器0门控
    TIMER0_SetPrescale(T0_PSCR);        //设置定时器0的8位预分频
    TIMER0_SetReload16(T0_RELOAD);      //设置定时器0的16位重载值
    TIMER0_Run();                       //定时器0开始运行 #define TIMER0_Run() (TR0 = 1)

    //<<AICUBE_USER_TIMER0_INITIAL_BEGIN>>
    // 在此添加用户初始化代码  
        TF0 = 0;
        EA=1;
        ET0=1;
    //<<AICUBE_USER_TIMER0_INITIAL_END>>
}
咨询了GLM,给出的建议是
  1.     TIMER0_TimerMode();                 
  2.     TIMER0_1TMode();                    
  3.     TIMER0_Mode0();                     
  4.     TIMER0_DisableGateINT0();           
  5.     TIMER0_SetPrescale(T0_PSCR);        
  6.     TIMER0_SetReload16(T0_RELOAD);      
  7.     //<<AICUBE_USER_TIMER0_INITIAL_BEGIN>>
  8.     // 在此添加用户初始化代码  
  9.     TF0 = 0;          // 1. 先清标志位
  10.     EA  = 1;          // 2. 开总中断
  11.     ET0 = 1;          // 3. 开定时器0中断
  12.    
  13.     TIMER0_Run();     // 4. 最后再启动定时器,保证计时的绝对0起点
  14.     //<<AICUBE_USER_TIMER0_INITIAL_END>>
复制代码

总结
现状:在 1ms 周期下,你的代码逻辑没有任何问题,不会造成偏差。
原因:开中断的指令执行速度(纳秒级)远快于定时器溢出速度(毫秒级)。
优化:如果追求极致的时序严谨性(或者未来可能用极短的中断周期),
建议养成“先清标志、开中断,最后启动定时器”的习惯。
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-7-5 08:02 , Processed in 0.067145 second(s), 49 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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