找回密码
 立即注册
查看: 548|回复: 7

学习《Ai8051U教学视频》笔记心得打卡|实验箱已发出

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:501
  • 最近打卡:2025-05-03 01:33:08

2

主题

66

回帖

2326

积分

金牌会员

积分
2326
发表于 2024-12-17 02:29:00 | 显示全部楼层 |阅读模式

随着时代的发展,8051系列单片机不仅没有过时,反而由于其稳定、可靠的性能,以及宏晶科技等厂商的不断创新与优化,在追求高效、智能、低功耗的当下,焕发出了新的生机与活力。

宏晶对8051系列单片机的持续优化与创新,更是让这一经典系列焕发了新生。不仅保留了8051系列易于编程、指令集丰富的优点,还加入了现代微控制器的低功耗、高性能、强大的外设集成等特性,使得8051系列单片机在物联网、智能家居、工业自动化、汽车相关领域展现出了前所未有的竞争力。

从早期的89/90系列,到内存、EEPROM、IO的扩展,到1T指令,到12、15系列,USB支持,免晶振,以及强大STC8和STC32系列,可谓代代经典。

而今年STC居然推出了包含人工智能的AI系列,不仅如名称中看到的支持AI能力,还拥有超高的运行速度、32位运算能力、1uA以下的低功耗模式,同时一如既往的极大简化外围晶振、复位等电路,这已经够震撼的了,并且根据介绍还支持音频播放,可以用来实现USB声卡,这种牛B产品,值得学习。

接下来我会把学习心得更新到这个帖子里,大家一起交流,共同进步。

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:501
  • 最近打卡:2025-05-03 01:33:08

2

主题

66

回帖

2326

积分

金牌会员

积分
2326
发表于 2024-12-17 03:10:05 | 显示全部楼层

学习《Ai8051U教学视频》笔记心得打卡


【第一集 序言】笔记


1: AI系列单片机存在很多提升点
截图202412170239065118.jpg

2:优化了Flash读写功能,对视频播放起到了质的提升
3:实现了IIS录放音
4:支持AI功能,比如通过ai实现手写字母识别,教程的示例中是做一个手写计算器
截图202412170259408972.jpg

5:演示中AI单片机实现的UI刷新率很高,可以顺畅反馈手写的内容,也能流畅的实现一些GUI界面,甚至能播放动画。
截图202412170304396970.jpg

6:直接通过单片机(加上喇叭、麦克风)就能实现录放音功能,无需专门的录放音模块
7:PWM与DMA做到了兼容,通过PWM+DMA可以驱动1000多个LED进行显示
截图202412170300381032.jpg

8:芯片支持硬件浮点乘除,结合单片机的IIS录音,与强大的快速FFT运算能力,以及很高的屏幕刷新,能实现一个频谱分析仪
截图202412170300156733.jpg


最后还发现这个单片机的另一个强大功能,它同时兼容8位和32位指令,既可以支持C51,也可以支持C251,
兼容80C52、12C5A和32G等单片机,可以与原先的芯片做到硬件和软件级别的无缝替换,这是以往单片机没有的。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:501
  • 最近打卡:2025-05-03 01:33:08

2

主题

66

回帖

2326

积分

金牌会员

积分
2326
发表于 2024-12-19 03:04:06 | 显示全部楼层
[第二集 硬件及工具介绍]笔记

STC在推出AI系列单片机的同时,就推出了AI单片机的实验箱,供学习和快速开发验证。
试验箱的尺寸与原先的类似,但布局上有一些变化,正面几乎都是接口器件,大部分外围元件挪到了板子背面。
另外增加了TF卡插口,音频输入输出,以及流行的TypeC插口等。
截图202412190259541870.jpg

截图202412190300512464.jpg
实验箱正面分布接近30种外设接口,能满足功能验证和开发的大部分需求。

AI单片机的软件开发与以往型号类似,也是ISP和Keil为核心,进行程序的编写,编译,下载和调试。由于STC对51的改进,中断数量突破了传统常规最大值,因此还需要下载中断插件,来使Keil支持STC的更多中断。
截图202412190301026477.jpg

开发Ai8051U,规格书必不可少,开发的第一步就是下载最新版的规格书,并且随时注意更新规格书和ISP到最新版本
截图202412190301137558.jpg


实验箱支持USB下载代码,按住P3.2的状态下按一下电源ON/OFF键,即可让单片机进入到USB-Writer模式。
截图202412190301291666.jpg


这时ISP会自动识别出USB-Writer,并支持烧录程序。
截图202412190301377448.jpg

烧录的程序可以选择8位和32位,这意味着AI8051U有着强大的兼容能力。
由于单片机内置晶振,因此可以在烧录时自由调节晶振的频率。
截图202412190301576403.jpg

烧录完成后即可试验经典的第一个程序:流水灯。


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:501
  • 最近打卡:2025-05-03 01:33:08

2

主题

66

回帖

2326

积分

金牌会员

积分
2326
发表于 2025-1-4 04:44:48 | 显示全部楼层

[第三集 点亮第一颗LED]笔记




截图202501040440259237.jpg

进行开发的第一步是新建工程,从main.c主文件进行编辑,当然如果工程比较大,可以把它拆分成多个文件,一部分文件提供函数调用,一部分文件实现功能。
在工程中需要进行相应的设置,比如CPU Mode设置为高效的C 251,以及选择对应的内存寻址方式和中断种类等。

截图202501040440442430.jpg
如果程序超过64K,还需要选择扩展内存的地址范围,这里的第一个程序很短,因此不要考虑超过64K的问题。

截图202501040441053710.jpg
另外如果程序超过64K,虚啊哦选择HEX文件的格式到HEX-386,以使编译出的程序支持超过64K的代码。

不过Create HEX file一定要勾上,才能生成HEX文件,用于下载到单片机。

截图202501040441209477.jpg
为指定型号的单片机开发,需要添加该类型单片机对应的头文件,STC ISP可以生成每种单片机对应的头文件,并保存到工程目录中。

截图202501040441378859.jpg
这个或许是AI 8051U的最简单的程序了,整个程序就是个死循环,什么事都不做,

但不可否认它确实是个正常的程序。

截图202501040441536905.jpg
点亮信号灯,本质上就是控制单片机引脚的状态,单片机通过引脚的电位状态与寄存器一致,
因此只要向寄存器中写入合适的值,就能设置引脚的电位状态,从而点亮信号灯。

从上面的电路图中可以看出,第一个信号灯收P4.0P0.0控制,因此需要在程序中设置这两个寄存器。

截图202501040442126966.jpg
设置IO口的数据之前还需要配置IO口的模式,开机时IO口处于高阻状态,我们需要把它配置到准双向口。

截图202501040442289894.jpg
完整的程序是这样,先设置P0P4的配置寄存器,把它们置为准双向口,然后向P40P00写入0让它们输出低电平,即可点亮LED








回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:501
  • 最近打卡:2025-05-03 01:33:08

2

主题

66

回帖

2326

积分

金牌会员

积分
2326
发表于 2025-1-8 02:13:21 | 显示全部楼层
[第四集 USB不停电下载]笔记



截图202501080158102208.jpg

STC为USB提供了预先写好的库文件,根据功能分为几类,
一种把USB作为CDC设备,另一种把USB作为HID设备。
另外,每种设备的操作方式分为中断和轮询,其中中断可以在任何语句位置响应,
而轮询需要程序在循环中主动去进行探测。
如果没有特殊需求,可以选择相应比较简单的CDC + 中断方式。


截图202501080201207302.jpg

每个库里面又分为8H和32G模式,这是因为STC AI8051u支持多种MCU的仿真,
这里选择比较高效的32G指令集。


截图202501080203009704.jpg

使用USB库时,需要定义一些变量,其中USER_STCISPCMD用于与STC ISP软件进行握手,
两者必须一致才能正常通信。


截图202501080204332218.jpg

同时需要打开EAXFR寄存器,以允许扩展RAM曲特殊寄存器XFR的访问,
因为控制USB时,需要这个功能。


截图202501080206061281.jpg

同时,需要打开中断使能寄存器,以允许全系统中的中断响应。


截图202501080206468331.jpg

以及IE2寄存器的EUSB位,以允许响应来自USB的中断。


不过这里有个问题,上述寄存器对USB来说是必须的,
那么如果把这些操作写道USB设备的初始化函数usb_init()里面,
就可以让程序更方便,不知道为什么没有这样设计。


截图202501080208579236.jpg

使用USB库函数时,会在编译时产生大量L57报警,
原因是库中提供了很多函数,而我们并没有使用全部的函数,
当编译器发现有函数没有使用时,会产生上述报警,这类报警其实是没有问题的,
因此可以通过工程设置,让它们不用报出来。




截图202501080202424720.jpg

这是控制USB不停电下载的全部代码,代码执行时会检测STC ISP是否发送了数据过来,
如果发送了数据,则将数据发送回去,这就完成了一轮握手,之后MCU进入下载模式,
即可进行程序的下载动作,全程不需要开关或重置单片机。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:501
  • 最近打卡:2025-05-03 01:33:08

2

主题

66

回帖

2326

积分

金牌会员

积分
2326
发表于 2025-1-26 02:38:03 | 显示全部楼层
[第五集 C语言基础]笔记



这一章主要讲解C语言的一些语法,内容更倾向单片机开发中的调试与IO控制。


截图202501260031503038.jpg

如果要通过USB口在STCIAP上打印调试信息,首先进行进行定义。
一种是直接定向到USB HID接口,另一种是定向到ISP下载软件中的7段数码管。


截图202501260229427597.jpg

其实在原理上,就是通过define,把printf这个函数定义成不同的打印功能的函数。


截图202501260230382529.jpg

比如通过USB HID打印时,就能在STCISP中打印上述内容。


截图202501260231175982.jpg

程序中可以使用64位浮点数,但需要在程序中进行#pragma float64声明。


截图202501260232565303.jpg

需要注意的是,在程序中进行计算时,要留心结果溢出情况,
在可能溢出的时候,通过声明,把变量转换为更大长度的变量进行计算。


截图202501260234044611.jpg

另外对于%的打印,需要用两个百分号进行转义,才能正确打印出来


截图202501260234488182.jpg

对常用的C语言编程中,加减乘除并不陌生,但比较少用移位运算,
但单片机控制IO口和设置寄存器时,却经常使用到这些,需要重点关注。


截图202501260236037026.jpg

然后是比特运算,在常见的C语言编程中不常使用,
在单片机的C语言中也是经常存在,并且不可缺少的操作。


进行单片机编程,务必把移位和比特操作速记于心,才能顺利编出想要的程序。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:501
  • 最近打卡:2025-05-03 01:33:08

2

主题

66

回帖

2326

积分

金牌会员

积分
2326
发表于 2025-2-6 01:55:12 | 显示全部楼层
[第六集 IO输入输出]笔记



单片机通过GPIO进行引脚的输入和输出的控制,将GPIO设置成不同的模式,
可以控制它的引脚功能和状态,以及输出的电流大小。
截图202502060143531466.jpg


截图202502060146438790.jpg
例如最常见的准双向口,以及推挽输出,高阻输入以及开漏模式。
本课使用准双向口模式,以检测按键的输入。

截图202502060151088881.jpg
单片机在默认设置中,打开了施密特触发器,施密特触发器主要为了避免输入的抖动,
原理上,当输入电压高于正向阈值电压,输出为高;当输入电压低于负向阈值电压,输出为低;
当输入在正负向阈值电压之间,输出不改变,只有当输入电压发生足够的变化时,输出才会变化,
因此在打开施密特触发器后,输入的高低电平判断标准会有所变化。

截图202502060152184533.jpg
本课中把GPIO设置成准双向口,这种模式既可以用于输出,也可以用于输入,在用于输入时的典型电路如上图所示,
弹起开关时,准双向口的电压为高电平,按下开关时,电流经过电阻流到地,拉低了双向口的电压,因此读出的数字为0,
电阻的作用可能是防止程序的错误造成电流过大损坏单片机。

截图202502060153147892.jpg
本课的第一个和第二个亮灯任务都很容易,判断P32的状态,然后通过P00控制灯的亮灭就可以了。
但第三个任务要复杂一些,第三个任务的代码不仅需要等待按键松开,还要考虑消抖处理,否则工作的就不正常。

截图202502060153315572.jpg

消抖的含义是,我们按下或放开按键后,其实真实的电压会有一些抖动,
如果程序不考虑这一情况,就会认为按键被连续按了多次,从而产生灯瞬间亮灭多次的情况。

截图202502060154019289.jpg
消抖的原理是在检测到按键按下后,等待一段时间后再次检测,如果这时按键还是同一状态,则认为按键是进入了平稳状态。
延时函数可以通过STCISP生成,对于STC32系列,需要把WTST设置成0才能使延时函数正常。AI系列单片机看起来也需要。

截图202502060154261052.jpg
最终的程序是这样的,为了调试方便,还添加了printf语句输出state的变化情况。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:501
  • 最近打卡:2025-05-03 01:33:08

2

主题

66

回帖

2326

积分

金牌会员

积分
2326
发表于 2025-2-15 16:25:09 | 显示全部楼层
[第七章] [定时器中断]笔记

截图202502151621427901.jpg
在原先的程序中,我们希望灯每3秒闪烁一下,并且对按键有反应。
但实际运行时,按键显得非常不灵敏,原因在于程序中的延时函数,
在延时过程中,程序不会进行其他任何工作,因此也就无法检测按键的情况了。
只有在退出延时函数的一瞬间,才会检测按键,这就造成了按键不灵敏的表现。


截图202502151621564008.jpg

上述问题可以使用定时器解决,使用定时器控制灯的亮灭时,主程序不用停下来等待,
而是可以再进行其他工作,提高了程序的响应,以及CPU的利用率。


截图202502151622157910.jpg

STC ISP可以自动生成定时器代码,这不仅方便,而且不容易出错,
简化了编程的复杂度。
AI8051u的T0、T1、T2、T3、T4和T11都支持24位模式(8位预分频+16位自动重载)。


截图202502151622292644.jpg

在主程序中执行STC ISP生成的定时器初始化函数后,单片机会定时产生中断,然后跳转到上面的中断函数中,我们可以在这个中断函数中写我们希望执行的动作。
比如这里改变灯的亮灭状态。


截图202502151623585168.jpg

教程中还遇到一个0xfd问题,原因是Keil 8051编译器导致,它把0Xfd到0xff用于保留字,与到这略过,而中文中却会出现这个字符,从而导致问题。
详细的说明在STC的这个文档中:


截图202502151623448096.jpg



截图202502151624086862.jpg

定时器在单片机内部的实现比较复杂,因为定时器的定制模式较多,比如分频、1T和12T模式,以及到期自动恢复数字,以及溢出中断等,并且定时器的后半部还能作为计数器和中断使用,所以需要设置一系列寄存器,才能把定时器初始化到我们需要的状态。

截图202502151624252886.jpg
定时器寄存器的设置可以使用这个公式计算出来。

截图202502151624395503.jpg
在实践中,我们完成了2个定时器实践,并且讲师留了一个思考题,如可实现多个定时任务。
我的想法如下:
1:最简单的,我们的单片机上有多个定时器,可以使用这些定时器实现多个定时任务。
2:使用一个周期性触发的定时器,在定时器触发时,判断哪些任务到期,去执行到期的任务,当最后一个任务执行完成后,删除这个定时器。
3:把定时器的时间设置成最近任务的时间,到这个时间执行第一个任务,然后计算剩余任务中的最近任务,把定时器的时间设置为下一个任务,依次反复直到最后一个任务执行完成。



回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-3 22:13 , Processed in 0.126277 second(s), 91 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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