标准库开发和寄存器开发的区别
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完成功能
寄存器方式:
- 查阅芯片手册获取寄存器地址
- 定义寄存器指针
- 直接读写寄存器