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

YXRA-SDK教程 || 已持续更新到第18课,ADC/PWM/I2C/I2S/USB/CAN 都有了

[复制链接]

865

主题

1万

回帖

2万

积分

管理员

积分
25104
发表于 2026-8-7 14:10:01 | 显示全部楼层
LeoringYang 发表于 2026-8-7 14:05
每天发一帖,标题上会注明第N课

1,  这样论坛会更乱
2,围观的不能方便的跟进
回复

使用道具 举报 送花

已绑定手机

35

主题

99

回帖

1335

积分

金牌会员

积分
1335
 楼主| 发表于 2026-8-7 17:42:08 | 显示全部楼层
神农鼎 发表于 2026-8-7 14:10
1,  这样论坛会更乱
2,围观的不能方便的跟进

如果是一个帖子,楼会盖得很高。我建议官方搞个学堂之类。比如我申请一个课堂,这样我就一直在这个课堂中发布课程。开发者相当于学生,也在这个课堂中。
回复

使用道具 举报 送花

865

主题

1万

回帖

2万

积分

管理员

积分
25104
发表于 2026-8-7 23:05:01 | 显示全部楼层
先在一个贴子中,楼层高还是集中的
回复

使用道具 举报 送花

已绑定手机

35

主题

99

回帖

1335

积分

金牌会员

积分
1335
 楼主| 发表于 2026-8-8 10:07:33 | 显示全部楼层

YXRA-SDK第三课:定时器中断实现跑马灯

第二课中在主程序中通过延时+循环实现跑马灯效果,这种方案优点是简单明了。
一般来说,对于定期执行的任务一般放在定时器中,可由定时器中断来执行。本节课向大家演示YXRA-SDK是如何实现定时器中断实现跑马灯效果的。
注意:只要是在中断中执行的程序,一定要简短。如果中断程序执行时间过长,可能导致的后果是:1、中断可能"连续触发",导致ISR被反复执行,主循环根本得不到运行时间;2、象定时器计数这样的中断会出现误差,功能执行频率不对;3、主程序分不到运行时间,主程序卡住。如果中断程序无法在短时间内完成,可记录当前状态,由主程序来执行。
下面开始一步一步的实现这个功能。
首先在设备视图中添加控制LED的关联的端口Px,官方实验箱是P4.0+P6.0。我们将P4和P6放到设备视图中,设置成准双向口模式,并赋上初值0xE7,让中间的两颗LED能亮。
接着在设备视图中添加定时器0(其他定时器也可以),设置定时器自动装载初值,以及分频,记住一定要启用中断。一般将间隔时长控制在100ms左右。定时器实现跑马灯这个功能中,各位开发者不要纠结如何严格计算出时间。如果用到定时器并严格要求时,系统会计算并匹配(但不会自动更改定时器的属性),通过配置校验功能可以看到。
接下来就是在定时器中断中添加LED循环的程序,双击设备视图中的定时器0,打开程序,在handleInterrupt()方法中添加。
功能已经开发完成,是不是非常快捷。YXRA-SDK不仅快捷,更会在系统层面上添加检测机制,尽量为开发者减少配置冲突。
stcproject.zip为以上功能的项目,可在YXRA-SDK中直接导入即可。如果想深入了解定时器,在设备视图的定时器0上右键菜单中点击开发文档,也可以在帮助菜单中打开完整的帮助文档,定位到定时器章节。


截图202608081006049907.jpg
截图202608081006255519.jpg
截图202608081009057907.jpg

stcproject.zip

21.8 KB, 下载次数: 7

回复

使用道具 举报 送花

已绑定手机

35

主题

99

回帖

1335

积分

金牌会员

积分
1335
 楼主| 发表于 2026-8-8 10:15:04 | 显示全部楼层
上述只做了定时器0,有兴趣可以用4个定时器,每个定时器控制P6的两位。
回复

使用道具 举报 送花

已绑定手机

35

主题

99

回帖

1335

积分

金牌会员

积分
1335
 楼主| 发表于 2026-8-9 09:31:20 | 显示全部楼层
第四课:外部中断INT0~INT4
STC32G12K128共有5个外部中断INT0~INT4,这些中断由端口P3.x触发。
INT0:P3.2触发;
INT1:P3.3触发;
INT2:P3.6触发;
INT3:P3.7触发;
INT4:P3.0触发;
打开YXRA-SDK开发工具,将INTx放到设备视图中。官方实验箱只有INT0和INT1,所以在这里将外部中断0和外部中断1放到设备视图中。INT0~INT5中断,YXRA-SDK默认是下降沿触发中断。为了能够观察到外部中断产生的效果,在这里我们让它们触发LED亮灭。在INT0或INT1的handleInterrupt()方法中添加一行代码:P6=P6 ^ 0xFF;到这里就已经完成了外部中断的开发。下载运行,按下INT0和INT1按键(以上均为官方STC32G实验箱),可以看到LED会变化。注意:INT0和IN1触发并不一致。
stcproject.zip为外部中断测试项目,可在YXRA-SDK中直接导入。
截图202608090929151460.jpg
截图202608090929567144.jpg

stcproject.zip

22.33 KB, 下载次数: 6

回复

使用道具 举报 送花

已绑定手机

35

主题

99

回帖

1335

积分

金牌会员

积分
1335
 楼主| 发表于 2026-8-10 15:16:24 | 显示全部楼层
第五课:定时器TIMER0~TIMER4
跟着课程走到今天,对YXRA-SDK应该很熟练了。这个开发工具几个明显的优势:1、开发快捷,单片机设备配置完全可视化;2、编译开发完全国产化,不受C影响;3、程序模块设计,很容易实现封装与移植。它的劣势也很明显,编译后的程序相较C语言明显大许多。比如今天定时器功能开发,如果用C语言开发编译Hex,只有小小的1k,而用YXRA-SDK编译则有20K之大。其实原因很简单,C语言开发的只有这几个定时器,YXRA开发语言面向对象,需要整个对象结构等。虽然这是它的劣势,但就代码保密来说,用YXRA-SDK开发的更安全,反编译人员几乎无法看出来开发者的意途。
言归正转,我们今天用YXRA-SDK开发定时器。同样用LED来显示定时器的效果。
还是和以前一样,在项目的设备视图中添加定时器0、定时器1、定时器2、定时器3、定时器4。为了能让LED的闪烁能明显看到,我们需要定时触发间隔达到300ms以上,仅用16位自动装载是做不到这一点的,STC32G12K128的主频是24MHz。我们需要通过12倍频和8位预分频调整。调整方法:先通过官方下载工具ISP中的定时器计算器计算出500ms的加载初始值,如果显示“当前的设定无法产生指定的时间 !”那就下降到100ms,再用到8位预分频调整。
本例中定时器用于LED闪烁,无需严格定时。后面用定时器作串口通讯、脉冲调制PWM,需要严格定时。
双击定时器图标,进入定时器的yxra程序中,在中断程序handleInterrupt()方法中添加使LED闪烁的程序即可。官方实验箱对应的LED是端口P6,所以示例中用以下代码:
P6=P6^0x01;
P6=P6^0x02;
P6=P6^0x04;
P6=P6^0x08;
P6=P6^0x10;
来实现五个定时器分别闪烁五个不同的LED。由于五个定时器的间隔不一样,会看到五个LED闪烁频率不一样。附件为项目,可在YXRA-SDK中直接导入。由于所有的示例都是在同一个项目中完成,所以已经导入的需要先移除。

截图202608101514321762.jpg
截图202608101514542867.jpg

stcproject.zip

37.91 KB, 下载次数: 6

回复

使用道具 举报 送花

已绑定手机

35

主题

99

回帖

1335

积分

金牌会员

积分
1335
 楼主| 发表于 2026-8-11 09:29:42 | 显示全部楼层
第六课:RTC时钟
STC32G12K128 内置的 RTC(实时时钟)是一个独立的硬件计时模块,主要用于需要记录年、月、日、时、分、秒的低功耗或精准计时场景。支持设置一组闹钟,并在闹钟触发或每秒变化时产生中断,可以用来唤醒处于休眠模式的单片机。如果要保证RTC时钟精准,需要外接外部 32.768kHz 晶振,这是保证时钟长期走时准确的首选。有开发者实践表明,若使用内部时钟,一天可能偏差近10分钟。
RTC时钟为开发者提供了简单快捷的定时处理功能,今天我们就以RTC实现秒和二分之一秒中断。
打开YXRA-SDK开发工具,创建STC32G项目,在设备视图中添加RTC时钟。可以看RTC时钟支持8个中断事件,通过0x7EFE63地址中的8位是否置位来区分。注意:中断事件处理完前一定要软件清除中断标志。
添加RTC时钟后,在属性表中勾上秒和秒/2这两个中断。
双击RTC时钟图标,打开RTC时钟源码,在中断方法handleInterrupt()中添加相关业务代码。这里是通过LED闪烁查看两个中断情况。
秒中断:P6=P6 ^ 0x0F;
秒/2中断:P6=P6 ^ 0xF0;
这样就开发完成了。编译项目并用官方下载软件将hex程序下载到开发板上运行。
stcproject.zip为项目,可直接导入进来。
截图202608110927343325.jpg
截图202608110927573167.jpg

stcproject.zip

34.5 KB, 下载次数: 8

回复

使用道具 举报 送花

已绑定手机

35

主题

99

回帖

1335

积分

金牌会员

积分
1335
 楼主| 发表于 2026-8-12 14:29:27 | 显示全部楼层
第七课:串口通讯UART1~UART4
串口通讯是一种非常经典且至今仍广泛使用的设备通信方式。它的核心思想是将数据拆分成一位一位(bit)的二进制信号,通过一根数据线按顺序进行传输。相较于一次能传多位数据的并行通信,串口虽然速度慢一些,但硬件简单、成本低,尤其适合长距离通信。
STC32G系列单片机具有2组USART-LIN/SPI,全双工同步/异步串行通信接口(USART1和USART2)支持LIN,SPI,可省电模式唤醒。每个串行口由2个数据缓冲器、一个移位寄存器、一个串行控制寄存器和一个波特率发生器等组成。每个串行口的数据缓冲器由2个互相独立的接收、发送缓冲器构成,可以同时发送和接收数据。
STC32G 系列单片机的串口1、串口2均有4种工作方式,其中两种方式的波特率是可变的,另两种是固定的,以供不同应用场合选用。用户可用软件设置不同的波特率和选择不同的工作方式。主机可通过查询或中断方式对接收/发送进行程序处理,使用十分灵活。 串口1、串口2的通讯口均可以通过功能管脚的切换功能切换到多组端口,从而可以将一个通讯口分时复用为多个通讯口。
今天这节课我们来讲如何在YXRA-SDK中开发串口通讯。
打开YXRA-SDK工具,新建STC32G项目,打开设备视图(创建或引入时会自动打开)。我们将串口1放到设备视图中,设置其波特率以及数据位数,并允许串口中断,其他串口如果有测试条件,与串口1的开发方式一致。为了能观察串口是否工作正常,我们在中断方法中将收到的数据直接发送出去。这样就开发完成了。
点击项目编译,系统弹出检测到配置冲突,因为我们设置串口1的波特率发生器为定时器2,但我们并没有将定时器2放到设备视图中。细心的开发者会发现,系统并不是因为没有定时器2而中止编译,因为通过可视化配置中没有定时器2,并不代表整个项目中没有初始化定时器2,所以允许开发者继续编译。
我们把定时器2加到设备视图中,并配置好,点击项目编译,如果配置不当,系统依然会弹出检测到配置冲突,按检测到的冲突处理一下。
本次示例是通过P3.0、P3.1通过USB转串口与电脑连接,相当于电脑与STC32G12K128已经在物理上串口连接好。接着把编译好的hex用官方工具下载到开发板上(官方实验箱单独的串口),就可以用串口助手进行通讯测试了。

截图202608121429537538.jpg
截图202608121431546100.jpg
截图202608121432229910.jpg
截图202608121434278415.jpg

stcproject.zip

33.95 KB, 下载次数: 4

回复

使用道具 举报 送花

已绑定手机

35

主题

99

回帖

1335

积分

金牌会员

积分
1335
 楼主| 发表于 2026-8-13 09:48:51 | 显示全部楼层
第八课:比较器COMPARATOR
STC32G系列单片机内部集成了一个比较器。比较器的正极可以是P3.7端口、P5.0端口、P5.1端口或者ADC的模拟输入通道,而负极可以P3.6端口或者是内部BandGap经过OP后的REFV电压(内部固定比较电压)。通过多路选择器和分时复用可实现多个比较器的应用。
    比较器内部有可程序控制的两级滤波:模拟滤波和数字滤波。模拟滤波可以过滤掉比较输入信号中的毛刺信号,数字滤波可以等待输入信号更加稳定后再进行比较。比较结果可直接通过读取内部寄存器位获得,也可将比较器结果正向或反向输出到外部端口。将比较结果输出到外部端口可用作外部事件的触发信号和反馈信号,可扩大比较的应用范围。
比较器的开发相对较简单,正端输入、负端输入以及结果输入引脚配置好,打开中断,在中断中写入比较结果的处理。注意比较端引脚的工作模式要求为高阻输入。
截图202608130948333307.jpg
截图202608130948482449.jpg

stcproject.zip

31.27 KB, 下载次数: 4

1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-9-22 11:32 , Processed in 0.074666 second(s), 82 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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