背景
【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
步骤
-
在cubemx中配置通信引脚,定时器,打开中断。
-
将例程中的文件加入自己的,要对照工程加。
-
运行,出现报错后修改,以下是我运行过程中修改的地方,按记忆记录,不一定完全。
改一:
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,可以看到通讯内容。
