freemodbus多从站内部结构解析,以及如何移植到STM32 HAL库

本文详细介绍了如何将freemodbus的多从站功能移植到STM32的HAL库中,重点讨论了移植过程中遇到的问题,如对接HAL库函数、解决串口接收ORE错误以及如何处理未知长度的接收。关键步骤包括修改port.h、stm32f1xx_hal_uart.c、mbrtu.c和port.c文件,以及利用HAL_UART_Receive_IT和HAL_UART_Transmit_IT进行收发操作,并通过定时器T3.5判断一帧结束。
摘要由CSDN通过智能技术生成
  1. freemodbus多从站移植到是stm32,按照传统的移植方法没办法直接对接HAL_UART_Receive_IT、HAL_UART_Transmit_IT函数,而且需要自己编写代码调用hal底层。并且会出现多串口容易接收ORE(over run error)。
  2. 从站 port.h需要修改
    1.  头文件如下修改。不添加stm32f1xx_hal.h 的话编译会报警
    2. #include "stm32f1xx_hal.h"
      #include "stm32f1xx_hal_uart.h"
    3. MB_RTU_DCB结构体增加以下
    4.     //以下是自己新增,非标准自带
          UART_HandleTypeDef  *pMBhuart;  //用于将mbrtu和 huart绑定,方便后面变成

       

  3. stm32f1xx_hal_uart.c  需要修改
    1. 头文件
    2. #include "port_s1.h"
      #include "port_s2.h"
      #include "port_s3.h"
    3. UART_Receive_IT()函数增加以下,如果后续增加了主站,该处要屏蔽主站。
    4. 
          //----------插入freemodbus 从站 T3.5中断,需要帮绑定主站------------
      
          /* 判断是哪个串口触发的中断 */
      
              /
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要将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设备之间的通信。请注意,这只是一个基本的概述,并且还有其他细节和配置需要考虑,具体取决于你的应用需求和硬件环境。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值