对于新手,我强烈建议从寄存器开始,但不要死磕,而是以理解硬件为核心。寄存器操作能让你看清每个外设的时钟、引脚、数据流的底层逻辑,这是HAL库永远给不了你的。比如点亮LED,寄存器版是`GPIOB->ODR |= (1<<5)`,HAL版是`HAL_GPIO_WritePin(...)`,前者让你明白ODR寄存器的作用,后者只是API调用。
实操建议:先用寄存器写一个GPIO、UART、定时器的小项目(如流水灯+串口打印),建立底层直觉。然后切换到HAL库重写同一项目,对比差异。这样你既懂原理,又能用HAL快速开发。
注意:不要全盘否定HAL,它在复杂外设(如USB、以太网)上效率极高。新手阶段,寄存器是‘内功’,HAL是‘招式’,两者都要练。
```c
// 寄存器点亮LED(STM32F1)
RCC->APB2ENR |= (1<<4); // 使能GPIOC时钟
GPIOC->CRH &= ~(0xF<<20);
GPIOC->CRH |= (0x3<<20); // PC13推挽输出
GPIOC->ODR ^= (1<<13); // 翻转电平
```
mcuku 阿沐 · 2026-08-17