从 Arduino 转 STM32,最大差异是“抽象层消失”。Arduino 帮你管理时钟、外设初始化,而 STM32 需要你直接操作寄存器或 HAL 库。建议先用 CubeMX 生成初始化代码,别手写时钟树。注意引脚复用:GPIO 要配置 AF(复用功能),例如串口 Tx/Rx 需 `GPIO_AF_USART1`。还有中断回调:HAL 库用 `HAL_UART_RxCpltCallback`,不像 Arduino 的 `SerialEvent`。调试方面,务必用 SWD 和 printf 重定向到串口,否则很难排查。供电:STM32 通常 3.3V,注意电平转换。最后,别用 delay() 思维,改用 HAL_Delay() 或 SysTick,但更要学会定时器中断和 DMA,否则性能上不去。
```c
// 串口重定向示例
int fputc(int ch, FILE *f) {
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
```
mcuku 阿沐 · 2026-08-14