找回密码
 立即注册
查看: 56|回复: 3

8H8K64U Printf_USB 打卡

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-04-28 09:28:04
已绑定手机

6

主题

28

回帖

348

积分

版主

积分
348
发表于 4 天前 | 显示全部楼层 |阅读模式
实验一:printf_usb("Hello World !\r\n"), 第一个完整的C语言
(1)打卡STC官网-软件工具 找到USB库函数并下载:深圳国芯人工智能有限公司-库函数
微信图片_20250427154344.png
(2)下载解压后,找到CDC查询模式下,stc_usb_cdc_8h_xdata.LIB 并将其复制到自己所创建的工程下
微信图片_20250427154456.png 微信图片_20250427154502.png
(3)新建keil C51 工程文件
微信图片_20250427154915.png 微信图片_20250427154922.png
(4)添加USB库文件 :   解压文件中 找到 并 复制库函数文件到你的项目文件夹中。双击 Source Group 1,找到库文件:stc_usb_cdc_8h_data_bl51.LIB进行添加:
微信图片_20250427155052.png
(5)编译成功:
微信图片_20250427155059.png
(6)打开最新版本的AIapp-ISP-V6.95M软件 选择单片机型号为:STC8H8K64U,打开hex,点击下载
微信图片_20250427160955.png



回复

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 4 天前 | 显示全部楼层
回复:

感谢您分享关于使用国芯人工智能有限公司的USB库函数进行C语言编程的实验步骤。以下是对您实验过程的简要分析与补充说明,旨在帮助其他开发者更好地理解并复现该实验。

实验概述
本实验的目标是通过USB通信实现“Hello World”字符串的打印,使用国芯人工智能有限公司提供的USB库函数。实验的核心步骤包括下载库函数、配置工程文件、添加库文件并最终编译成功。

实验步骤解析

(1)下载USB库函数
您首先访问了国芯人工智能有限公司的官方网站,下载了USB库函数。这是实验的基础,因为库函数提供了与USB通信相关的API接口,简化了开发者的工作。建议在下载时选择与目标芯片型号匹配的库函数版本,以确保兼容性。

(2)解压并复制库文件
解压下载的文件后,您找到了stcusbcdc8hxdata.LIB文件,并将其复制到工程目录下。这一步非常重要,因为库文件是编译和链接过程中不可或缺的部分。stcusbcdc8hxdata.LIB文件是针对特定内存模式(XDATA)优化的库,适用于需要扩展外部RAM的应用场景。

(3)新建Keil C51工程文件
您使用Keil C51创建了一个新的工程文件。Keil C51是一款广泛使用的嵌入式开发工具,支持8051系列单片机的开发。在创建工程时,建议选择正确的芯片型号,并配置好编译器和链接器的选项,以确保生成的代码能够正确运行。

(4)添加USB库文件
在工程中,您通过双击“Source Group 1”并添加stcusbcdc8hdatabl51.LIB文件,完成了库文件的引入。这一步是确保编译器能够正确链接库函数的关键。需要注意的是,库文件的名称和路径应与实际文件一致,避免编译错误。

(5)编译成功
最后,您成功编译了工程。编译成功意味着代码语法正确,库函数链接无误,生成的二进制文件可以烧录到目标芯片中运行。建议在编译成功后,通过调试工具验证程序的运行效果,确保“Hello World”字符串能够通过USB正确输出。

实验中的注意事项
1. 库函数版本匹配:确保下载的库函数版本与目标芯片型号和开发环境兼容。
2. 工程配置:在Keil C51中正确配置芯片型号、内存模式等参数,避免编译或运行时错误。
3. 调试与验证:编译成功后,建议通过调试工具或串口监视器验证程序的输出,确保功能实现。

总结
本实验通过使用国芯人工智能有限公司的USB库函数,展示了如何在嵌入式系统中实现USB通信并打印“Hello World”字符串。实验步骤清晰,操作简单,适合初学者学习和实践。希望以上分析与补充说明能够帮助更多开发者顺利完成类似实验,并为后续的嵌入式开发打下坚实基础。

如果您在实验过程中遇到任何问题,欢迎随时交流讨论。祝您开发顺利!

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

使用道具 举报 送花

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

6

主题

28

回帖

348

积分

版主

积分
348
发表于 3 天前 | 显示全部楼层
实验二: 查询方式,查询到电脑命令后,printf_usb("Hello World !\r\n")或其他
创建工程详细步骤参考实验一,将复制好的stc_usb_cdc_8h_xdata.LIB文件添加到Source Group1中



源代码如下:
#include "ai8051u.h" //头文件不分大小写,但关键字分大小写
#include "ai_usb.h" //USB 库和 USB 虚拟设备的头文件,需要在项目文件中添加对应的 USB 库
                   //由于在 USB 库函数的代码中已经定义了,不停电 ISP 下载命令字”@STCISP#”,
                   //只需要在下载软件的“收到用户命令后复位到 ISP 监控程序区”选项卡中进行相应的设置,
                   //即可实现 USB 不停电 ISP 下载功能,或串口不停电 ISP 下载功能。
void main(void)
{
//EAXFR = 1; //允许访问扩展的特殊寄存器,XFR
//WTST = 0; //设置取程序代码等待时间,赋值为 0 表示不等待,程序以最快速度运行
//CKCON = 0; //设置访问片内的 xdata 速度,赋值为 0 表示用最快速度访问,不增加额外的等待时间
P_SW2 |= 0x80;
usb_init(); //初始化 USB 模块
EA = 1; //使能全局中断
while(1)
{
if(bUsbOutReady)
{ //查询方式:USB-Device 单片机查询是否有接收完成的 USB 主机送来的数据包
//“bUsbOutReady”:主机发送给 HID/CDC 设备的数据状态标志。
//USB 库中有定义 bUsbOutReady 位变量,查询方式必须调用一次“usb_OUT_done();”
//状态位为 1 表示,主机发送给 HID/CDC 设备数据已完成,
//设备已成功接收一包数据,等待对数据继续处理。
if(UsbOutBuffer[0]==6)
printf_usb("HelloWorld!\r\n");
//接收到的数据包的第 0 个字节是 6,打印“HelloWorld!”
else if(UsbOutBuffer[0]==7)
printf_usb("China!\r\n");
//接收到的数据包的第 0 个字节是 7 后,打印“China!”
usb_OUT_done(); //USB 查询方式,Device 单片机通知【主机可以发下一个数据包】
//当使用査询方式 if(bUsbOutReady),查询调用 USB 库函数时,在数据处理完成后,
//必须调用一次“usb_OUT_done();”,这样才能接收下一包数据。
//如果是使用中断方式调用 USB 库函数,用户程序不需要调用“usb_OUT_done();”
//中断方式,USB 库函数内部会自动处理。
}
}
}



编译成功:
微信图片_20250428092543.png
实验效果:

点击6按钮,单片机收到 16 进制数6后,回送“Hello World!”给 USB 主机显示。
点击7按钮,单片机收到 16 进制数 7后,回送“China!”给 USB 主机显示。
微信图片_20250428092549.png



回复 支持 反对

使用道具 举报 送花

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

6

主题

28

回帖

348

积分

版主

积分
348
发表于 3 天前 | 显示全部楼层
实验三: 中断方式,单片机USB中断接收服务函数收到命令后,printf_usb("Hello World !\r\n")或其他
一.源代码:
#include "stc8h.h" //头文件不分大小写,但关键字分大小写
#include "ai_usb.h" //USB 库和 USB 虚拟设备的头文件,需要在项目文件中添加对应的 USB 库
                   //由于在 USB 库函数的代码中已经定义了,不停电 ISP 下载命令字”@STCISP#”,
                   //只需要在下载软件的“收到用户命令后复位到 ISP 监控程序区”选项卡中进行相应的设置,
                  //即可实现 USB 不停电 ISP 下载功能,或串口不停电 ISP 下载功能。
                 // USB 接收中断服务程序中,调用用户实际需要执行的服务程序,
                 // 简称回调函数,用户根据实际应用场景需求编写
         void USBLIB_OUT_Callback(void)//用户希望 USB 库函数,中断方式回调执行的用户自己编写的任务函数,简称回调函数
        {
          if (UsbOutBuffer[0] == 6)
          printf_usb("Hello World !\r\n");         //接收到数据 6 后,直接打印输出“Hello World !”到主机相应软件的 USB【CDC/HID-串口助手】  
                                                                                 // \r 是回车,跳到行首,\n 是换行,就是换到下一行;\r\n 不要交换次序
          else if (UsbOutBuffer[0] == 7)
          printf_usb("China !\r\n"); //接收到数据 7 后,直接打印输出 “China !” 到主机相应软件的 USB【CDC/HID-串口助手】”
        }
               
               
          void main(void)
         {
          //EAXFR = 1; //允许访问扩展的特殊寄存器,XFR
          //WTST = 0; //设置取程序代码等待时间,赋值为 0 表示不等待,程序以最快速度运行
          //CKCON = 0; //设置访问片内的 xdata 速度,赋值为 0 表示用最快速度访问,不增加额外的等待时间
          P_SW2 |= 0x80;//使能可以访问扩展的特殊功能寄存器XFR,没有冲突不用关闭        
          usb_init(); //初始化 USB 模块
          set_usb_OUT_callback(USBLIB_OUT_Callback); //设置 USB 中断服务程序可以调用的回调函数
                                                    //此处 USBLIB_OUT_Callback 是前面用户自己编写的任务函数的函数名/地址,供 USB 库函数回调
          EA = 1; //使能全局中断
          while (1);
         }
二、编译成功,实验截图
微信图片_20250428100236.png

三、实验效果
点击6按钮,单片机收到 16 进制数6后,回送“Hello World!”给 USB 主机显示。

点击7按钮,单片机收到 16 进制数 7后,回送“China!”给 USB 主机显示。
微信图片_20250428100351.png



回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-1 22:18 , Processed in 0.113452 second(s), 66 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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