1. STM32F103与Modbus从机开发概述
在工业自动化领域,Modbus协议因其简单可靠的特点成为最常用的通信协议之一。STM32F103作为经典的Cortex-M3内核微控制器,凭借其丰富的外设资源和稳定的性能,成为嵌入式开发者的首选。将两者结合实现Modbus从机功能,是工业控制项目中常见的需求场景。
使用CubeMX和Keil5这对黄金组合进行开发,可以大幅提升开发效率。CubeMX提供直观的图形化界面配置外设和中间件,自动生成初始化代码;Keil5则提供强大的编辑、编译和调试环境。这种开发方式相比传统的手动编写底层代码,能减少至少40%的开发时间,同时降低配置错误的风险。
2. 开发环境搭建与工程创建
2.1 软件工具准备
开发前需要准备以下软件环境:
- STM32CubeMX:最新版本(建议6.x以上)
- Keil MDK-ARM:V5.25及以上版本
- STM32F1xx HAL库:通过CubeMX自动安装
- FreeModbus协议栈:可从GitHub获取最新版本
注意:Keil5安装时需确保同时安装了对应STM32F1系列的Device Family Pack,否则无法正确编译工程。
2.2 CubeMX工程配置步骤
- 新建工程选择STM32F103C8Tx(根据实际芯片型号选择)
- 配置系统时钟:
- 选择外部晶振作为时钟源
- 设置系统时钟为72MHz
- 配置APB1总线时钟为36MHz(串口波特率计算基准)
- 串口配置:
- 启用USART1(或其他可用串口)
- 模式选择Asynchronous
- 波特率设置为9600(Modbus RTU常用速率)
- 数据位8,无校验,停止位1
- 定时器配置(用于Modbus超时检测):
- 启用TIM2或TIM3
- 时钟预分频设为71(72MHz/72=1MHz)
- 计数模式选择向上计数
- 自动重装载值设为10000(对应10ms超时)
- GPIO配置:
- 配置USART对应的TX/RX引脚
- 可选配置Modbus通信状态指示灯引脚
2.3 生成Keil工程
在CubeMX中完成配置后:
- 选择"Project Manager"标签
- 设置Toolchain/IDE为MDK-ARM V5
- 勾选"Generate peripheral initialization as a pair of .c/.h files"
- 点击"Generate Code"生成工程
3. FreeModbus协议栈移植
3.1 协议栈文件结构
FreeModbus协议栈主要包含以下关键文件:
mb.c:Modbus协议核心实现mbport.c:硬件抽象层接口mbfunccoils.c:线圈操作函数mbfuncdisc.c:离散输入操作函数mbfuncholding.c:保持寄存器操作函数mbfuncinput.c:输入寄存器操作函数
3.2 移植关键步骤
- 在Ke
