16213319 发表于 2024-6-19 14:03:50

【实验箱已发出】学习stc32g12k128的一些学习笔记和学习心得

本帖最后由 浅夏星空 于 2024-6-25 09:16 编辑

在学校学习了51单片机后觉得没有学习透彻,所以来到stc32来上课学习

molo 发表于 2024-6-19 16:11:52

共同学习,一起进步!

16213319 发表于 2024-6-23 16:01:44

学习笔记与心得:
记:2024/1/13 第一课学习笔记
    在今天的课程中,深入探讨了单片机的基础知识,特别是聚焦于STC32位8051单片机。单片机,顾名思义,就是将中央处理器(CPU)、存储器、输入输出接口等主要功能部件集成在一块芯片上的微型计算机系统。这种集成化的设计不仅极大地缩小了系统的体积,还提高了其稳定性和可靠性,使其成为现代电子设备不可或缺的核心组件。

    STC32位8051单片机作为一款高性能的微控制器,它继承了传统8051单片机的优点,同时在处理速度、内存容量和功耗管理上进行了显著的提升。其32位的架构意味着更强大的数据处理能力,能够支持更复杂的算法和实时控制任务。此外,STC系列单片机还具有丰富的外设资源,如定时器、串行通信接口、ADC/DAC转换器等,这些都为设计者提供了极大的灵活性和便利性。

    在学习过程中,我深刻体会到了单片机技术的重要性。它不仅是连接物理世界与数字世界的桥梁,更是推动物联网、自动化、智能设备等领域发展的关键驱动力。通过使用C语言进行编程,我们可以直接控制单片机的硬件资源,实现对设备的精确操控。这不仅要求我们具备扎实的理论基础,还需要不断实践,以提升自己的编程技巧和问题解决能力。

    总之,这次课程让我对单片机有了更全面的认识,激发了我对这一领域的浓厚兴趣。我期待在未来的学习中,能够更加深入地掌握单片机的原理及其应用,为将来投身于电子工程领域打下坚实的基础。

16213319 发表于 2024-6-23 16:04:07

本帖最后由 16213319 于 2024-6-24 11:43 编辑

学习笔记与心得:
记:2024/1/20 第二课学习笔记
深入展开的课程笔记:

今日的课程重点在于深入了解STC32位8051单片机的硬件架构,这是一个集成了各种功能模块的高度集成化微控制器,其核心部分主要包括CPU、内存以及I/O端口等关键组件。

### CPU(中央处理器)

CPU是单片机的大脑,负责执行指令和控制整个系统的运行。STC32位8051单片机采用的是32位RISC(精简指令集计算机)架构,这意味着它拥有更快的数据处理速度和更高的执行效率。与传统的8位或16位单片机相比,32位的架构可以处理更大范围的数值,支持更复杂的运算,从而满足了现代电子设备对高性能计算的需求。此外,STC单片机的CPU还内置了高速缓存,进一步提升了指令的执行速度,减少了等待时间。

### 内存

内存是单片机存储数据和程序的关键部件,分为RAM(随机存取存储器)和ROM(只读存储器)。在STC32位8051单片机中,RAM主要用于存储正在运行的程序和临时数据,而ROM则用于永久保存程序代码和一些固定的数据。值得注意的是,STC系列单片机通常配备了大容量的Flash ROM,这是一种非易失性存储器,即使在断电的情况下也能保持数据不丢失,这对于需要长时间运行或在恶劣环境下工作的设备尤为重要。

### I/O端口

I/O端口是单片机与外部世界交互的窗口,通过它们,单片机可以接收外部信号并对外部设备进行控制。STC32位8051单片机配备了丰富的I/O资源,包括通用数字输入/输出端口、模拟输入端口(用于连接ADC)、串行通信端口(如UART、SPI、I2C)等。这些端口的配置灵活,可以根据具体的应用需求进行设置,使得单片机能够适应多种不同的应用场景,从简单的数据采集到复杂的网络通信都能胜任。

### 其他重要组件




除了上述核心组件,STC32位8051单片机还集成了多种辅助功能模块,如定时器/计数器、看门狗定时器、电源管理单元等。这些模块共同协作,确保了单片机的稳定运行和高效能表现。

通过今天的课程,我深刻理解了STC32位8051单片机硬件架构的复杂性和精妙之处。每一个组成部分都是精心设计的,旨在提供最佳的性能和最广泛的适用性。未来的学习中,我将更加专注于如何利用这些硬件资源来设计和实现具体的电子项目,相信这将是一段充满挑战与乐趣的旅程。

16213319 发表于 2024-6-23 16:08:05

本帖最后由 16213319 于 2024-6-24 11:43 编辑

记:2024/2/1 第三课学习笔记
在今天的课程中,我们探索了STC32位8051单片机开发环境的搭建过程,以及如何将编写的程序烧录到单片机中。这是从理论到实践的重要一步,也是任何电子工程师或嵌入式开发者必须掌握的关键技能。

开发环境的搭建
1. 选择开发工具
开发环境的搭建始于选择合适的开发工具,对于STC32位8051单片机,我们主要考虑了以下几种工具:

IDE(集成开发环境):如Keil uVision、IAR Embedded Workbench或者STM32CubeIDE。这些IDE提供了编译器、调试器以及一系列辅助工具,简化了开发流程。
编译器:用于将C语言源代码转化为机器码,其中GCC是广泛使用的开源编译器之一。
2. 安装与配置
安装IDE:首先,我们下载并安装了Keil uVision,这是一款广泛应用于8051系列单片机开发的IDE。
配置环境:安装完成后,我们配置了项目路径、头文件路径以及库文件路径,确保IDE能够正确识别我们的代码和依赖库。
3. 创建新项目
在IDE中创建一个新的项目,选择STC32位8051单片机的型号,这一步非常重要,因为不同的单片机有不同的寄存器映射和指令集。
程序烧录到单片机
1. 编译代码
在IDE中编写完C语言程序后,我们进行了编译,将源代码转化为目标代码。这个过程由编译器完成,确保代码没有语法错误,并生成可执行的二进制文件。

2. 连接硬件
为了将程序烧录到单片机中,我们需要将单片机开发板通过编程器或烧录器连接到计算机。常见的编程器有J-Link、ST-Link等,它们通过JTAG或SWD接口与单片机通信。

3. 设置烧录参数
在IDE中,我们配置了与单片机相匹配的烧录参数,例如波特率、电压等级、校验和选项等。这些参数必须准确无误,否则可能导致烧录失败。

4. 烧录程序
最后,我们在IDE中选择了“烧录”或“下载”选项,开始将程序传输到单片机的Flash存储器中。这个过程可能需要几秒钟到几分钟,取决于程序的大小和编程器的速度。

5. 验证烧录结果
烧录完成后,我们通过单片机开发板上的LED灯、串口输出或其他外设,验证了程序是否正确运行。这是确保程序成功烧录到单片机中的重要步骤。

通过今天的课程,我深刻理解了开发环境搭建和程序烧录的全过程。这不仅增强了我对嵌入式系统开发的信心,也为我将来独立完成项目奠定了坚实的基础。我期待着在未来的实践中,运用今天学到的知识,将更多创意转化为现实。

16213319 发表于 2024-6-23 16:14:39

记:2024/2/1 第四课学习笔记
深入学习笔记:
LED电量原理(如图)
在这一课中,我们不仅掌握了如何编写简单的C语言程序来控制LED灯的亮灭,还深入了解了程序设计的基本原理和单片机的硬件交互机制。这是一个从软件到硬件、从理论到实践的跨越,让我们对嵌入式系统的运作有了更直观的认识。

### C语言程序设计

#### 1. 引入必要的头文件

在编写程序之前,我们首先引入了必要的头文件,如`reg52.h`或`stc.h`,这些头文件包含了单片机特殊功能寄存器的定义,使我们能够直接操作单片机的硬件资源。

#### 2. 定义引脚

接下来,我们定义了LED灯所连接的GPIO(General Purpose Input/Output,通用输入/输出)引脚。例如,在C语言中,可以使用宏定义或枚举类型来指定引脚号,如`#define LED P1_0`,这里的`P1_0`代表了单片机P1端口的第0个引脚。

#### 3. 主函数与循环结构

在主函数`main()`中,我们使用了无限循环结构`while(1)`,确保程序能够持续运行。在循环体内部,我们编写了控制LED灯状态的代码,如`P1_0 = 0;`表示点亮LED,而`P1_0 = 1;`则表示熄灭LED。

#### 4. 延时函数

为了让LED的闪烁效果更加明显,我们还编写了延时函数。由于单片机的处理速度非常快,如果不添加延时,LED的亮灭转换将太快而无法肉眼察觉。延时函数通常通过循环计数实现,例如:

```c
void delay(unsigned int t)
{
    unsigned int i;
    for(i=0; i<t; i++)
    {
      // 空循环体,仅用于消耗时间
    }
}
```

在主循环中,我们可以调用这个函数来控制LED的亮灭周期,如`delay(10000);`表示延时大约1秒。

### 单片机硬件交互

#### 1. GPIO配置

在程序中,我们还需要对GPIO进行配置,将其设置为输出模式。这通常在程序的初始化部分完成,通过写入相应的寄存器来实现,例如设置P1_0为输出:

```c
P1DIR |= 0x01; // 对于某些单片机,可能需要这样配置
```

#### 2. 电源与接地

在硬件层面,LED灯通常需要正向电压才能发光,因此它的一端连接到VCC(电源),另一端通过一个限流电阻后连接到GPIO引脚。当GPIO输出低电平时,LED导通发光;反之,输出高电平时,LED截止熄灭。

#### 3. 硬件调试

编写完程序后,我们通过单片机开发板上的LED灯进行调试,观察其亮灭情况是否符合预期。如果LED灯不工作,可能的原因包括程序错误、硬件连接不当或单片机未正常供电等,需要逐一排查解决。(因为没有开发板所以只能理论练兵了,希望早日拿到大学计划开发板)

通过这一课的学习,我们不仅学会了如何用C语言控制LED灯,更重要的是,我们理解了程序设计与硬件交互的基本原理,为后续更复杂的嵌入式系统开发打下了坚实的基础。随着实践的深入,我们将会遇到更多挑战,但也会收获更多的知识与乐趣。
```

16213319 发表于 2024-6-23 16:27:47

记:2024/2/15第五课学习笔记
深入学习笔记:

在本课中,我们深入探讨了C语言中的基本运算符,以及不同进制数之间的转换方法,这是编程和计算机科学中不可或缺的基础知识。

### C语言运算符

#### 1. 算术运算符

算术运算符是最常用的运算符之一,包括加(`+`)、减(`-`)、乘(`*`)、除(`/`)和取模(`%`)。例如,`a + b`表示`a`与`b`的和,`a % b`表示`a`除以`b`后的余数。值得注意的是,整数除法会舍去小数部分,得到整数结果。

#### 2. 比较运算符

比较运算符用于比较两个值的大小关系,包括等于(`==`)、不等于(`!=`)、小于(`<`)、大于(`>`)、小于等于(`<=`)和大于等于(`>=`)。这些运算符返回的结果是一个布尔值,即真(`true`)或假(`false`)。

#### 3. 逻辑运算符

逻辑运算符用于组合条件表达式,包括逻辑与(`&&`)、逻辑或(`||`)和逻辑非(`!`)。例如,`a && b`只有在`a`和`b`都为真的情况下才返回真,而`!a`则返回`a`的相反值。

#### 4. 位运算符

位运算符直接对二进制位进行操作,包括按位与(`&`)、按位或(`|`)、按位异或(`^`)、左移(`<<`)和右移(`>>`)。例如,`a & b`表示`a`和`b`的二进制位按位与操作。

### 进制数之间的转换

在计算机科学中,我们经常需要处理二进制、八进制、十进制和十六进制等不同进制的数字。

#### 1. 十进制转其他进制

将十进制数转换为二进制、八进制或十六进制,可以通过不断除以该进制的基数并记录余数的方法实现。例如,将十进制数`10`转换为二进制,可以连续除以`2`并记录余数,最终得到二进制数`1010`。

#### 2. 其他进制转十进制

将二进制、八进制或十六进制数转换为十进制,可以通过将每个位的数值乘以相应权重再求和的方式完成。例如,二进制数`1010`转换为十进制为`1*2^3 + 0*2^2 + 1*2^1 + 0*2^0 = 10`。

#### 3. 直接转换

在C语言中,可以直接使用前缀来表示不同进制的数。例如,`0x1A`表示十六进制数`26`,`024`表示八进制数`20`。这种表示方式在编写代码时非常方便,特别是在处理二进制数据或与硬件交互时。

### 实践应用

掌握这些运算符和进制转换的知识,对于理解和编写高效的C语言程序至关重要。例如,在嵌入式系统开发中,位运算符常用于控制特定的硬件寄存器位,而进制转换则在处理网络协议、加密解密算法或解析硬件状态时极为有用。

通过本课的学习,我们不仅掌握了C语言的基本运算符,还学会了如何在不同进制之间灵活转换,为后续更深入的编程学习和项目开发奠定了坚实的数学和逻辑基础。随着经验的积累,我们将能够更加熟练地运用这些知识,解决实际问题,创造有价值的软件产品。

16213319 发表于 2024-6-23 16:32:13

本帖最后由 16213319 于 2024-6-24 11:44 编辑

记:2024/2/21第六课学习笔记
深入学习笔记:
深入学习笔记:

在这一课中,我们深入探索了如何使用C语言控制LED灯实现闪烁效果,以及如何设计和实现更复杂的LED显示模式,这是嵌入式系统编程中的一项基本且重要的技能。

### LED闪烁的实现

#### 1. 基本闪烁程序

LED闪烁的基本原理是在程序中交替改变LED的状态(亮和灭),并通过延时函数控制状态切换的时间间隔。在C语言中,这通常通过在一个无限循环中反复执行以下代码片段来实现:

```c
while(1) {
    P1_0 = 0; // LED亮
    delay(500); // 延时500毫秒
    P1_0 = 1; // LED灭
    delay(500); // 延时500毫秒
}
```

这里,`P1_0`是我们定义的LED引脚,`delay()`是一个自定义的延时函数,用于控制LED的亮灭周期。

#### 2. 调整闪烁频率

通过修改`delay()`函数中的参数,我们可以轻松调整LED的闪烁频率。例如,将延时时间减少至`100`毫秒,LED的闪烁将更加频繁。这种灵活性使得我们能够根据具体应用需求定制LED的行为。

### 复杂LED显示模式

#### 1. 点阵LED控制

对于多LED组成的点阵,我们可以使用类似的方法,但需要更复杂的控制逻辑。例如,要实现一个由8个LED组成的流水灯效果,可以在循环中依次点亮每个LED,然后逐渐移动点亮的位置:

```c
while(1) {
    for(int i = 0; i < 8; i++) {
      P1 = (1 << i); // 依次点亮每个LED
      delay(100);
    }
}
```

#### 2. 动态显示模式

更进一步,我们可以通过组合多个LED的状态来实现动态的显示效果,如图案滚动、闪烁序列等。这通常涉及到对LED矩阵的逐行扫描和数据刷新,需要编写更复杂的控制算法。

### 软件与硬件的协同

在设计复杂的LED显示模式时,不仅要考虑软件逻辑的编写,还要考虑到硬件的限制和特性。例如,LED的驱动电流、电路的布局以及单片机GPIO的驱动能力等因素都会影响最终的显示效果和程序的稳定性。

### 结合实际应用

掌握了LED控制的基本技能后,我们可以将这些技术应用到各种实际项目中,如智能家居的指示灯控制、电子广告牌的设计、甚至是艺术装置的创作。通过不断地实践和创新,我们可以创造出既美观又实用的LED显示方案,丰富人们的日常生活。

通过本课的学习,我们不仅学会了如何控制单个或多个LED灯实现闪烁和复杂显示效果,更重要的是,我们理解了软件编程与硬件控制之间的紧密联系,为今后在嵌入式系统开发领域的深入探索打下了坚实的基础。随着技术的不断进步,LED控制技术也将变得更加多样化和智能化,为我们的生活带来更多的惊喜和便利。

16213319 发表于 2024-6-23 16:39:04

本帖最后由 16213319 于 2024-6-24 11:45 编辑

记:2024/3/14第七课学习笔记
深入学习笔记:
深入学习笔记:

在今天的课程中,我们深入探讨了如何使用按键来控制LED灯的状态,这是一个将用户输入转化为硬件响应的经典案例,也是嵌入式系统设计中的一项基本技能。

### 按键检测原理

#### 1. 硬件连接

按键通常连接到单片机的一个GPIO(General Purpose Input/Output)引脚上。在没有按下按键时,引脚处于高电平(悬空或上拉电阻拉高);当按键被按下时,引脚电平会变为低电平(通过按键接地)。这种变化被单片机检测到,从而识别出按键的按下状态。

#### 2. 软件检测

在软件层面,我们使用一个无限循环或中断服务例程来定期检查按键引脚的电平状态。当检测到电平变化时,程序会进入相应的处理流程,如改变LED灯的状态。

### 消抖处理

按键在按下或释放瞬间可能会产生抖动,导致多次误触发。为了避免这种情况,我们需要在软件中加入消抖处理,通常通过延时一段短时间(如10-20毫秒)后再重新检测按键状态,确认按键的真实状态。

```c
if(P1_0 == 0) { // 检测到按键按下
    delay(20); // 延时消抖
    if(P1_0 == 0) { // 再次检测确认
      // 执行按键处理逻辑
    }
}
```

### 控制LED灯

一旦检测到按键按下并经过消抖处理,我们就可以执行相应的逻辑来控制LED灯。这可能包括切换LED灯的状态(亮或灭)、改变闪烁频率或执行其他预定义的动作。

```c
if(P1_0 == 0) {
    delay(20);
    if(P1_0 == 0) {
      P1_1 = !P1_1; // 切换LED灯状态
    }
}
```

### 状态机的应用

在更复杂的应用场景中,我们可能会使用状态机的概念来管理按键和LED灯的状态。状态机允许我们定义一系列的状态和从一个状态到另一个状态的转换规则,这有助于构建更清晰、更易于维护的程序结构。

### 实际应用与扩展

掌握了按键控制LED灯的基本原理后,我们可以将这项技能应用到各种实际项目中,如报警系统、家用电器的控制面板、游戏设备的界面等。通过结合更多的输入设备(如旋钮、触摸屏)和输出设备(如LCD显示器、蜂鸣器),我们可以设计出功能更强大、用户体验更佳的产品。

通过本课的学习,我们不仅学会了如何使用按键控制LED灯,更重要的是,我们理解了嵌入式系统中输入设备与单片机交互的基本原理,为今后在电子工程领域的深入探索奠定了坚实的基础。随着技术的发展,输入设备和输出设备的种类将更加多样,但掌握好基本的控制逻辑,将有助于我们应对未来可能出现的各种复杂场景。

16213319 发表于 2024-6-23 16:42:41

记:2024/3/19第八课学习笔记
深入学习笔记:

在今天的课程中,我们深入探讨了蜂鸣器的工作原理以及如何通过编程控制其发声,这是嵌入式系统设计中一个常见且实用的功能,广泛应用于各种电子设备中,用于发出提示音或警报声。

### 蜂鸣器的工作原理

#### 1. 类型介绍

蜂鸣器主要分为两种类型:有源蜂鸣器和无源蜂鸣器。

- **有源蜂鸣器**:内部包含振荡电路,只需提供直流电压即可发出固定频率的声音。
- **无源蜂鸣器**:内部不含振荡电路,需要外部电路提供变化的信号才能发声,频率可通过外接电路调节。

#### 2. 发声机制

无论是有源还是无源蜂鸣器,其发声都是基于电磁感应原理。当电流通过蜂鸣器内的线圈时,会产生磁场,吸引或排斥振动膜片,进而产生声音。有源蜂鸣器的频率由内部电路决定,而无源蜂鸣器的频率则由外部提供的信号频率决定。

### 控制蜂鸣器发声

#### 1. 使用有源蜂鸣器

控制有源蜂鸣器相对简单,只需将单片机的GPIO引脚连接到蜂鸣器的正极,另一端接到电源正极,然后在软件中控制GPIO输出高电平即可使蜂鸣器发声。

```c
// 控制有源蜂鸣器发声
P1_0 = 0; // 将GPIO置为低电平,使蜂鸣器工作
delay(1000); // 延时1秒
P1_0 = 1; // 将GPIO置为高电平,停止蜂鸣器工作
```

#### 2. 使用无源蜂鸣器

控制无源蜂鸣器需要产生一定频率的脉冲信号。这通常通过定时器或PWM(脉冲宽度调制)功能实现,使蜂鸣器按照预定的频率振动发声。

```c
// 使用PWM控制无源蜂鸣器发声
// 假设已经配置了定时器产生PWM信号,频率为1kHz
while(1) {
    // PWM信号自动控制蜂鸣器发声,无需额外代码
}
```

### 实践应用

掌握蜂鸣器的控制技术后,我们可以在各种实际项目中应用它,如安全警报系统、家电控制、人机交互界面等。通过合理设计发声模式,如短促的警告音、连续的报警声或有节奏的提示音,可以显著提高产品的用户体验和安全性。

### 总结与拓展

通过本课的学习,我们不仅了解了蜂鸣器的工作原理,还学会了如何通过编程控制其发声,这为我们今后在嵌入式系统设计中提供了新的工具和思路。随着技术的进步,新型的发声元件和技术(如压电陶瓷、语音合成芯片)也不断涌现,掌握好基本的控制逻辑,将有助于我们更好地适应和应用这些新技术,创造更多创新和实用的电子产品。
页: [1] 2
查看完整版本: 【实验箱已发出】学习stc32g12k128的一些学习笔记和学习心得