FreeModbus+STM32 +HAL库 无操作系统移植 (已在正点原子阿波罗F429开发板上移植成功)

本文详细介绍了如何将FreeModbus协议栈移植到STM32F429IGT6开发板上,基于HAL库,实现MODBUS RTU从机功能。内容涵盖FreeModbus的功能特性、移植所需的源码、配置TIM6和UART1、中断优先级设置以及移植过程中对各模块的初始化和功能验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FreeModbus的移植,基于STM32F4+HAL库平台的MODBUS RTU从机

FreeModbus

freemodbus官网

FreeMODBUS 是针对通用的Modbus协议栈在嵌入式系统中应用的一个实现。Modbus协议是一个在工业制造领域中得到广泛应用的一个网络协议。
一个Modbus通信协议栈包括两层:定义了数据结构和功能Modbus应用协议和网络层。
在FreeMODBUS的当前版本中,提供了Modbus Application Protocol v1.1a 的实现并且支持在Modbus over serial line specification 1.0中定义的RTU/ASCII传输模式。从0.7版本开始,FreeModbus也支持在TCP defined in Modbus Messaging on TCP/IP Implementation Guide v1.0a中定义的TCP传输。Freemodbus遵循BSD ,这意味着本协议栈的实现代码可以应用于商业用途。

目前版本的FreeModbus支持如下的功能码:

  • 读输入寄存器 (0x04)
  • 读保持寄存器 (0x03)
  • 写单个寄存器 (0x06)
  • 写多个寄存器 (0x10)
  • 读/写多个寄存器 (0x17)
  • 读取线圈状态 (0x01)
  • 写单个线圈 (0x05)
  • 写多个线圈 (0x0F)
  • 读输入状态 (0x02)
  • 报告从机标识 (0x11)

freemobus的API说明
freemobus github
源码下载页面

移植过程

  1. 下载freemodbus 源码
    在上面的链接下,可以下载1.6版本的源代码,此版本包括Modbus RTU / ASCII,Modbus TCP,输入/保持寄存器访问,离散寄存器等。此外,它还被移植到以下平台:FreeRTOS / Cortex M3 SAM3S,FreeRTOS / ARM STR71X,FreeRTOS / ARM AT91SAM7X,lwIP / PPP / STR71X,飞思卡尔MCF5235,lwIP / MCF5235,Atmel AVR ATMega168,TI-MSP430,Win32和Linux操作系统。(居然没有STM32平台?)
    解压缩后
    文件夹内容
    移植需要的文件再demomodbus文件夹中
    demo文件夹中的内容☟
    需要BARE
    我们需要BARE文件夹里的文件
    BARE文件夹
    之后是modbus文件夹,里面有modbus功能的源代码
    modbus文件夹

  2. 新建stm32F4的工程
    因为我使用的是正点原子阿波罗的开发板,我用cubeMX软件进行初始化配置,芯片选择stm32f429IGT6
    时钟,GPIO,调试端口这些按需要进行配置,这里freemodbus需要的外设有1个TIMER和1个UART。(可以看出来,freeModbus需要的外设资源就是这么少)串口是用来承载modbus协议的物理层端口,定时器是用来产生T3.5的中断的,freemodbus是根据这个超时中断来判断一帧数据接收完成的。
    TIMER6的配置
    TIMER6的配置,这里预分频器和自动装载寄存器的值可以先随便填一个,因为后续我们在freemodbus的移植文件里还要重新对TIMER进行初始化。
    uart1的配置
    uart1的配置
    uart1的配置。这里也是可以先随便填(停止位要配置好),后续在移植文件里还要重新对UART1进行初始化。
    NVIC
    之后记得使能两个外设的中断,这里优先级的设置要提一下,查阅了很多文档,都没有说明这两个外设(串口和定时器)优先级的配置,我在开始配置的时候认为定时器的优先权要高一些,也许freemodbus要使用这个定时器定时查询什么状态。但是在之后移植完成后,我仔细阅读了源代码,认为应该把串口的优先级调高,优先保证将数据从串口中取出

评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值