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.总结
标准库开发方式:
- 提供了对底层硬件的抽象封装
 - 通过API函数调用实现功能
 - 开发效率高,代码可移植性强
 - 适合快速开发和产品原型验证
 - 示例:STM32的HAL库、标准外设库
 
寄存器开发方式:
- 直接操作MCU的寄存器地址
 - 需要对芯片手册有深入了解
 - 执行效率更高,代码量更小
 - 适合对性能和资源要求严格的场合
 - 示例:直接配置GPIO寄存器控制LED
 
实际应用中,通常采用混合开发方式:
- 对性能要求高的部分使用寄存器操作
 - 其他部分使用标准库提高开发效率
 
具体到开发步骤:
- 
标准库方式:
- 包含对应头文件
 - 调用初始化函数
 - 使用API完成功能
 
 - 
寄存器方式:
- 查阅芯片手册获取寄存器地址
 - 定义寄存器指针
 - 直接读写寄存器
 
 

