找回密码
 立即注册
查看: 347|回复: 8

AiCube@AIapp-ISP V6.95M - USB通信就是简单!printf_usb("Hello World !\r\n”)

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:519
  • 最近打卡:2025-05-01 08:15:57
已绑定手机
已实名认证

46

主题

161

回帖

474

积分

中级会员

积分
474
发表于 2025-4-9 17:12:03 | 显示全部楼层 |阅读模式

AiCube 试用 - USB 打印 Hello World

本文介绍了 Aiapp-ISP 仿真调试平台软件的 AiCube 工具实现 USB 打印 Hello World 的主要流程。

项目介绍

该项目通过定时器中断实现硬件 USB-CDC 直接打印字符串,同时翻转 P20 的输出电平。

程序流程图


flowchart.jpg

硬件平台

硬件测试平台为基于 AI8051U-34K64 主控的 擎天柱 开发板


board.jpg

下载软件

下载 最新版 AIapp-ISP 软件;

解压并打开该软件,右侧操作界面选择并进入 Keil 仿真设置 标签项;

仿真设置

选择目标单片机型号 - 添加型号和头文件到 Keil - 选择 Keil 安装目录文件夹 - 确定,提示添加成功;


Keil_MCU_add.jpg

创建项目

菜单栏点击 AiCube 标签,进入 项目创建助手

选择目标单片机型号 - 填写项目名称 - 设置保存路径 - 点击 下一步

参数配置

进入参数配置界面

取消勾选 CLK 时钟

勾选 外设 - USB 通用串行总线 项,并进行相关配置

aicube_usb.jpg

勾选 TIMER 定时器 - TIMER0,并进行相关配置,打开定时器0


aicube_timer.jpg

注意 定时器周期 需根据实际情况设置合适的数值和单位。

生成工程

点击 创建项目 即可获得预先配置参数的 Keil 工程。

此时查看目标路径发现 AiCube 工具创建的工程文件,包括 Keil 文件、库文件夹等标准工程格式;

双击打开生成的 Keil 文件,进入 main.c 主函数文件

可见代码已根据 AiCube 工具的配置,提前配置完成定时器和中断初始化等函数。

编译一下直接生成的工程,确保无误。

代码添加

根据项目流程图,在主循环中增加中断标志判断语句,当满足中断条件时,进入中断并执行 USB 打印指令;

code_while.jpg

bit t0_flag = 0;
////////////////////////////////////////
// 项目主函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void main(void)
{
    SYS_Init();

    while (1)
    {
			if(t0_flag)
			{
				t0_flag = 0;
				printf_usb("Hello World! \r\n");
			}
        USBLIB_OUT_Done();              //查询方式处理USB接收的数据
    }
}

之后在定时器中断函数中添加 GPIO 输出电平的控制语句,实现 LED 状态翻转,用以提示 USB 消息发送状态

code_timer-isr.jpg

////////////////////////////////////////
// 定时器0中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void TIMER0_ISR(void) interrupt TMR0_VECTOR
{
	P20 = ~P20;
	t0_flag = 1;
}

之后保存并重新编译工程。

完整工程见附件。

固件烧录

生成的 HEX 烧录固件位于 Objects 文件夹下,

使用 Type-C 数据线连接开发板和电脑,按住 P32 按键的同时,短按 POWER 按键,

此时 Aiapp-ISP 软件自动识别 HID 设备


isp_writer.jpg

点击 下载/编程 按钮,待烧录结束,程序自动运行。

效果演示

进入 CDC/HID-串口助手 标签,选择目标 USB-CDC 设备,波特率 115200 bps,打开串口即可接收硬件 USB 打印的消息

isp_printf.jpg

动态效果

usb-cdc.gif

同时 P20 输出翻转电平,对应的板载 LED 闪烁,间隔为 1 个定时器周期


blink_P20.gif

总结

本文介绍了 Aiapp-ISP 仿真调试平台软件的 AiCube 工具实现硬件 USB 打印 Hello World 的主要流程,为 STC 系列单片机的快速开发和应用提供了参考。

upload 附件:printf_usb_hello.zip

MCU开发者和爱好者
回复

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-4-9 17:18:00 | 显示全部楼层
AiCube 试用 - USB 打印 Hello World 项目解析

本文详细解析了基于 Aiapp-ISP 仿真调试平台软件的 AiCube 工具,实现 USB 打印 "Hello World" 字符串的项目流程。该项目利用定时器中断机制,通过硬件 USB-CDC 直接输出字符串,并同步翻转 P20 引脚的电平状态。

一、项目概述

目标: 实现 USB 打印 "Hello World" 字符串,并控制 P20 引脚电平翻转。
硬件平台: 基于 AI8051U-34K64 主控的擎天柱开发板。
软件工具: Aiapp-ISP 仿真调试平台软件、Keil 开发环境。

二、项目流程

1. 软件下载与安装:
     下载最新版 Aiapp-ISP 软件并解压。
     打开软件,在右侧操作界面选择并进入 "Keil 仿真设置" 标签项。
     选择目标单片机型号,添加型号和头文件到 Keil,选择 Keil 安装目录文件夹,确认后提示添加成功。

2. 项目创建:
     点击菜单栏 "AiCube" 标签,进入 "项目创建助手"。
     选择目标单片机型号,填写项目名称,设置保存路径,点击 "下一步"。
     进入参数配置界面,取消勾选 "CLK 时钟" 项。
     勾选 "外设 - USB 通用串行总线" 项,并进行相关配置。
     勾选 "TIMER 定时器 - TIMER0",并进行相关配置,打开定时器0。
     注意:定时器周期需根据实际情况设置合适的数值和单位。
     点击 "创建项目" 即可获得预先配置参数的 Keil 工程。

3. 代码编写与编译:
     双击打开生成的 Keil 文件,进入 main.c 主函数文件。
     可见代码已根据 AiCube 工具的配置,提前配置完成定时器和中断初始化等函数。
     编译一下直接生成的工程,确保无误。
     根据项目流程图,在主循环中增加中断标志判断语句,当满足中断条件时,执行 USB 打印 "Hello World" 字符串和 P20 引脚电平翻转操作。

三、关键点解析

AiCube 工具: 该工具简化了项目创建流程,自动生成包含必要配置的 Keil 工程文件,提高了开发效率。
定时器中断: 利用定时器中断机制,实现周期性触发 USB 打印和引脚电平翻转操作。
USB-CDC: 通过硬件 USB-CDC 直接输出字符串,无需额外的 USB 驱动,简化了开发流程。

四、总结

本项目展示了如何利用 AiCube 工具快速搭建基于 AI8051U-34K64 主控的开发环境,并实现 USB 打印和引脚控制功能。该项目流程清晰,代码简洁,为后续更复杂的应用开发奠定了基础。

五、未来展望

可以进一步探索 AiCube 工具的其他功能,例如 GPIO 配置、串口通信等。
可以结合其他外设模块,例如传感器、显示屏等,开发更丰富的应用。
可以优化代码结构,提高代码效率和可读性。

免责声明: 本文仅供参考,实际操作请以官方文档为准。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15609
发表于 2025-4-10 08:03:09 | 显示全部楼层
截图202504100802188631.jpg



////////////////////////////////////////
// 文件名称: main.c
// 文件描述:
// 文件版本: V1.0
// 修改记录:
//   1. (2025-04-09) 创建文件
////////////////////////////////////////

#include "config.h"                     //默认已包含stdio.h、intrins.h、ai_usb.h等头文件

bit t0_flag = 0;
////////////////////////////////////////
// 项目主函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void main(void)
{
    SYS_Init();

    while (1)
    {
        if(t0_flag)
        {
               t0_flag = 0;
               printf_usb("Hello World! \r\n");
        }
        USBLIB_OUT_Done();              //查询方式处理USB接收的数据
    }
}

////////////////////////////////////////
// 系统初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void SYS_Init(void)
{
    EnableAccessXFR();                  //使能访问扩展XFR
    AccessCodeFastest();                //设置最快速度访问程序代码
    AccessIXramFastest();               //设置最快速度访问内部XDATA
    IAP_SetTimeBase();                  //设置IAP等待参数,产生1us时基

    P0M0 = 0x00; P0M1 = 0x00;           //初始化P0口为准双向口模式
    P1M0 = 0x00; P1M1 = 0x00;           //初始化P1口为准双向口模式
    P2M0 = 0x00; P2M1 = 0x00;           //初始化P2口为准双向口模式
    P3M0 = 0x00; P3M1 = 0x00;           //初始化P3口为准双向口模式
    P4M0 = 0x00; P4M1 = 0x00;           //初始化P4口为准双向口模式
    P5M0 = 0x00; P5M1 = 0x00;           //初始化P5口为准双向口模式
    P6M0 = 0x00; P6M1 = 0x00;           //初始化P6口为准双向口模式
    P7M0 = 0x00; P7M1 = 0x00;           //初始化P7口为准双向口模式

    TIMER0_Init();                      //定时器0初始化
    USBLIB_Init();                      //USB库初始化

    EnableGlobalInt();                  //使能全局中断
}

////////////////////////////////////////
// 毫秒延时函数
// 入口参数: ms (设置延时的毫秒值)
// 函数返回: 无
////////////////////////////////////////
void delay_ms(uint16_t ms)
{
    uint16_t i;

    do
    {
        i = MAIN_Fosc / 6000;
        while (--i);
    } while (--ms);
}

////////////////////////////////////////
// 定时器0中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void TIMER0_ISR(void) interrupt TMR0_VECTOR
{
        P20 = ~P20;
        t0_flag = 1;
}


////////////////////////////////////////
// 定时器0初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void TIMER0_Init(void)
{
#define T0_PSCR         25
#define T0_RELOAD       (65536 - (float)SYSCLK / 12 / (T0_PSCR + 1) * 500 / 1000)

    TIMER0_TimerMode();                 //设置定时器0为定时模式
    TIMER0_12TMode();                   //设置定时器0为12T模式
    TIMER0_Mode0();                     //设置定时器0为模式0 (16位自动重载模式)
    TIMER0_DisableGateINT0();           //禁止定时器0门控
    TIMER0_SetIntPriority(0);           //设置中断为最低优先级
    TIMER0_EnableInt();                 //使能定时器0中断
    TIMER0_SetPrescale(T0_PSCR);        //设置定时器0的8位预分频
    TIMER0_SetReload16(T0_RELOAD);      //设置定时器0的16位重载值
    TIMER0_Run();                       //定时器0开始运行
}

////////////////////////////////////////
// USB库初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void USBLIB_Init(void)
{
    usb_init();                         //初始化USB模块
    USB_SetIntPriority(0);              //设置中断为最低优先级
    set_usb_ispcmd("@STCISP#");         //设置USB不停电下载命令
}

////////////////////////////////////////
// 等待USB配置完成函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void USBLIB_WaitConfiged(void)
{
    while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置
}

////////////////////////////////////////
// USB设备接收数据处理程序
// 入口参数: 无
// 函数返回: 无
// bUsbOutReady:USB设备接收数据标志位
// OutNumber:USB设备接收到的数据长度
// UsbOutBuffer:保存USB设备接收到的数据
////////////////////////////////////////
void USBLIB_OUT_Done(void)
{
    if (bUsbOutReady)                   //查询是否有接收到数据
    {
        USB_SendData(UsbOutBuffer, OutNumber); //原路返回, 用于测试
        usb_OUT_done();                 //当前包的数据处理完成
    }
}

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:47
  • 最近打卡:2025-05-01 06:02:19
已绑定手机

10

主题

29

回帖

478

积分

中级会员

积分
478
发表于 2025-4-11 06:02:04 | 显示全部楼层
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:166
  • 最近打卡:2025-04-30 13:36:04
已绑定手机

34

主题

171

回帖

1177

积分

金牌会员

积分
1177
发表于 2025-4-11 08:04:40 | 显示全部楼层
AiCube工具很强大,抓紧学习,谢谢楼主的使用例程
8位程序---换个STC32G.h头文件,换个C251编译器就直接到STC32的高度了;
          想回到8位机,则换个STC8H.h头文件,换个C51编译器就回到8位机了.
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2025-05-01 08:09:26
已绑定手机

2

主题

82

回帖

194

积分

注册会员

积分
194
发表于 2025-4-11 08:35:45 | 显示全部楼层
后续其他芯片也支持就好了

点评

1, AI8051U-32Bit; 2, AI8051U-8Bit; 3, STC32G12K128系列; 3, STC8H8K64U系列;  详情 回复 发表于 2025-4-11 16:46
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15609
发表于 2025-4-11 16:46:08 | 显示全部楼层
zhangr*** 发表于 2025-4-11 08:35
后续其他芯片也支持就好了
按下面顺序补全:
1, AI8051U-32Bit;
2, AI8051U-8Bit;
3, STC32G12K128系列;
4, STC8H8K64U系列;


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:88
  • 最近打卡:2025-04-28 09:54:15

0

主题

14

回帖

155

积分

注册会员

积分
155
发表于 2025-4-12 14:08:58 | 显示全部楼层
越来越好用了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:522
  • 最近打卡:2025-05-01 06:03:55
已绑定手机

34

主题

459

回帖

2215

积分

金牌会员

积分
2215
发表于 2025-4-19 18:53:51 | 显示全部楼层
神*** 发表于 2025-4-11 16:46
按下面顺序补全:
1, AI8051U-32Bit;
2, AI8051U-8Bit;

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-1 19:23 , Processed in 0.150373 second(s), 119 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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