找回密码
 立即注册
查看: 4699|回复: 35

跟冲哥学习STC32G128K芯片打卡

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:210
  • 最近打卡:2025-05-05 17:50:21

1

主题

63

回帖

369

积分

中级会员

积分
369
发表于 2024-4-25 15:14:37 | 显示全部楼层 |阅读模式
2024年4月25日学习STC32G128K芯片记录

第一课  什么是单片机  个人理解一个完善的微机系统,包括CPU  运存  存储  多余的IO口为控制外设用。

截图202404251503223194.jpg


一般单片机外貌

截图202404251500417379.jpg


问一下AI 关于51单片机的特点,给的回答是
51单片机是一类基于Intel 8051微处理器内核设计的单片机,以其为基础发展出了众多兼容产品,形成了广泛的51单片机家族。这类单片机具有以下显著特点:
  • 兼容性:
    • 指令系统兼容:所有51系列单片机遵循相同的指令集架构(ISA),即与Intel 8051微处理器指令集兼容。这意味着为一个51单片机编写的程序可以无需或仅需少量修改就能在其他兼容的51单片机上运行,极大地增强了代码的移植性。
  • 结构简单且易于学习:
    • 冯·诺依曼结构:51单片机采用冯·诺依曼体系结构,程序存储器和数据存储器共享同一地址空间,CPU通过同一总线访问。这种结构简单明了,对于初学者而言易于理解。
  • 丰富的外设资源:
    • I/O端口:通常提供多个双向输入/输出(I/O)端口,可以直接控制外部设备或读取传感器信号。
    • 定时/计数器:内置多个定时器/计数器,可用于实现延时、频率测量、脉冲计数、PWM生成等多种功能。(???需进一步了解,后续学习再了解)
    • 串行通信接口:具有全双工的串行通信单元(如UART),支持异步通信(如RS-232)和同步通信(如SPI、I²C),便于与其他设备进行数据交换。
    • 中断系统:配备完善的中断结构,支持多个中断源(如外部中断、定时器中断、串口中断等),并具有多级优先级,有利于实时响应外部事件。
  • 扩展性:
    • 并行总线扩展:通过并行总线可以连接外部存储器、扩展I/O口或其他外围设备,以满足更复杂应用的需求。
    • 串行总线扩展:支持如I²C、SPI等串行总线协议,便于连接低引脚数的外围设备。
  • 广泛的应用领域:
    • 教育:由于其结构简单、资源适中且教程资料丰富,51单片机常被用作高校电子工程、自动化等相关专业的单片机入门教学平台。
    • 工业控制:广泛应用于各类工业自动化设备,如电机控制、生产线监控、数据采集系统等。
    • 消费电子:在家电、玩具、智能仪器仪表等消费电子产品中充当控制核心。
    • 汽车电子:用于汽车配件如报警系统、胎压监测、车载娱乐设备等。
    • 通信设备:在简单通信设备、远程监控系统中实现数据处理和传输。
  • 低成本与低功耗:
    • 芯片尺寸小、价格低廉:得益于大规模集成电路技术的发展,51单片机芯片尺寸小、制造成本低,适用于大批量、低成本的嵌入式应用。
    • 低功耗型号:部分51单片机提供低功耗模式,适用于电池供电或对能耗敏感的场合。
  • 开发工具链成熟:
    • 广泛的开发工具支持:有多种集成开发环境(IDE)、编译器(如Keil C51、SDCC等)、调试器和仿真器可供选择,为开发人员提供了便捷的开发环境。

综上所述,51单片机以其良好的兼容性、结构简单、丰富的外设、易于学习和扩展、广泛的应用领域、低成本低功耗以及成熟的开发工具链等特点,成为了嵌入式系统设计中的重要选择,尤其在教育和入门级项目中具有较高的普及度。随着技术的发展,尽管市场上出现了更多高性能的单片机产品,但51单片机因其独特的市场定位和用户群体,仍保持着一定的市场份额和活跃度。
随后第一课很笼统,但可以扩展学习了解到,其原理还是很复杂的,先学技术再说。

回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:210
  • 最近打卡:2025-05-05 17:50:21

1

主题

63

回帖

369

积分

中级会员

积分
369
发表于 2024-4-25 15:40:53 | 显示全部楼层
第二课  外设
1. 数码管:每个管为1个灯,共8个灯
2. NTC测温:连续测温,模拟测温
3. 18B20: 不可连续测温,单个点,数字测温
4. ADC按键:采集模拟电压,判断数值,根据基准电压,0-4095  线性变化    A是模拟 D是数字
5. PWM模拟DAC
6. 24C02 存储芯片
7. LCD接口屏幕
8. 蜂鸣是喇叭
学习的STC32G128K工作电压1.9-5.5V
课后作业思考:MP3应该是个不错的实践项目
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:210
  • 最近打卡:2025-05-05 17:50:21

1

主题

63

回帖

369

积分

中级会员

积分
369
发表于 2024-4-25 16:15:16 | 显示全部楼层
第三课  环境搭建

所需软件
1. STC-ISP
截图202404251547234345.jpg

2. STC32手册
可找到示例程序,即IO控制方法,通过搜索,快速定位自己想要的位置。得多熟悉熟悉其原理
3. C251开发环境
安装Keil就可以。
4. 下载程序   先按住INT0 P3.2 打开开关上电  可以识别为HID1模式,选择24M时钟,点击下载就可以直接下载
可自动识别单片机是否正确
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:210
  • 最近打卡:2025-05-05 17:50:21

1

主题

63

回帖

369

积分

中级会员

积分
369
发表于 2024-4-25 17:39:24 | 显示全部楼层
本帖最后由 Rain_Personal 于 2024-5-15 20:18 编辑

第四课 新建工程并点亮LED灯

上节课未吃透所遇问题
打开工程后出现报错
截图202404251654573741.jpg

重新调整后发现,需要在STCAi-ISP软件中添加Keil的型号和头文件  具体流程为 Keil仿真设置---->添加型号和头文件到Keil中.... 看下图
截图202404251657005221.jpg

1. LED点亮原理
LED灯两端的高低点评会点亮灯,板载资源中首先要通过P40输出低电平打开总开关,再通过P60输出低电平就可以点亮LED灯。
2. 代码编写
sfr  特殊功能寄存器  0x80~0xFF   sbit????  
P4M0      P4M1
0                0    准双向口
0                1    推挽输出
.......
定义寄存器

sfr         P4          =           0xc0;
sbit        P40         =           P4^0;

设置输出模式 准双向口
P4M1 = 0x00;   P4M0 = 0x00;

操作端口高低点评,点亮LED灯
打开总开关
P40 = 0;
亮LED灯
P60 = 0;
3. 程序下载的USB模式
首先需要安装驱动
截图202405082100157117.jpg

跟随弹窗提示一步一步走下去就可以


向IAP_CONTR寄存器发送0x60  可实现不停电进行ISP下载

USB-HID
需要包含关于usb的lib文件
截图202404251731233143.jpg

相关代码

char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";                      //设置自动复位到ISP区的用户接口命令

void sys_init()
{
    WTST = 0;  //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
    EAXFR = 1; //扩展寄存器(XFR)访问使能
    CKCON = 0; //提高访问XRAM速度

    //====== USB 初始化 ======
    P3M0 &= ~0x03;
    P3M1 |= 0x03;
   
    IRC48MCR = 0x80;
    while (!(IRC48MCR & 0x01));
   
    USBCLK = 0x00;   // USB-CDC相关 HID需要禁用
    USBCON = 0x90;  // USB-CDC相关  HID需要禁用
    //========================
}

最后主函数中调用

    sys_init();  //系统初始化
    usb_init();  //USB CDC 接口配置
    EA = 1;     // 打开总中断

开启USB的下载功能
此外可以通过Include 加载头文件,就不需要使用sfr定义了。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:210
  • 最近打卡:2025-05-05 17:50:21

1

主题

63

回帖

369

积分

中级会员

积分
369
发表于 2024-4-25 18:25:31 | 显示全部楼层
本帖最后由 Rain_Personal 于 2024-5-15 20:21 编辑

第四课  C语言入门   已经掌握相关编程语言  再次复习一下

1. printf的格式化输出,串口通讯,万能的 print debug。
示例代码
printf("当前温度:%0.2f\r\n", 25)
其中的%后可跟数字有以下几个关键字符
示例中f表示单精度浮点输出
截图202404251811487370.jpg

x.y 表示整数有x位,小数有y位有效数字,其他可用描述为
截图202404251815062409.jpg


此外\r \n 为转义字符表示换行和回车。冲哥更加详细的描述了其不同系统中的应用

Windows系统中我们输入回车时,输入的字符是\r\n
unix系统中回车为\n,
mac系统中回车的字符为\r.

2. 此外根据ASCⅡ可以说明串口中16进制与字符之间的关系
截图202404251819434556.jpg

3. 使用程序员计算器可以不费脑子的计算各个进制之间的对应关系
截图202404251820506391.jpg


4. 单片机编程中可以使用常规算数运算符 + - * /  取余%  此外支持C中的++ 和 -- 自增自减运算符
以往C语言中对于位运算使用较少
在单片机中使用位运算应该效率更高

右移(>>)左移(<<)
按位与(&)
按位或(|)
按位异或(^)
取反(~)

5. 数据类型
   截图202404251824158783.jpg
与传统C不同的是出现了sfr关键字 特殊寄存器、



截图202405152020293708.jpg

要使用串口通讯需要选择CDC功能
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:210
  • 最近打卡:2025-05-05 17:50:21

1

主题

63

回帖

369

积分

中级会员

积分
369
发表于 2024-4-25 21:44:11 | 显示全部楼层
本帖最后由 Rain_Personal 于 2024-4-25 21:56 编辑

第六课  LED闪烁及花式点灯

1. 灯闪烁的原理是,通过延时函数,不断的开关LED灯,进而达到闪烁效果
截图202404252127331755.jpg

2. 相关延时函数的代码为
#define MAIN_Fosc        24000000UL  // 系统的晶振频率


void  delay_ms(u16 ms)     // 延时多少ms
{
     u16 i;
     do{
          i = MAIN_Fosc / 6000;    //  6000是怎么确定的?都适用么?
          while(--i);
     }while(--ms);
}
#define X Y  关键字可以将Y映射到X 即X就是Y;示例中MAIN_Fosc  就是24000000UL。

不断的开关就需要循环结构,冲哥讲的是do{}  while();和while{}
此外延伸出 自减符--的应用。

3. 模块化编程 C语言的语法

具体定义方法为:
////////////////////////////////

返回值 函数名称( 入口参数 )
{
函数要执行的功能
}
///////////////////////////////
其中
@返回值:没有返回值就是void
@函数名称:避开关键词,不重复,非特殊字符随便取
@入口参数:类型+名称,多个参数“,”分开,空就写void

函数的声明方法
///////////////////////////////

返回值 函数名称( 入口参数 );

///////////////////////////////


函数调用

///////////////////////////////

有返回值的
值 =  函数名称( 入口参数 );

无返回值
函数名称( 入口参数 );

///////////////////////////////


C语言中一般将模块写为h和c文件,
其中h为头文件,主要是函数的声明
其格式为

#ifndef __XXX_H
#define __XXX_H
调用头文件
函数声明...
#endif


c为模块主体,是各个函数的实现方法
其格式为

#include “xxx.h”
函数定义


使用模块时,只要引入头文件就可以使用相关模块
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:429
  • 最近打卡:2025-05-08 00:01:49
已绑定手机

19

主题

3196

回帖

4956

积分

论坛元老

积分
4956
发表于 2024-4-25 22:47:44 | 显示全部楼层
Rain_Pe*** 发表于 2024-4-25 21:44
第六课  LED闪烁及花式点灯

1. 灯闪烁的原理是,通过延时函数,不断的开关LED灯,进而达到闪烁效果

6000时根据单片机来确定的stc8不一样
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:210
  • 最近打卡:2025-05-05 17:50:21

1

主题

63

回帖

369

积分

中级会员

积分
369
发表于 2024-4-26 08:14:58 | 显示全部楼层
so*** 发表于 2024-4-25 22:47
6000时根据单片机来确定的stc8不一样

感谢答疑解惑,是不是跟指令集什么的有关呢?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:210
  • 最近打卡:2025-05-05 17:50:21

1

主题

63

回帖

369

积分

中级会员

积分
369
发表于 2024-4-26 18:14:22 | 显示全部楼层
第七课 按键点灯

1. 按键原理
按键存在常开开关和常闭开关。
截图202404261758577106.jpg
例如SW17按键按下后,会把R10电阻的右侧电压拉低到GND,此时R82两端电压应该位VCC。
此外按键按下后会出现抖动情况。
截图202404261800359659.jpg

出现抖动的原因为机械触电的弹性抖动,一个开关会在短时内出现电压不稳导致的,类似于接触不良,出现电阻变化。

2. 按键代码的实现过程

首先需要通过宏定义 定义KEY
#define KEY P32 //P32应该属于寄存器,相当于KEY就是寄存器的
  1. if( KEY == 0 )       // 第一次判断
  2. {
  3.     Delay_ms(10);  //  可能会有抖动  跳过抖动部分 10ms是随意数值?可否增加或者减少
  4.     if( KEY == 0 )  //   再次判断
  5.     {
  6.     执行功能
  7.     }
  8. }
复制代码
3. 16位二进制,可以通过移位方法将某个端口变为0,点亮LED灯,通过按键将P6移位可以实现按键流水灯。

4. 数组的使用
将移位的数值直接存储值数组,通过索引为P6赋值,PS比较占用内存,不如移位好
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:210
  • 最近打卡:2025-05-05 17:50:21

1

主题

63

回帖

369

积分

中级会员

积分
369
发表于 2024-4-26 18:34:12 | 显示全部楼层
本帖最后由 Rain_Personal 于 2024-4-26 20:06 编辑

第八课  蜂鸣器的应用

1. 蜂鸣器分类
有源蜂鸣器  自带震荡源,通电就会叫,比无源蜂鸣器会贵点
无源蜂鸣器  无震荡源,通直流信号,不会叫
2. 控制原理  
截图202404261819081271.jpg

P54引脚
P54=!P54
3. 蜂鸣器的应用
通过全局变量区分开关模式还是运行模式
灯是低电平点亮,可通过取反~采用将1移位,修改亮灯状态
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-8 02:16 , Processed in 0.142195 second(s), 107 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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