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完成功能
寄存器方式:
- 查閱芯片手冊獲取寄存器地址
- 定義寄存器指針
- 直接讀寫寄存器