1、课程导学与开发环境搭建
1.1 课程目标与学习路径
大家好,我是你们的嵌入式讲师。做嵌入式这行十几年了,我见过太多人卡在串口通信这个坎上。说白了,串口就是嵌入式世界的「普通话」,而Modbus则是工业现场的「通用语」。这门课的目标很直接——让你从零开始,真正掌握STM32的串口通信,并且能上手实现Modbus协议。
我个人习惯把学习路径分成三个阶段:
- 第一阶段:环境搭建与基础通信(第1-5章)——先把家伙事儿备齐,让串口能收发数据
- 第二阶段:Modbus协议实现(第6-20章)——从协议帧结构到完整的主从机代码
- 第三阶段:工程化与调试(第21-30章)——上机实测、异常处理、性能优化
你可能会问:「我直接看Modbus协议不行吗?」嗯,我在项目中遇到过太多次了——协议栈调通了,但串口本身就有问题,结果排查了三天。所以咱们先把基础打牢。
核心目标:学完这门课,你能独立完成基于STM32的Modbus RTU通信项目,从硬件选型到代码调试,心里有底。
1.2 STM32与Modbus协议概述
先聊聊STM32。这东西有多普及?我十年前做第一个项目用的就是STM32F103,到现在它还是出货量最大的MCU之一。为什么选它?
- 性价比高——几十块钱的芯片,外设齐全
- 生态成熟——HAL库、LL库、CubeMX,工具链完善
- 资料丰富——遇到问题,网上随便一搜就有解决方案
再说Modbus。这协议诞生于1979年,比我都大几岁。但你别小看它,工业现场至今还在大量使用。为什么?
- 简单可靠——协议帧结构清晰,实现起来不复杂
- 开放免费——不需要授权费,谁都能用
- 硬件兼容——串口、485、TCP都能跑
Modbus RTU的帧结构其实就四个部分:地址码(1字节)、功能码(1字节)、数据区(N字节)、CRC校验(2字节)。你想想看,这么简单的结构,却撑起了整个工业自动化通信的半壁江山。
我的经验:刚开始学Modbus时,别急着看那些复杂的协议文档。先把一个读保持寄存器的报文抓下来,对着手册一行行看,比什么都管用。
1.3 硬件准备
做嵌入式开发,硬件是绕不开的。我建议你准备以下东西:
| 硬件 | 推荐型号 | 用途 |
|---|---|---|
| 开发板 | STM32F103C8T6(蓝色板) | 主控板,跑程序用 |
| USB转串口工具 | CH340G / FT232 | 连接电脑和开发板 |
| 杜邦线 | 公对母、母对母各10根 | 接线用 |
| 面包板 | 830孔 | 搭建电路 |
这里有个坑,我曾经踩过——USB转串口工具一定要买带隔离的。便宜的CH340G模块在工业现场经常丢数据,排查起来特别头疼。
注意:接线时一定要确认TX和RX交叉连接。开发板的TX接工具的RX,开发板的RX接工具的TX。这个错误我见过不下十次。
1.4 软件安装
软件环境这块,我按安装顺序来说:
1.4.1 Keil MDK
Keil是ARM开发的主流IDE。我个人习惯用MDK-ARM V5版本,稳定,兼容性好。安装时注意:
- 选择完整安装,包含所有器件支持包
- 安装路径不要有中文
- 破解时以管理员身份运行
1.4.2 STM32CubeMX
这个工具能帮你自动生成初始化代码。说白了,就是图形化配置外设,然后生成HAL库代码。我刚开始用的时候也觉得不靠谱,后来发现它生成的代码比自己手写的规范多了。
1.4.3 串口助手
推荐两个:
- SSCOM——轻量级,功能够用
- MobaXterm——支持串口和SSH,适合长期调试
小技巧:串口助手的波特率设置要和代码里一致。我习惯用115200,速度快,而且大多数USB转串口工具都支持。
1.5 第一个工程:点亮LED验证环境
好了,理论说完了,咱们动手。第一个工程很简单——点亮开发板上的LED。目的是验证整个开发环境是否正常。
1.5.1 硬件连接
以STM32F103C8T6蓝色板为例,板载LED通常接在PC13引脚。你只需要:
- 用USB线连接开发板和电脑
- 确认开发板供电正常(红色电源灯亮)
1.5.2 使用CubeMX生成工程
打开CubeMX,按以下步骤操作:
- 新建工程,选择STM32F103C8Tx
- 在Pinout视图中,找到PC13,设置为GPIO_Output
- 配置时钟:HSE选择8MHz晶振,系统时钟设为72MHz
- 生成代码,选择MDK-ARM V5工具链
1.5.3 编写代码
在生成的main.c中,找到while(1)循环,添加以下代码:
/* 用户代码开始 */
while (1)
{
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); // 翻转LED
HAL_Delay(500); // 延时500ms
}
/* 用户代码结束 */
这里要注意,HAL_Delay函数用的是SysTick定时器,默认是1ms中断一次。如果你改了时钟配置,记得检查HAL_Init()里的时钟源设置。
1.5.4 编译下载
在Keil中:
- 点击编译按钮(或者按F7)
- 如果没有错误,点击下载按钮(或者按F8)
- 观察开发板上的LED是否以1秒的频率闪烁
验证成功标志:LED以大约1秒的频率闪烁。如果没反应,先检查电源,再检查下载器驱动,最后看代码里的引脚号对不对。
1.6 本章知识体系
为了让你更直观地理解本章的内容结构,我画了一张图:
这张图把本章的核心内容串起来了。你从左上角开始看,先明确目标,再了解技术背景,然后准备硬件软件,最后用点亮LED来验证一切是否就绪。
我的建议:别急着往下走。花点时间把环境搭好,LED点亮了,后面学起来才踏实。我见过太多人环境没配好就急着写代码,结果浪费了大量时间在排查工具问题上。