找回密码
 立即注册
楼主: 神农鼎

AiCube最新版发布@STC-ISP V6.95U 版, 支持STC32/STC8H8K64U/Ai8051U/STC89

 火.. [复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:56
  • 最近打卡:2025-06-13 15:40:51

25

主题

1032

回帖

3809

积分

超级版主

积分
3809
发表于 2025-5-26 14:31:04 | 显示全部楼层
erci*** 发表于 2025-5-26 13:21
EEPROM的问题:
1.MOV方式操作和手册例程差异,函数内未加绝对地址0xFF0000


由于两个程序访问EEPROM的方式不一样,如下:
截图202505261431006676.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:56
  • 最近打卡:2025-06-13 15:40:51

25

主题

1032

回帖

3809

积分

超级版主

积分
3809
发表于 2025-5-26 14:36:03 | 显示全部楼层
erci*** 发表于 2025-5-26 13:21
EEPROM的问题:
1.MOV方式操作和手册例程差异,函数内未加绝对地址0xFF0000

数据手册中有详细说明
哪些硬件选项立即生效,哪些需要重启才生效
截图202505261435202304.jpg

如果觉得单个记麻烦,可以下载后强制重新上电,所有的选项就都有效了



点评

收到  发表于 2025-5-26 15:06
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-06-10 09:54:46
已绑定手机

2

主题

29

回帖

122

积分

注册会员

积分
122
发表于 2025-5-26 15:30:28 | 显示全部楼层

提bug,AiCube创建PCA相关代码中,空闲模式停止计数设置 和 生成的代码是反的。

974adb28876dfbeed208d87c847391ef.png

6c18ad278f1b0790ae2c28718dc79bad.png

e6dbb34e8d0516fd374ecd0daacaeb5c.png

点评

多谢,收到!  详情 回复 发表于 2025-5-26 17:32
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:56
  • 最近打卡:2025-06-13 15:40:51

25

主题

1032

回帖

3809

积分

超级版主

积分
3809
发表于 2025-5-26 17:32:29 | 显示全部楼层
davi*** 发表于 2025-5-26 15:30
提bug,AiCube创建PCA相关代码中,空闲模式停止计数设置 和 生成的代码是反的。

多谢,收到!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:250
  • 最近打卡:2025-06-15 08:43:20

2

主题

12

回帖

1092

积分

金牌会员

积分
1092
发表于 2025-5-27 10:22:15 | 显示全部楼层
使用STC32F12K54,需要注释掉SYS_Init函数中的CLK_Init(),否则时钟压根就不对,USB虚拟串口和串口都没能使用。

点评

STC32F12K54和STC32G12K128差异比较大,特别是时钟部分 用AiCube产生的基于STC32G12K128的代码在STC32F12K54不能直接运行  详情 回复 发表于 2025-5-27 18:19
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:56
  • 最近打卡:2025-06-13 15:40:51

25

主题

1032

回帖

3809

积分

超级版主

积分
3809
发表于 2025-5-27 18:19:38 | 显示全部楼层
Hello*** 发表于 2025-5-27 10:22
使用STC32F12K54,需要注释掉SYS_Init函数中的CLK_Init(),否则时钟压根就不对,USB虚拟串口和串口都没能使 ...

STC32F12K54和STC32G12K128差异比较大,特别是时钟部分
用AiCube产生的基于STC32G12K128的代码在STC32F12K54不能直接运行
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:345
  • 最近打卡:2025-06-15 11:58:42

0

主题

28

回帖

585

积分

高级会员

积分
585
发表于 2025-5-29 19:27:52 | 显示全部楼层
使用Aicube生成工程,配置uart1,禁止接收数据,不开启串口中断。
其中生成putchar()函数如下:


////////////////////////////////////////
// 重写printf字符发送重定向函数
// 入口参数: dat (printf函数待打印的字符)
// 函数返回: 需要返回入口参数的数据
////////////////////////////////////////
char putchar (char dat)                 //将串口1和printf函数绑定
{
    while (!UART1_CheckTxFlag());
    UART1_ClearTxFlag();
    UART1_SendData(dat);

    return dat;
}


下载运行,发现没发应,好像进行了某种循环。
主程序如下:

void main(void)
{
    //<<AICUBE_USER_MAIN_INITIAL_BEGIN>>
    // 在此添加用户主函数初始化代码
    //<<AICUBE_USER_MAIN_INITIAL_END>>

    SYS_Init();

    printf("Hello World !\n");

    //<<AICUBE_USER_MAIN_CODE_BEGIN>>
    // 在此添加主函数中运行一次的用户代码
    //<<AICUBE_USER_MAIN_CODE_END>>

    while (1)
    {
        //<<AICUBE_USER_MAIN_LOOP_BEGIN>>
        // 在此添加主函数中用户主循环代码
        //<<AICUBE_USER_MAIN_LOOP_END>>
    }
}


printf()会调用putchar()函数
而putchar()先查询标志,会导致得不到执行,一直在循环。
应作如下修改:

char putchar (char dat)                 //将串口1和printf函数绑定
{
    UART1_SendData(dat);

    while (!UART1_CheckTxFlag());
    UART1_ClearTxFlag();
   
    return dat;
}

就是先发送字符,再查询标志,然后清标志。

点评

AiCube产生的代码没有问题 按照你的设置,串口初始化时会自动增加下面这个语句 [attachimg]101987[/attachimg] 即,初始化时将TI置1 在putchar函数中先判断TI,再发送数据 可以避免发送数据时死等 这是Keil标准处理  详情 回复 发表于 2025-5-30 09:14
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:56
  • 最近打卡:2025-06-13 15:40:51

25

主题

1032

回帖

3809

积分

超级版主

积分
3809
发表于 2025-5-30 09:14:13 | 显示全部楼层
stc-x*** 发表于 2025-5-29 19:27
使用Aicube生成工程,配置uart1,禁止接收数据,不开启串口中断。
其中生成putchar()函数如下:

AiCube产生的代码没有问题
按照你的设置,串口初始化时会自动增加下面这个语句
截图202505300911391458.jpg

即,初始化时将TI置1
在putchar函数中先判断TI,再发送数据
可以避免发送数据时死等
这是Keil标准处理方法


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-06-10 09:54:46
已绑定手机

2

主题

29

回帖

122

积分

注册会员

积分
122
发表于 2025-5-30 10:50:29 | 显示全部楼层
我在看Ai8051U的传统库函数代码,觉得它的代码质量也很高,复用性很强。但是它的代码跟AiCube两套体系,虽然说没有不兼容吧,但是如果跟AiCube一起用,不小心就会存在两套功能相似的代码。
从功能上库函数包含了初始化和一些功能函数(比如串口收发缓冲区, LIN总线协议,595驱动等),而AiCube主要定位是初始化设置,所以有个心愿,就是希望AiCube能直接集成库函数,把库函数中复用性强的代码也移植进来。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-06-10 09:54:46
已绑定手机

2

主题

29

回帖

122

积分

注册会员

积分
122
发表于 2025-5-30 11:26:15 | 显示全部楼层
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=168184&ptid=16523][color=#999999]zhp 发表于 2025-5-30 09:14[/color][/url][/size] AiCube产生的代码没有问题 按照你的设置,串口初始化时会自动增加下面这个语句 [/quote]

我测试了一下,aicube版本V1.00L, isp版本6.95R

23cb6c46-0bc6-4c3c-abbd-a94fd64e3632.png

现在开启print重定向后,会使用一个fPrintfBusy标识变量,但发送完成后中断函数中没有重置为0,导致只能发一个字符,再发还是死循环(附aicube生成的代码main.c)。这里putchar要么同步等待数据发送完再退出,要么用异步缓冲区的方式(附ai8051u库函数代码,怀疑异步队列方式,发送数据量大会溢出覆盖,还未测试)upload 附件:AI8051U_UART.cupload 附件:AI8051U_UART.hupload 附件:AI8051U_UART_Isr.c

upload 附件:main.c

点评

如果你需要测试这个功能请新建项目 不要在原来的代码基础上重新配置 新建项目,生成的代码如下: [attachimg]102040[/attachimg] 但你如果在原来代码的基础上重新配置, 初始化代码会重新生成,但中断处理代码  详情 回复 发表于 2025-5-30 11:35
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-16 06:30 , Processed in 0.158671 second(s), 112 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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