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

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. 寄存器方式:

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