1. STM32CubeMX串口通信基础入门
第一次接触STM32串口通信时,我也被各种专业术语搞得晕头转向。经过几个项目的实战,我发现用STM32CubeMX配置串口其实比想象中简单得多。就像组装乐高积木一样,只要按照步骤来,很快就能搭建起通信桥梁。
硬件准备方面,建议初学者从STM32F103C8T6核心板开始,这款开发板性价比高,资料丰富。软件需要安装STM32CubeMX和Keil MDK,这两个工具就像嵌入式开发的左右手,一个负责配置,一个负责编程。
在CubeMX中新建工程时,芯片型号选择很关键。我刚开始就犯过错,选了不兼容的型号导致后续配置全白费。选好芯片后,记得先配置调试接口(SYS)和时钟(RCC),这是整个系统运行的基础。时钟配置要特别注意,就像给系统装上了准确的心脏,频率不对会导致各种奇怪问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 阻塞式串口通信实战
2.1 基础发送功能实现
阻塞式发送是最简单的通信方式,适合新手入门。在CubeMX中配置USART为异步模式后,生成代码框架。在main.c中添加发送代码:
c复制HAL_UART_Transmit(&huart1, (uint8_t*)"Hello World", 11, 0xFFFF);
HAL_Delay(500);
这段代码会让开发板每500ms发送一次"Hello World"。我第一次测试时遇到个坑:烧录后没反应。后来发现是Keil的调试配置问题,需要在Debug设置里取消Pack选项的勾选。
2.2 printf重定向技巧
直接使用printf输出会更方便,但需要重定向fputc函数:
c复制int fputc(int c, FILE *f) {
uint8_t ch[1] = {c};
HAL_UART_Transmit(&huart1, ch, 1, 0xFFFF);
return c;
}
记得在Keil中勾选Use MicroLIB选项。我遇到过重定向失败的情况,后来发现是忘记包含stdio.h头文件。还有个常见问题是编译报错,需要临时注释掉某些系统文件中的代码再取消注释,这是MDK的一个小bug。
2.3 阻塞接收实现
接收数据稍微复杂些,需要定义缓冲区:
c复制uint8_t Buf[5];
