stm32-modbus-rs485程序移植过程

发布于:2025-07-12 ⋅ 阅读:(16) ⋅ 点赞:(0)

 背景 

【modbus学习笔记】Modbus协议解析_modus协议中0.001如何解析-CSDN博客

 【Modbus学习笔记】stm32实现Modbus(从机)并移植_stm32 modbus数据处理-CSDN博客

继上篇成功移植modbus从机例程之后,我要尝试移植主机的程序。经提醒,可用野火的modbus代码。

参考教程:

Modbus参考例程 — 野火产品资料下载中心 文档https://doc.embedfire.com/products/link/zh/latest/package/modbus.html

支持板子:

例程介绍:

https://doc.embedfire.com/module/module_tutorial/zh/latest/Module_Manual/extend_class/modbus.html#

 其他教程(博主暂时没看):

up主X西鱼X的所有视频,如:

【FreeRTOS+freemodbus(无BGM)】 https://www.bilibili.com/video/BV1LRUSYFET3/?share_source=copy_web&vd_source=0d3e505cd639f5fd61042ee6c87b2fd6

移植过程

配置

【例程配置】

引脚分配
    PA2     ------> USART2_TX
    PA3     ------> USART2_RX

   用定时器4

【我的工程】

引脚分配
    PA2     ------> USART2_TX
    PA3     ------> USART2_RX 

    PA1     ------> CON(485方向控制引脚)

   用定时器6

步骤

1. 在cubemx中配置通信引脚,定时器,打开中断。

2. 将例程中的文件加入自己的,要对照工程加。

3. 运行,出现报错后修改,以下是我运行过程中修改的地方,按记忆记录,不一定完全。

改一:

mx生成的MX_USART2_UART_Init()里面没有未知参数,要改。

改二:

USART2在cubemx配置的是同步,生成代码后,去这个配置文件中把#define HAL_USART_MODULE_ENABLED  的注释解开,用到了这个库的函数

改三:

因为void USART2_IRQHandler(void)在stm32f1xx_it和portserial_m都有,我选择把stm32f1xx_it里面的注释掉。

 改四:

我的定时器和例程用的不同,他用的4,我用的6,并且mx自动帮我配置了,所以要把porttimer_m里面的void TIM4_IRQHandler(void)注释掉

 改五:

在mx生成的usart.h中添加引脚定义,另外我用到了485,需要打开485注释,并且修改引脚,注意引脚方向。

改六:

 main.c文件中也要记得改。

运行结果

将程序下载到芯片后,打开modbus slave软件连接。modbus上位机使用方法参考:Modbus测试工具ModbusPoll与Modbus Slave使用方法_modbuspoll中文版-CSDN博客

连接后,现象如图。

点击Display->Communication,可以看到通讯内容。


网站公告

今日签到

点亮在社区的每一天
去签到