找回密码
 立即注册
查看: 273|回复: 1

STC32G单片机学习心得

[复制链接]
  • 打卡等级:偶尔看看II
  • 打卡总天数:20
  • 最近打卡:2025-07-23 08:46:53
已绑定手机

1

主题

0

回帖

83

积分

注册会员

积分
83
发表于 2025-7-1 18:47:12 | 显示全部楼层 |阅读模式
第一集  认识单片机
   认识一下STC32G12K128及试验箱
截图202507011844235262.jpg
主要内容:初步认识单片机,了解单片机的一些功能及应用;并解答了一些初学者的常见问题,给出一些学习建议
在本集视频中了解到单片机的定义及基本组成:单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能
学习建议:
1.一定要静得下心,沉得住气;
2.多跟着我动手,千万别一看就会,一写就废;
3.举一反三,发散思维,时常思考为什么;
4.多看看官网,多看看手册,有问题多交流:
5.逛逛论坛,吸收一些别人好的东西;

6.尝试着自己做一些项目.



第二集 硬件接受
来认识一下开发板的各功能模块
截图202507011853392940.jpg
通过冲哥的教学视频对硬件电路的讲解,我了解到STC32G的试验箱上面含有红外发射、红外接收、电压比较、数码管、LED灯、NTC测温、DS18B20、ADC按、pwm模拟DAC、24C02、矩阵按键、独立按键、LCD接口、USB、232接口、蜂鸣器灯硬件模块。
在该试验箱上,我们能够学到很多知识,比如最简单的点灯、pwm、adc等知识,话能够学习到通信协议的知识。我很期待接下来的教程所带给我的知识。
在教程中,了解到了平时我我在项目中所不曾使用的adc按键,adc按键是通过采集模拟电压的值,来判读具体是哪一个按键按下,在我们平时的项目中,更多的使用gpio口控制的按键,一个io控制一个按键,相对于芯片资源,个人感觉adc的按键更加节省资源。
看完了硬件电路的教程,我对试验箱的硬件电路有了进一步的了解.


第三集  开发环境搭建和程序下载

1.STC-ISP软件的下载    最新版本为:Alapp-ISP-V6.95W 版
         软件界面
截图202507011924386997.jpg

5.跟着手册搭建C251开发环境
   安装软件成功
截图202507011930323072.jpg

7.第一个工程的编译和下载
   第一次程序编译成功
   截图202507011958431533.jpg
期待着试验箱的到来,就可以下载程序试试效果了




第四集 建立工程电量第一个LED上集
  试验箱跑马灯LED原理图
截图202507020823385043.jpg
GPIO可以通过软件读取其输入电平或控制其输出高低电平。
将各部分按照顺序依次连接:GPIO-发光二极管-限流电阻-5v
这是通过控制GPIO输出高低电平即可控制LED亮灭
此种位共阳极开漏输出控制LED,还有一种是共阴极推挽输出控制LED(由于IO负载能力有限,建议使用第一种方式)
书写规范
一行一句,大括号缩进(需要设置),缩进四格,注释完整
注释符号    / 单行注释    /*   /*多行注释
学会搜索     CTRL+F
总结:

1.了解新工程的一个基本流程
2.了解1O口的高低电平的含义
3.务必牢记端口的几个寄存器 PxMO,PxM1,Px4.务必牢记:sbit 的 作用,牢记#nclude的作用
5.了解USB CDC不停电下载的用法USB HID不停电下载
在第四集点亮LED的基础上,通过加入一段程序,使得hex文件在下载进单片机时不需要冷启动,经过视频验证usb-cdc与usb-hid两种方式都可以在编译完以后直接下载进单片机,无需冷启动。


第5集  C语言运算符和进制数入门上

1.C语言 printf函数的实现
截图202507030927524629.jpg
2.数的进制:2进制、10进制、16进制
截图202507030928193714.jpg
3.C语言常用运算符

1.算术运算符:
加(+),减-) 乘(*)除(/)
模(余)运算符(%):不允许出现浮点型,余数正负取决于被除数正负自增(++i,-i;i++,i-)
2.位运算符。
右移(>>)
左移(<<)
按位与(&)
按位或(I)
按位异或(^)
取反(~)

4.数据的基本类型
截图202507030931137331.jpg


总结
1.学会printf的格式化输出'后面会反复用到)
2.了解进制数3.学会加减乘除等运算符4.了解数据类型和数值范围
课后练习:自己练习-下printf的用法。


第6集  LED闪烁和花式点灯
  花式点亮LED灯,在程序编写过程中,学会使用函数,并形成模块编程的思维,提高程序的可读性和可维护性,一个工程实现的方式多种多样,要不断思考,用不同的方式尝试。
函数的使用
在模块化编程里,函数使用分为如下三步:
1:函数定义
      返回值 函数名称(入口参数)
     {
           函数要执行的功能;
           return 返回值;(无返回值可不写)
      }
      @返回值:没有返回值就是 void
      @函数名称:避开关键词,不重复,非特殊字符随便取
      @入口参数:类型 + 名称,多个参数“,“分开,空就写 void
2.函数声明
      返回值函数名称(入口参数);
3.函数调用
      函数名称(入口参数):
1.基于Delay实现的LED闪烁
2.函数的使用
3.新建文件,使用模块化编程
void delay(unsigned int time)
{  
    while (time--);  
}  
通过执行while语句进行延时,但是这个延时是不准确的,所以还是进行配置,然后进行精准延时。代码如下:
void  delay_ms(u8 ms)
{
     u16 i;
     do{
          i = MAIN_Fosc / 6000;
          while(--i);
     }while(--ms);
}


第七集  按键点灯   
1.按键的原理
截图202507031855266123.jpg
按键去抖动
去抖动:
按键在物理接触时,可能会产生抖动(快速开关的现象),导致输入信号不稳定。
常用的去抖动方法有:
软件去抖动:在检测到按键按下后,延时一定时间后再读取状态,确保稳定。
硬件去抖动:使用 RC 电路(电阻和电容)来平滑信号。
  2.按键的代码实现过程
按键状态通常通过读取 GPIO 输入引脚来实现:
使用逻辑判断,检测引脚状态(如 P2.0)。
通常使用非运算符判断按键是否按下(按下为 0)。
3.LED 控制逻辑
使用按键状态控制 LED 的状态:
当按键被按下时设置相应的 GPIO 引脚为高电平(点亮 LED)。
松开按键时将 GPIO 引脚设置为低电平(熄灭 LED)。
  4. 实时操作和循环
使用 while(1) 循环来持续监测按键状态和控制 LED。
程序通常需要设计成实时响应,即在每次循环中持续检查按键状态。
  按键点亮LED程序

if( KEY1 == 0  )        
                {
                        delay_ms(10);
                        if( KEY1 == 0 )
                        {
                                
                                P60 = 0;        //LED0点亮
                        }
                }
                else               
                {
                        P60 = 1;        //LED0点亮
                }


void delay_ms(u16 ms)        //unsigned int
{
        u16 i;
        do
        {
                i = MAIN_Fosc/6000;
                while(--i);
        }while(--ms);
}

理论程序,后面试验箱再验证一下



第8集  蜂鸣器的应用
  1.认识蜂鸣器
截图202507031914524811.jpg

2.控制原理
截图202507031913561504.jpg
蜂鸣器和led一样,都是gpio的输出,但是在蜂鸣器这一节里,我认为更重要的是对硬件电路的理解。以下是我对蜂鸣器驱动电路的理解:
硬件电路中,因单片机输出电流有限,蜂鸣器通过三极管进行驱动.

第9集    数码管的静态使用
1.认识数码管
截图202507031928036305.jpg

数码管也叫LED数码管,内部是由多个发光二极管封装在一起组成,他们可以有很多种颜色,很多种外形,很多种样式,但是本质来说他们都是通过点亮内部的LED来显示的,只要面板做好了,理论可以显
示任意的字符或者图案






  • 显示原理:

    • 每个“段”是一个独立的发光单元(如LED)。
    • 通过给特定段通电点亮,形成字符。例如:

      • 数字 "1":点亮 b 和 c 段
      • 数字 "8":点亮全部7段(a-g)


    驱动方式:
    • 共阳极(Common Anode):所有LED的阳极相连,接高电平;阴极分别控制(低电平点亮)。
    • 共阴极(Common Cathode):所有LED的阴极相连,接低电平;阳极分别控制(高电平点亮)。








截图202507031935171317.jpg


第10集  数码管的动态显示
  数码管控制原理
截图202507031940283216.jpg

步骤分解:
1.位选(Digit select)
给第1位的共阴极端(COM1)通电(低电平),其他位断电(高电平)2.段选(Segment select)
输出第1位要显示字符的段码(如数字”1”→ b、c段亮)
3.延时保持:
维持1~5ms(刷新率关键!)。
4.关闭当前位:
将COM1设为高电平(断电)。
5.切换下一位:
对第2位重复步骤1-4,直至所有位轮询完成。
3.刷新率要求
临界频率:>60Hz(每帧≤16ms)
计算示例(4位数码管)每位数码管点亮时间=4ms
总周期=4位x4ms=16ms→刷新率=62.5Hz(无闪烁)



第11集  定时器的使用
定时器是定时器和计数器的统称。
1.设置为定时器时,可实现硬件计时,或者使程序每隔一固定时间完成一项操作
2.设置为计数器时候能够对脉冲进行计数
3.替代长时间的delay,提高CPU的运行效率和处理速度,能及时的响应某个事件
STC32G 系列单片机内部设置了5个 24 位定时器/计数器(8 位预分频+16 位计数)。
5 个 16 位定时器 TO、T1、T2、T3 和 T4 都具有计数方式和定时方式两种工作方式。对定时器/计数器 T0 和 T1,用它们在特殊功能寄存器 TMOD 中相对应的控制位 CT 来选择 TO 或 T1为定时器还是计数器。对定时器/计数器 T2,用特殊功能寄存器 AUXR 中的控制位 T2 C/T 来选择 T2 为定时器还是计数器。对定时器/计数器 T3,用特殊功能寄存器 T4T3M 中的控制位 T3 C/T来选择 T3 为定时器还是计数器。对定时器/计数器T4,用特殊功能寄存器 T4T3M 中的控制位 T4 C/T 来选择 T4 为定时器还是计数器。定时器/计数器的核心部件是一个加法计数器,其本质是对脉冲进行计数。只是计数脉冲来源不同:如果计数脉冲来自系统时钟,则为定时方式,此时定时器/计数器每 12个时钟或者每1个时钟得到一个计数脉冲,计数值加 1如果计数脉冲来自单片机外部引脚,则为计数方式,每来一个脉冲加1。
截图202507031955067596.jpg
   通过STC-ISP软件产生定时器代码
截图202507031957502083.jpg
截图202507032001216623.jpg



第12集 计数器的使用

1.计数器的用途
截图202507032003564944.jpg
2.计数器的配置
截图202507032007035130.jpg
3,计数器的应用

截图202507032008063027.jpg
学习这一章感觉还是有点懵,还得多复习几遍才行


第13集  简易的多任务处理
   应用模块化编程
创建程序文件三步
    新建文件并保存
    添加到工程
    添加引用路径

引脚定义都在.h文件
     sbit 名称=P10;
     #define 名称 P10


函数定义三步:
       定义
       声明
       调用

修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”

第14章 矩阵键盘

1.矩阵按键是什么
截图202507032035174756.jpg
可以通过8个I/O口组合成16个按键,有效减少端口的占用
2.矩阵按键的控制原理
截图202507032035357777.jpg
矩阵按键扫描是一种通过行列分时复用技术实现多按键检测的核心方法,其本质是以时间换空间(引脚资源)
行线(Rows):连接MCU输出引脚(推挽输出)
列线(Columns):连接MCU输入引脚(带上拉电阻)
按键位置:行列交叉点(如K11位于行1列1)



第15集   外部中断
   1.中断和中断系统

中断系统
  中断系统是为使 CPU 具有对外界紧急事件的实时处理能力而设置的。
  当中央处理机 CPU 正在处理某件事的时候外界发生了紧急事件请求,要求 CPU 暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。实现这种功能的部件称为中断系统,请示 CPU 中断的请求源称为中断源。微型机的中断系统一般允许多个中断源,当几个中断源同时向 CPU 请求中断,要求为它服务的时候,这就存在 CPU 优先响应哪一个中断源请求的问题。通常根据中断源的轻重缓急排队,优先处理最紧急事件的中断请求源,即规定每一个中断源有一个优先级别。CPU 总是先响应优先级别最高的中断请求。
    当 CPU正在处理一个中断源请求的时候(执行相应的中断服务程序),发生了另外一个优先级比它还高的中断源请求。如果 CPU 能够暂停对原来中断源的服务程序,转而去处理优先级更高的中断请求源,处理完以后,再回到原低级中断服务程序,这样的过程称为中断嵌套。这样的中断系统称为多级中断系统,没有中断嵌套功能的中断系统称为单级中断系统。
     用户可以用关总中断允许位(EA/E.7)或相应中断的允许位屏蔽相应的中断请求,也可以用打开相应的中断允许位来使 CPU 响应相应的中断申请,每一个中断源可以用软件独立地控制为开中断或关中断状态,部分中断的优先级别均可用软件设置。高优先级的中断请求可以打断低优先级

截图202507040848429588.jpg
截图202507040854287448.jpg
截图202507040855019374.jpg
截图202507040855271345.jpg

2.什么是外部中断
  外部中断就是在单片机的一个引脚上,由于外部因素导致了一个电平的变化(比如由高变低),而通过捕获这个变化,单片机内部自主运行的程序就会被暂时打断,转而去执行相应的中断处理程序,执行完后又回到原来中断的地方继续执行原来的程序。
中断的用法:

#include "exit.h"

void INT0_Init(void)                                //外部中断0的初始化
{
        IT0 = 1;                                                //1:下降沿中断   0:上升下降沿中断
        EX0 = 1;                                                //允许中断
        IE0 = 0;                                                //清除中断标志位
}


void INT0_Isr(void) interrupt 0
{
       
}


#include "tim0.h"

void Timer0_Init(void)                //1毫秒@24.000MHz
{
        AUXR &= 0x7F;                        //定时器时钟12T模式
        TMOD &= 0xF0;                        //设置定时器模式
        TL0 = 0x30;                                //设置定时初始值
        TH0 = 0xF8;                                //设置定时初始值
        TF0 = 0;                                //清除TF0标志
        TR0 = 1;                                //定时器0开始计时
        ET0 = 1;                                //使能定时器0中断
}


void Timer0_Isr(void) interrupt 1
{
       
}
















回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:145
  • 最近打卡:2025-08-01 10:06:57

762

主题

1万

回帖

1万

积分

管理员

积分
18316
发表于 2025-7-1 19:50:29 | 显示全部楼层
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-8-1 19:50 , Processed in 0.117649 second(s), 54 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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