51单片机 和 STM32 在硬件操作上的差异

server/2025/1/15 4:18:13/

单片机>51单片机STM32 在硬件操作上的差异


1. 时钟系统的差异

STM32 的时钟系统

STM32 的时钟系统非常复杂,支持多种时钟源(如内部晶振、外部晶振、PLL 等),并且每个外设(如 GPIO、定时器、串口等)都有独立的时钟开关。因此,在使用任何外设之前,必须启用其时钟。

  • 为什么需要启用时钟?
    • STM32 的外设默认是关闭的,以节省功耗。
    • 时钟是硬件工作的基础,没有时钟,硬件无法运行。

单片机>51单片机的时钟系统

单片机>51单片机的时钟系统非常简单,通常只有一个时钟源(如外部晶振或内部振荡器),并且所有外设共享同一个时钟。因此,单片机>51单片机不需要手动启用外设时钟。

  • 为什么不需要启用时钟?
    • 单片机>51单片机的时钟是全局的,所有外设默认都使用同一个时钟。
    • 硬件资源较少,没有复杂的时钟管理需求。

2. 外设配置的差异

STM32 的外设配置

STM32 的外设功能非常丰富,每个外设都有多种工作模式(如 GPIO 可以配置为输入、输出、复用功能等)。为了灵活配置这些外设,STM32 使用了结构体来存储配置参数,并通过初始化函数将配置应用到硬件。

  • 为什么需要配置结构体?
    • STM32 的外设功能复杂,需要通过结构体灵活配置。
    • 结构体可以存储多个参数,方便统一管理。

单片机>51单片机的外设配置

单片机>51单片机的外设功能非常简单,通常只需要直接操作寄存器即可。例如,配置 GPIO 时,只需要设置对应的寄存器位。

  • 为什么不需要配置结构体?
    • 单片机>51单片机的外设功能单一,配置简单。
    • 直接操作寄存器即可完成配置,不需要额外的结构体和初始化函数。

3. 硬件资源的差异

STM32 的硬件资源

STM32 的硬件资源非常丰富,支持多种外设(如 GPIO、定时器、串口、ADC、DAC 等),并且每个外设都有独立的控制寄存器。为了管理这些资源,STM32 使用了复杂的库函数和结构体。

  • 为什么需要初始化硬件?
    • STM32 的外设功能复杂,初始化过程需要配置多个寄存器。
    • 初始化函数将配置参数应用到硬件,确保硬件按照预期工作。

单片机>51单片机的硬件资源

单片机>51单片机的硬件资源较少,通常只有基本的 GPIO、定时器、串口等外设,且控制寄存器非常简单。因此,单片机>51单片机不需要复杂的初始化过程。

  • 为什么不需要初始化硬件?
    • 单片机>51单片机的硬件功能简单,配置过程直接通过寄存器完成。
    • 没有复杂的初始化需求。

4. 代码示例对比

STM32 的 GPIO 配置

// 1. 启用时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);// 2. 配置结构体
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  // 推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;         // 引脚 5
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 输出速度 50MHz// 3. 初始化硬件
GPIO_Init(GPIOA, &GPIO_InitStructure);

单片机>51单片机的 GPIO 配置

sbit LED = P1^0;  // 定义 LED 引脚为 P1.0void main()
{LED = 0;  // 直接操作寄存器,点亮 LED
}

5. 总结:为什么 51 单片机不需要“三步走”?

  1. 时钟系统简单单片机>51单片机的时钟是全局的,所有外设共享同一个时钟,不需要手动启用。
  2. 外设功能单一单片机>51单片机的外设功能简单,直接操作寄存器即可完成配置。
  3. 硬件资源有限单片机>51单片机的硬件资源较少,没有复杂的初始化需求。

相比之下,STM32 的硬件资源丰富、外设功能复杂,因此需要通过“三步走”来管理时钟、配置参数和初始化硬件。


http://www.ppmy.cn/server/158458.html

相关文章

数据结构与算法之链表: LeetCode 146. LRU 缓存 (Ts版)

LRU 缓存 https://leetcode.cn/problems/lru-cache/description/ 描述 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 ke…

Oracle Dataguard(主库为双节点集群)配置详解(5):将主库复制到备库并启动同步

Oracle Dataguard(主库为双节点集群)配置详解(5):将主库复制到备库并启动同步 目录 Oracle Dataguard(主库为双节点集群)配置详解(5):将主库复制到备库并启动…

深入理解 Java 设计模式之策略模式

一、引言 在 Java 编程的世界里,设计模式就如同建筑师手中的蓝图,能够帮助我们构建出更加健壮、灵活且易于维护的代码结构。而策略模式作为一种经典的行为型设计模式,在诸多实际开发场景中都发挥着至关重要的作用。它能够让算法的定义与使用…

wsl2上mysql出现ip端口冲突问题

现象出现于win11系统wsl2平台跑ubuntu,在win11 22h2之后提供固化wsl ip地址的功能,具体可以百度,大概是在C:/用户/用户名文件夹下新建.wslconfig文件,其中添加固化IP地址的参数。 固化完毕后,wsl将不再使用虚拟ip&…

Eureka缓存机制

一、Eureka的CAP特性 Eureka是一个AP系统,它优先保证可用性(A)和分区容错性(P),而不保证强一致性(C)。这种设计使得Eureka在分布式系统中能够应对各种故障和分区情况,保…

Java 原型模式、建造者模式、单例模式

原型模式、建造者模式 原型模式 原型模式(Prototype Pattern)是一种创建型设计模式,它允许你通过复制现有对象来创建新对象,而不是通过实例化类。这种模式在需要大量相似对象时非常有用,因为它可以减少创建对象的开销…

(leetcode算法题)155. 最小栈 901. 股票价格跨度

这两道题都是单调栈专题中的引子题目, 如果我们仔细分析题目,如果只是想得到当前历史数据中最小值和可以发现这两道题, 都不用使用一个额外的容器装以往所有的历史数据才能得到结果 对于155来说, 只需要维护最小栈就可以快速获…

数据结构与算法之二叉树: LeetCode 701. 二叉搜索树中的插入操作 (Ts版)

二叉搜索树中的插入操作 https://leetcode.cn/problems/insert-into-a-binary-search-tree/description/ 描述 给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树返回插入后二叉搜索树的根节点。 输入数据 保…