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

程序自动生成器,AiCube-ISP V6.95Z, STC89/15/STC8H/STC32/8051U

 火.. [复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:279
  • 最近打卡:2025-07-30 09:20:54

2

主题

12

回帖

1210

积分

金牌会员

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

点评

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

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:79
  • 最近打卡:2025-08-01 09:43:13

28

主题

1161

回帖

4274

积分

超级版主

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

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

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:392
  • 最近打卡:2025-08-01 11:23:53

1

主题

30

回帖

820

积分

高级会员

积分
820
发表于 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
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:79
  • 最近打卡:2025-08-01 09:43:13

28

主题

1161

回帖

4274

积分

超级版主

积分
4274
发表于 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

回帖

126

积分

注册会员

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

使用道具 举报 送花

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

2

主题

29

回帖

126

积分

注册会员

积分
126
发表于 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
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:79
  • 最近打卡:2025-08-01 09:43:13

28

主题

1161

回帖

4274

积分

超级版主

积分
4274
发表于 2025-5-30 11:35:20 | 显示全部楼层
davi*** 发表于 2025-5-30 11:26
我测试了一下,aicube版本V1.00L, isp版本6.95R

现在开启print重定向后,会使用一个fPrintfBusy标识变量 ...

如果你需要测试这个功能请新建项目,项目名称或者路径不能和之前的项目都相同
不要在原来的代码基础上重新配置

新建项目,生成的代码如下:
截图202505301131346319.jpg


但你如果在原来代码的基础上重新配置,
初始化代码会重新生成,但中断处理代码在
    //<<AICUBE_USER_UART1_ISR_CODE1_BEGIN>>
    //<<AICUBE_USER_UART1_ISR_CODE1_END>>
之间,中断处理代码不会重新生成

   //<<AICUBE_USER_***_BEGIN>>
   //<<AICUBE_USER_***_END>>
之间的代码是用户自行编写的,
首次创建项目,AiCube会给出最简单的示例代码
后续再重复配置,这中间的代码就不会变化了


点评

CAN 读中断宏定义少括号 [attachimg]103215[/attachimg]  详情 回复 发表于 2025-6-9 14:13
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:98
  • 最近打卡:2025-08-01 08:52:23
已绑定手机

13

主题

67

回帖

419

积分

中级会员

积分
419
发表于 2025-5-30 17:37:05 来自手机 | 显示全部楼层
图形化时钟配置赞。不过平时一般好像也不用配置时钟。

点评

是 [attachimg]102117[/attachimg]  详情 回复 发表于 2025-5-30 21:59
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:145
  • 最近打卡:2025-08-01 10:06:57

762

主题

1万

回帖

1万

积分

管理员

积分
18314
发表于 2025-5-30 21:59:33 | 显示全部楼层
mech*** 发表于 2025-5-30 17:37
图形化时钟配置赞。不过平时一般好像也不用配置时钟。


截图202505302159245517.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:72
  • 最近打卡:2025-08-01 15:33:09
已绑定手机

0

主题

23

回帖

398

积分

中级会员

积分
398
发表于 2025-5-31 10:02:33 | 显示全部楼层
支持 AI8051U-8位 了
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-8-1 18:52 , Processed in 0.127841 second(s), 111 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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