nethua 发表于 2026-3-11 02:31:56

打卡学习“史上最强AI8051U”教学课程

       从2023年底初识STC单片机,到注册本论坛至今,已经不知不觉过了2年有余。从一个“懵懂少年”开始一步步学习开始,中间充满了惊奇与感叹,国产芯片的崛起,离不开我们中国工程师们的辛苦耕耘,在此致敬国产单片机!今后一定是中国最强!

       由于工作等多方面原因,学习STC单片机的时间比较稀少,中间断断续续,没能好好系统地连贯地学习。现在的STC已经从当初我在学的STC32G发展到了如今的AI8051,时代永远在进步,学如逆水行舟,不进则退。这次决定好好连贯地系统地学习一遍最新的AI8051U。
       打卡之鉴正式开始。

nethua 发表于 2026-3-11 02:43:08

attach://133351.jpg
第一课:8051U强在哪里?
1.屏幕显示和视频播放(flash编程器)
2.IIS录放音
3.PWM_DMA
4.频谱分析仪(上位机)
5.手写计算器
6.QSPI,PWM移相,硬件乘除,单精度浮点

attach://133352.jpg

简介:
Ai8051U,USB 型 1T 8051,支持32位和8位指令集, RMB2.3
管脚兼容天王级别的:  89C52RC,  12C5A60S2
要兼容 8位8051指令集,  可以用 Keil C51/IAR/SDCC 编译器
===就相当于更强大的 8H8K64U
要兼容 32位8051指令集,可以用 Keil C251 编译器,双核兼容设计
===就相当于更强大的 32G12K128, 32G8K64
34K SRAM(2K edata, 32K xdata), 64K Flash
TFPU@120MHz, 硬件浮点/硬件三角函数 运算器
DMA支持PWM, DMA支持外设直接到外设, P2P
120MHz-PWM支持硬件移相,16位PWM; 真12位ADC
USB, 4组串口,12位ADC, 轨到轨比较器
QSPI, SPI, I2S, I2C,  TFT-i8080/M6800 接口
PDIP40,LQFP44,LQFP48



1.1、屏幕显示

1.2、支持触摸屏操作

1.3、支持FLASH视频播放


2、支持IIS录放音


3、支持PWM_DMA


4、支持频谱分析仪(上位机)


5、AI功能:手写计算器


6、QSPI,PWM移相,硬件乘除,单精度浮点

nethua 发表于 2026-3-12 00:29:22

第二课:
1、AI8051U实验箱硬件介绍
a、实验箱整体外观

b、实验箱开箱图

c、实验箱正面图与芯片功能简介

d、实验箱背面图与芯片功能简介


2、程序代码编写工具及程序下载工具的下载、安装和使用方法

a、KEIL软件的安装

b、8051U芯片手册下载


c、安装下载工具

d、添加工具软件的头文件



e、中断拓展插件的下载及安装



f、实验箱代码下载


g、实验箱说明书下载

h、下载第一个程序






至此第二节课程学完,已经开始迫不及待的想要开始敲代码设计之旅了,加油吧“烧年”!
最后总结冲哥的那句经典语录:
      哪怕梦想让我们拼得遍体鳞伤,这一次我们也要勇往直前!

nethua 发表于 2026-3-12 23:27:34

第三课:点亮第一颗LED

1、打开KEIL软件,选择“PROJECT"-->"NEW UVISION",并在弹出窗口新建一个文件夹并命名”DM01“。

2、打开文件夹,并命名一个程序文件”DM01“。

3、命名好后会弹出窗口进入芯片选择,选择"STC"-->"AI8051U-32BIT"然后OK

4、随后需要在新程序里新建一个工程文件:在左边窗口选择”SOURCE GROUP“点鼠标右建,弹出窗口选择”ADD NEW ITEM TO GROUP“

5、接下来弹出窗口中选择”C++“,在底部输出"MAIN"为工程文件名。

6、对KEIL软件进行一些初始设置,如图:


7、头文件的用法及添加方法:

7-1、打开STC下载工具,选择顶部”头文件“-->”KEIL格式文件“-->”保存文件“到DM01文件夹,方便调用。此目的是方便换机调试程序时没有头文件可用。


7-2、查看头文件是否添加成功:


7-3、写代码简单测试是否能成功编译:OK编译环境搭建成功。

8、写下点亮第一个LED灯的代码:

9、编译下载代码看结果:OK,第一个LED灯成功点亮!

10、正面来从软件和硬件方面分析LED灯亮的原理:
10-1、硬件方面,P0组端口接LED灯负极,正极接PNP三极管发射极,P40端口接三极管基极,电源VCC接三极管集电极。因此三极管需要P40拉低到0V实现导通,同时P0组端口也需要拉低到0V,最后才能点亮LED灯。

10-2、软件方面,芯片IO口由端口模式来控制其是否能输出,IO模式如下图

10-3、了解了端口模式后,进行程序编写:

void main(void)                //主函数
{
        P0M1=0;                //0X00可以写成0
        P0M0=0;                //设置P0组(即从P00~P07)端口为准双向口
        P4M1=0X00;
        P4M0=0X00;                //设置P4组(即从P40~P47)端口为准双向口
       
        P40=0;                        //P40端口拉低,输出0V
        while(1)                //while前面的代码只执行一次
        {                                //while里面的代码会一直重复执行
                P00=0;                //P00端口拉低,输出0V
                P01=0;                //P01端口拉低,输出0V
        }
}
10-4、代码下载成功,来看效果:成功点亮2个LED灯

11、学习一个简单的端口工作模式配置,事半功倍:


至此,第三课学习完毕。

nethua 发表于 2026-3-14 02:12:46

第四课:USB不停电下载的实现

前言:这一课感觉有些难度了,特别是中断函数感觉比较复杂。前段时间有幸学习过冲哥的《STC32位8051单片机原理及应用》学到这部分也感觉比较难懂了。但其实后来想想只是中断函数的参数设置比较繁杂而已,而并不难。我想只要一遍遍的跟着冲哥的视频教程去学习和练习,能做到举一返三,到后来熟悉了中断函数的设置概念和各项参数。就能比较轻松的学习接下来后面的课程。OK,接下来继续我的学习过程。

1、首先我们了解了平时正常下载程序到单片机时,我们都需要按一下P32这个电源键切断一下电源,电脑上的下载程序才能识别到单片机并开始下载程序。而学习了这个”USB不停电下载“程序后,我们就可以实现一键点击下载就可以不用按任何键实现程序下载到单片机里,这样节约了大量时间和我们的注意力。所以,这节课就是我们要学习好的目的。

经过常规下载和不停电两次下载的对比,明显感觉不停电下载带来的速度与便捷,我想这也是我们这个教程把这节课放到前面来讲的原因吧。

2、要实现不停电下载,就需要我们在程序代码上做一些设置,下面我们来详细学习下这个过程。

3、不停电下载进行设置的主要步骤简介:


4-1、首先我们要去官网下载这个”USB不停电下载“的库函数文件:


4-2、我们下载解压后得到一个文件夹,我们打开所需要的文件夹,选中文件复制到我们的课3中的工程文件目录中,以便使用:


4-3、复制文件到这个工程文件夹里


4-3、复制后效果如下:


4-4、接下来再复制另一个头文件过来:


4-5、下面是复制后的结果:


5-1、接下来我们把LIB库文件添加到工程中,如下:


5-2、选择这个LIB库文件点”ADD“


5-3、添加后结果如下:


6-1、正面我们进行程序中的头文件调用,如下:


6-2、后面进行代码复制:把例程代码中的关键部分复制过来:
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";

void main(void)
{
    P_SW2 |= 0x80;                //B7位写1,使能访问XFR
       
    P0M1 = 0x00;   P0M0 = 0x00;
    P1M1 = 0x00;   P1M0 = 0x00;
    P2M1 = 0x00;   P2M0 = 0x00;
    P3M1 = 0x00;   P3M0 = 0x00;
    P4M1 = 0x00;   P4M0 = 0x00;
    P5M1 = 0x00;   P5M0 = 0x00;
    P6M1 = 0x00;   P6M0 = 0x00;
    P7M1 = 0x00;   P7M0 = 0x00;
       
        usb_init();                                     //USB CDC 接口配置

    IE2 |= 0x80;                                    //使能USB中断
    EA = 1;                                                                                        //IE |= 0X80;
       
        while (DeviceState != DEVSTATE_CONFIGURED);   //等待USB完成配置
       
        while(1)
        {
               
      if (bUsbOutReady)
      {
            USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
            
            usb_OUT_done();
      }

上面这部分可以全部复制过来,避免选择性复制容易出错。

6-3、复制过来后的效果如下:


7-1、接下来就是学习一下几个命令参数的用法,首先是P_SW2这个参数,作为一个串口功能脚转换的控制开关,首先必须打开它的B7脚端口,也就是把EAXFR设置成1使能状态。正常写法就是”P_SW2 |= 0x80;                //B7位写1,使能访问XFR“。这里也两次巩固学习了一个”|“的用法,记得上次视频学习中好像没这么使用过这个参数。


7-2、下面就是另一重要的中断开关,EA也就是专业术语”中断使能寄存器“。我的理解就是EA就是一个中断函数的总开关,如果不打开这个总开关,那么所有的中断请求函数,都将无法通过这里实现其功能。

在这里,需要把EA函数中的选项置1。程序写作”EA=1“或者可以写成”IE |= 0x80;“功能一样。EA是IE函数里的B7端口。

7-3、下面就是另一个中断开关IE2里面的B7端口即EUSB,必须设成使能状态。即:”IE2 |= 0x80;“这是USB的中断使能端口,必须打开。


7-4、这里简单看下USB中断使能原理图,作大致了解:这里感叹EA这个函数作为总开关的强大之处!无处不在,无时不需要!


7-5、最后在文件编译过程中,出现两个问题,一个是57错误,另一个是L104错误。57错误可以如下图解决:




7-6、L104错误的,其意思是出现重新定义变量,于是经过一行行代码查询,发现问题出现在char *USER_STCISPCMD = "@STCISP#";这行代码上,只要把它注释掉即可。


7-7、注释掉代码后,可以顺利编译代码了:


8-1、最后来欣赏一下成果:不停电下载:


8-2、我们把下载工具勾上自动下载,然后就可以编译代码后实现自动不停电下载了,完美!


总结:这节课学到的知识点比较繁杂,需要一点点消化。先记住需要涉及到的中断函数,再慢慢在以后学习过程中去强化记忆。这个中断函数功能异常强大,也比较难学。持之以恒,方能百战不殆!

芯映芯 发表于 2026-3-14 11:17:40

要 做到 USB不停电下载;
要 尝试 AiCube 图形化自动配置生成程序工具;
推荐优先看的:
printf_usb("Hello World !\r\n")及
USB不停电下载, 演示视频链接:
https://www.stcaimcu.com/thread-19077-1-1.html

下载 最新的 AiCube-ISP-V6.96T 或以上版本软件 !
深圳国芯人工智能有限公司-工具软件

下载 最新的 USB库函数,永远用最新的 USB库函数 !
深圳国芯人工智能有限公司-库函数
下载 最新的 用户手册 !
下载 最新的 上机实践指导书 !

下载 最新的 Ai8051U 用户手册
https://www.stcaimcu.com/data/download/Datasheet/AI8051U.pdf

下载 最新的 Ai8051U 实验指导书,
有 AiCube 图形化自动配置生成程序工具使用说明
https://www.stcaimcu.com/data/do ... %AF%BC%E4%B9%A6.pdf


推荐优先看的 printf_usb("Hello World !\r\n")及usb不停电下载, 演示视频链接
https://v.stcai.com/sv/1c5eec2-197fcd9b766/1c5eec2-197fcd9b766.mp4
https://v.stcai.com/sv/1fce8086-197cf2b9dd4/1fce8086-197cf2b9dd4.mp4

nethua 发表于 2026-3-14 17:31:25

今天学习并上传的第四课,还没有通过审核,但自己也无法打开查看和编辑,希望版主能审核通过,如果不能通过,希望能打回我好重新编辑,谢谢。

nethua 发表于 2026-3-14 17:52:55

下面来学习一下printf_usb("Hello World !\r\n")的第一个实验


这个视频教程虽然只有二十几分钟,但感觉真是干货满满啊。第一个实验的学习反复观看和琢磨就花了接近1个小时,看来我这个小白需要更加努力才行。不然跟不上学习节奏了。

1-1、库文件的省略,从视频中了解到AICUBE的强大


1-2、正面开始进行AICUBE的设置,首先打开ISP软件


1-3、这里是对ISP软件的初始设置1


1-4、ISP初始设置2MCU型号添加成功


2-1、这里我们打开AICUBE进行设置1


2-2、这里我们打开AICUBE进行设置2


2-3、这里我们打开AICUBE进行设置3


2-4、这里我们打开AICUBE进行设置4


2-5、这里我们打开AICUBE进行设置5


2-6、这里我们打开AICUBE进行设置6


2-7、这里我们打开AICUBE进行设置7


2-8、这里我们打开AICUBE进行设置8


2-9、这里我们打开AICUBE进行设置9


2-10、这里我们打开AICUBE进行设置10


2-11、这里我们打开AICUBE进行设置11,最后一步设置完成


3-1、这里是PRINT_USB代码的编写1


3-2、这里是PRINT_USB代码的编写2


3-3、这里是PRINT_USB代码的编写3


3-4、这里是PRINT_USB代码的编写4


4-1、开始代码下载工作1


4-2、开始代码下载工作2


4-3、开始代码下载工作3


4-4、开始代码下载工作4


4-5、开始代码下载工作5


4-6、开始代码下载工作6


4-7、开始代码下载工作7下载成功,程序运行成功!


4-8、这验证了USB不停电自动下载,实验成功

nethua 发表于 2026-3-14 17:57:47

今天来学习一下第五课:C语言基础

1、这节课的主要内容有以下4点:



2-1、首先我们来学习一下第一点:C语言USB-CDC串口之PRINTF函数的实现过程



2-2、打开USB库中的PRINTF_HID宏定义(去掉//)


2-3、理解PRINTF的函数原型的定义
#define printfprintf_hid
int printf_hid (const char *fmt, ...);


2-4、理解PRINTF的函数原型的定义:下面我们用实例代码进行一下验证


2-5、验证过程:将代码写入单片机


2-6、验证成功,PRINTF函数实现


3-1、下面我们来学习一下C语言的格式字符的用法


3-2、这是格式字符的表示代码,需要熟悉运用


3-3、这里是ASCII字符代码表,需要熟悉运用


3-4、学习一下数的进制表示方法与转换算法


4-1、数据的基本类型介绍:


4-2、下面这段代码是我学到的u8与u16即8位与16位数的运算表达

#include "ai8051u.h"                        //调用头文件
#include "stc32_stc8_usb.h"                //调用头文件

#define u8 unsigned char                //用u8代替unsigned char来定义一个无符号的8位变量(取值范围是0-255)
#define u16 unsigned int                //用u16代替unsigned int来定义一个无符号的16位变量(其取值范围是0-65535)
u8 X=20,Y=20;                                        //这里作为全局变量,可以在以下任意点调用

void main(void)
{
    P_SW2 |= 0x80;                //B7位写1,使能访问XFR
      
    P0M1 = 0x00;   P0M0 = 0x00;
    P1M1 = 0x00;   P1M0 = 0x00;
    P2M1 = 0x00;   P2M0 = 0x00;
    P3M1 = 0x00;   P3M0 = 0x00;
    P4M1 = 0x00;   P4M0 = 0x00;
    P5M1 = 0x00;   P5M0 = 0x00;
    P6M1 = 0x00;   P6M0 = 0x00;
    P7M1 = 0x00;   P7M0 = 0x00;
      
      usb_init();                                     //USB CDC 接口配置

    IE2 |= 0x80;                                    //使能USB中断
    EA = 1;                                                                                        //IE |= 0X80;
      
      while (DeviceState != DEVSTATE_CONFIGURED);   //等待USB完成配置
      
      while(1)
      {
               
      if (bUsbOutReady)                                                      //如果接收到了数据
      {
            //USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
                        /*------printf这里就会在CDC串口助手发送任意数据后,进行下面的打印-----------*/
            printf("X/Y=%u\r\n,(u16)X/Y");               //%u为无符号,u16为上定义的16位变量名,为应对8位乘8位变16位。结果会强制转换为16位整数。
                        printf("X%%Y=%u\r\n,(u16)X%Y");                //%%实为一个%为防止单个%会变成转义符,算术过程为取X/Y的余数
            usb_OUT_done();
      }
               
      }
}


4-3、C语言的常用运算符的学习


4-4、来验证一下运算符的应用过程:结合条件语句IF来判断真假,并输出。


4-5、验证成功,成功输出判断语句的结果


5-1、常用运算符&&的用法一例:


5-2、代码的实现过程:


5-3、位运算符的学习


总结:C语言的博大精深,可谓是名不虚传。学好C语言,就掌握了学好单片机的钥匙。跟着冲哥学C语言,慢慢学,一步步消化。

nethua 发表于 2026-3-15 19:08:50

来学习一下第六课:I/O输入输出

1、这节课的学习摘要:


2-1、关于GPIO的解释

这里了解到:VDD的对地电压最低值为-0.3V,最高不能超过5.5V。而I/O口的对地电压最低值也是-0.3V,最高不能超过VDD+0.3V。

2-2、I/O口的4种工作模式介绍


2-3、I/O口的电压介绍


3-1、按键输入检测的简介


3-2、按键输入检测任务一和任务二的实验


3-3、按键输入检测任务三实验


3-4、按键输入检测任务三实验结果查看


3-5、按键输入检测任务三实验结果的现象讨论


3-6、对实验三代码进行改进


3-6、对实验三代码进行改进后再查看结果:按键仍然不稳定


4-1、引入“按键抖动”概念,其决定实验三的准确性


4-2、解决按键抖动的重要因素:需要延时函数支持,步骤一


4-3、延时函数实现方法:步骤二


4-3、延时函数实现方法:步骤三


4-3、延时函数实现方法:步骤四


4-4、实现按键消抖,实验验证成功


总结:这节课主要了解I/O口的工作原理以及简单的基本应用,然后引入延时函数来实现按键消抖的办法。由于手里暂时没有实验箱,无法做课后小练,期待能早点获取论坛送的实验箱来进一步验证和学习。
页: [1] 2
查看完整版本: 打卡学习“史上最强AI8051U”教学课程