当前位置: 首页 > news >正文

标准库开发和寄存器开发的区别

1.标准库

void GPIO_Toggle_INIT(void)//初始化GPIO
{GPIO_InitTypeDef GPIO_InitStructure = {0};//定义GPIO结构体RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//使能GPIO时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;//GPIO引脚选择GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//GPIO模式GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//GPIO速度GPIO_Init(GPIOA, &GPIO_InitStructure);//传参配置
}

①GPIO_InitTypeDef

②RCC_APB2PeriphClockCmd

标准库是厂商提供的,我们所说的标准库开发方式本质就是对地址进行封装。而我们所说的寄存器开发方式就是对地址进行直接操作。

2.寄存器开发

下图是51单片机芯片头文件

实际上就是对地址是直接操作,让地址映射为寄存器名,方便程序员开发

①sfr

  • sfr 用于定义这些寄存器的别名,方便程序员通过名字直接访问寄存器。如P0

sfr 寄存器名 = 地址;  
sfr P0 = 0x80;   // 定义 P0 口的寄存器,地址为 80H 

​​​​②sbit

  • sbit 用于定义寄存器的单个位的别名,可直接操作 1 个比特。

sbit 位名 = 寄存器名 ^ 位位置;  
或  
sbit 位名 = 地址 ^ 位位置;  
sbit LED = P0 ^ 0;   // 定义 P0 口的第 0 位 

3.总结

标准库开发方式:

  1. 提供了对底层硬件的抽象封装
  2. 通过API函数调用实现功能
  3. 开发效率高,代码可移植性强
  4. 适合快速开发和产品原型验证
  5. 示例:STM32的HAL库、标准外设库

寄存器开发方式:

  1. 直接操作MCU的寄存器地址
  2. 需要对芯片手册有深入了解
  3. 执行效率更高,代码量更小
  4. 适合对性能和资源要求严格的场合
  5. 示例:直接配置GPIO寄存器控制LED

实际应用中,通常采用混合开发方式:

  • 对性能要求高的部分使用寄存器操作
  • 其他部分使用标准库提高开发效率

具体到开发步骤:

  1. 标准库方式:

    • 包含对应头文件
    • 调用初始化函数
    • 使用API完成功能
  2. 寄存器方式:

    • 查阅芯片手册获取寄存器地址
    • 定义寄存器指针
    • 直接读写寄存器

http://www.dtcms.com/a/300231.html

相关文章:

  • nfls dp 刷题 题解
  • AutoCAD_2025下载与保姆级安装教程
  • 【安全漏洞】防范未然:如何有效关闭不必要的HTTP请求方法,保护你的Web应用
  • cursor使用方法
  • MGER作业
  • Python 面向对象基础
  • 26考研英语词汇的逻辑笔记
  • 【PCIe 总线及设备入门学习专栏 5.1.3 -- PCIe PERST# 时序要求】
  • 从治理到共情——平台伦理的乡村共建之路
  • DeepSeek-LLM模块解析
  • 多项目终端环境初始化开发环境方案
  • 【RHCSA 问答题】第 10 章 配置和保护 SSH
  • cacti漏洞CVE-2022-46169的复现
  • 界面规范2-列表上
  • NTLite Ent Version
  • 文件IO——bmp图像处理
  • GRE、MGRE实验
  • 机器学习(重学版)基础篇(概念与评估)
  • 算子推理是什么
  • GStreamer中Pipeline(管道)
  • 速通python加密之base64
  • 《C++》模板详解
  • odoo代码分析(二)
  • 一键实现推送服务:Docker部署ntfy开源通知系统指南
  • STM32-定时器的基本定时/计数功能实现配置教程(寄存器版)
  • 数据结构习题--删除排序数组中的重复项
  • Linux内核设计与实现 - 第13章 虚拟文件系统(VFS)
  • TCP如何解决网络切换问题
  • Flutter开发实战之原生平台集成
  • FROM stakater/java8-alpine 构建cocker镜像