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

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
    之后记得使能两个外设的中断,这里优先级的设置要提一下,查阅了很多文档,都没有说明这两个外设(串口和定时器)优先级的配置,我在开始配置的时候认为定时器的优先权要高一些,

  • 17
    点赞
  • 118
    收藏
    觉得还不错? 一键收藏
  • 21
    评论
要将FreeModbus移植STM32 HAL上,你需要进行以下步骤: 1. 首先,确保你已经配置好STM32 HAL的开发环境。这包括安装STM32CubeMX和相应的编译器工具链。你还需要下载FreeModbus库。 2. 使用STM32CubeMX创建一个新的工程。选择适合你的STM32系列的目标设备,并配置你的引脚和时钟设置。确保选择适当的串口或USART接口作为Modbus通信接口。 3. 在STM32 HAL工程中添加FreeModbus库文件。将FreeModbus库的源文件(.c)和头文件(.h)添加到你的工程目录中。 4. 在工程的主文件中,配置和初始化Modbus串口。根据你在步骤2中选择的串口接口,配置相应的寄存器、波特率、数据位、停止位和校验位等参数。 5. 实现Modbus回调函数。在你的工程中实现Modbus库所需的回调函数,例如读取线圈、读取输入寄存器、写入线圈等函数。 6. 在工程中使用FreeModbus库进行通信。使用FreeModbus库提供的API函数,例如mb_init()、mb_start()和mb_poll()等来初始化并启动Modbus通信。 7. 通过在主循环中调用mb_poll()函数来处理Modbus通信。确保在主循环中调用mb_poll()函数以处理Modbus请求和响应。 8. 构建和烧录工程。使用编译器工具链编译你的工程,并将可执行文件烧录到目标STM32设备中。 9. 运行和测试。将STM32设备连接到Modbus网络或调试工具上,运行你的应用程序,并使用Modbus主机工具来测试通信。 通过按照以上步骤,你可以成功地将FreeModbus移植STM32 HAL上,并实现与Modbus设备之间的通信。请注意,这只是一个基本的概述,并且还有其他细节和配置需要考虑,具体取决于你的应用需求和硬件环境。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值