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

示例贴:日日自新学习AI8051U

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:349
  • 最近打卡:2025-05-03 08:46:12

7

主题

281

回帖

1059

积分

金牌会员

积分
1059
发表于 2024-12-29 07:05:45 | 显示全部楼层
学习了。day day up
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:52
  • 最近打卡:2025-04-08 20:05:04
已绑定手机

13

主题

79

回帖

438

积分

荣誉版主

积分
438
发表于 2025-1-7 20:14:22 | 显示全部楼层

【第四课 USB不停电下载 补课】

一、USB库文件下载

在官网下载USB库文件。库文件包含CDC和HID两种下载模式。

1.1 CDC模式和HID模式

1. CDC模式:
是一种 USB 设备类规范,主要用于设备与主机之间的通信,实现数据的传输,其功能类似于传统的串口通信。其数据传输量相对灵活,可以进行大数据量的传输。
2. HID模式:
是一种用于人机交互设备的 USB 设备类规范,专注于人机交互,是为了方便用户操作主机设备或者接收主机反馈而设计的。它主要用于连接输入设备(如鼠标、键盘)和输出设备(如简单的状态指示灯设备)。其数据传输量通常较小。因为它主要传输的是用户操作信息(如鼠标移动的坐标变化、按键的按下和松开状态)或者简单的设备状态反馈信息,这些数据相对简洁。

image.png

1.2 查询模式和中断模式

USB库还包含两种模式,一个是查询模式,一个是中断模式。

1. 查询模式: 将USB库的传输相关代码写在while循环中。MCU会按顺序执行,每次循环到传输语句时执行传输命令。这种方法的好处是不会影响系统其他代码段的运行,仅在执行到代码传输语句时才会传输,其他时刻不会传输。

2. 中断模式: 类似一种外部中断方式。初始化USB语句后,注册一个名为usb_OUT_callback()的回调函数。回调函数由USB中断在接收到串口数据时自动调用。这种中断触发方式可能会影响到系统的执行。

STC工具箱使用CDC下载模式比较好用(老师说的)。另外,选择查询模式的32位文件。文件名为stc32g_cdc_query_demo

二、USB库文件移植

2.1 添加头文件

将点灯文件另存为,并以此为基础进行usb库文件移植。

前面提到,选择32位模式、查询模式下的CDC传输方式。该库文件名为stc_usb_cdc_32.LIB,将这个文件连同stc32_stc8_usb.h文件复制到工程文件main.c相同目录下。在工程目录中添加LIB文件之后,在main.c文件中添加下方头文件并编译无报错即可。

#include "stc32_stc8_usb.h"

使用.LIB文件的好处是看不到USB库的源代码,这样就防止误改代码导致的功能错误。

2.2 USB初始化函数

按照示例代码中的内容,添加初始化函数,定义有关变量。

#include "AI8051U.h"
#include "stc32_stc8_usb.h"

char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";

void main(void)
{
	//配置所有IO为准双向口
    P0M0 = 0x00; P0M1 = 0x00; 
    P1M0 = 0x00; P1M1 = 0x00; 
    P2M0 = 0x00; P2M1 = 0x00; 
    P3M0 = 0x00; P3M1 = 0x00; 
    P4M0 = 0x00; P4M1 = 0x00; 
    P5M0 = 0x00; P5M1 = 0x00; 
    P6M0 = 0x00; P6M1 = 0x00; 
    P7M0 = 0x00; P7M1 = 0x00; 

	usb_init();		//USB-CDC 接口初始化

	//这里需要继续配置命令参数

	while(1)
	{
		//这里需要继续配置命令参数
	}
}

其中 内部自定义命令 char *USER_STCISPCMD = "@STCISP#";要和ISP软件的自定义命令内容相一致。

image.png

2.3 配置命令参数

对比示例代码同时需要添加以下几方面代码:

P_SW2 = 0x80;	//使能访问XFR,没有冲突不用关闭

或者是EAXFR=1;因为USB属于特殊功能寄存器,其存储在XFR列表当中。

image.png

EA = 1;

image.png

中断使能在后面的计时器、外部等中断功能需求时需要配置该选项。(但是这里视频写了IE2 |= 0x80;但是示例代码中没有。)

while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置

另外,在while循环中添加USB数据传输相关语句:

if (bUsbOutReady)
        {
            USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
          
            usb_OUT_done();
        }

编译后会报*** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS,意思是.h库函数内有很多未调用的函数。可以在Options中关闭。

image.png

2.3 烧录程序

这里进行最后一次手动烧录。保持P32按下状态后点按Power按键然后松开,系统进入下载模式。

image.png

烧录完成后在ISP将如下设置勾选后就可以了。打开自动下载按钮,编译完成会自动下载。
image.png

(但是这里为什么是“下次使用HID接口进行ISP下载”????)

点评

附件:STC_USB_LIBRARY.zip 附件:01-第四课:课堂代码.zip  详情 回复 发表于 2025-1-7 20:18
君子知命不惑,日日自新。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:52
  • 最近打卡:2025-04-08 20:05:04
已绑定手机

13

主题

79

回帖

438

积分

荣誉版主

积分
438
发表于 2025-1-7 20:18:05 | 显示全部楼层
USB库文件(20250107) [attach]79498[/attach] 课堂作业 [attach]79497[/attach]

点评

库文件(20250107版本) 课堂代码  详情 回复 发表于 2025-1-7 20:20
君子知命不惑,日日自新。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:52
  • 最近打卡:2025-04-08 20:05:04
已绑定手机

13

主题

79

回帖

438

积分

荣誉版主

积分
438
发表于 2025-1-7 20:20:42 | 显示全部楼层
27276*** 发表于 2025-1-7 20:18
USB库文件(20250107)

库文件(20250107版本) STC_USB_LIBRARY.zip (871.18 KB, 下载次数: 34)
课堂代码 01-第四课:课堂代码.zip (88.59 KB, 下载次数: 39)
君子知命不惑,日日自新。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:52
  • 最近打卡:2025-04-08 20:05:04
已绑定手机

13

主题

79

回帖

438

积分

荣誉版主

积分
438
发表于 2025-1-7 20:42:41 | 显示全部楼层
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=124432&ptid=12058][color=#999999]272761180 发表于 2024-11-27 22:38[/color][/url][/size] 【第五课】《C语言基础》 [/quote]

【第五课 C语言基础 补课】


一、实现USB-CDC串口的Printf函数

stc32_stc8_usb.h文件中取消注释下面语句

#define PRINTF_USB            //printf输出直接重定向到USB口

重定向原理就是进行了宏定义

#define  printf  printf_hid
int printf_hid(const char *fmt,...);

image.png

【USB-CDC串口通讯实验】

实现当串口接收到数据时自动发送STC YYDS语句。

实验现象:

image.png

这里补充一点,由于USB-CDC使用的是虚拟串口,因此波特率使用任何一个均可进行通讯。

点评

课堂代码:  详情 回复 发表于 2025-1-7 20:43
君子知命不惑,日日自新。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:52
  • 最近打卡:2025-04-08 20:05:04
已绑定手机

13

主题

79

回帖

438

积分

荣誉版主

积分
438
发表于 2025-1-7 20:43:27 | 显示全部楼层
27276*** 发表于 2025-1-7 20:42
【第五课 C语言基础  补课】

一、实现USB-CDC串口的Printf函数

课堂代码: 01-第五课:课堂代码实现printf.zip (89.56 KB, 下载次数: 41)
君子知命不惑,日日自新。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:52
  • 最近打卡:2025-05-03 06:45:24
已绑定手机

1

主题

20

回帖

305

积分

中级会员

积分
305
发表于 2025-3-22 12:27:43 | 显示全部楼层
刚学习何老师的几集在B站
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:52
  • 最近打卡:2025-05-03 06:45:24
已绑定手机

1

主题

20

回帖

305

积分

中级会员

积分
305
发表于 2025-3-22 12:46:05 | 显示全部楼层
27276*** 发表于 2024-11-25 10:51
【第一课】《序言》

AI8051U强在哪里?

增加了数据线,快了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:52
  • 最近打卡:2025-05-03 06:45:24
已绑定手机

1

主题

20

回帖

305

积分

中级会员

积分
305
发表于 2025-3-22 12:54:22 | 显示全部楼层
VC*** 发表于 2024-11-27 03:40
虽然你很有想法,但我还是要泼一盆冷水

简单明了
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-3 15:16 , Processed in 0.168065 second(s), 109 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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