STM32移植FreeModbusRTU教程2(FreeModbus的移植)

阅读: 评论:0

STM32移植FreeModbusRTU教程2(FreeModbus的移植)
基于原⼦F103精英版RS485实验⼯程的Freemodbus RTU的移植
资源准备及Freemodbus⽂件内容说明
移植FreeModbus版本为 提取码:1xkk
硬件平台为原⼦F103精英版,移植基础⼯程为 提取码:83gi
Freemodbus⽂件说明
FreeModbus V1.6解压后打开⽂件夹后显⽰内容如下:
我们只关⼼ “demo”/“modbus”这两个⽂件夹
打开demo⽂件夹,显⽰内容为freemodbus⽀持的平台例程,stm32属于ARM平台,我们后续可参考"BARE"⽂件夹中的内容
打开BARE⽂件夹,显⽰内容如下:
⽂件结构
源⽂件描述
port\port.h实现硬件移植部分接⼝
port\portevent.c实现从机事件移植接⼝(需根据移植平台⽤户⾃⾏实现更改)
port\portserial.c从机串⼝移植(需根据移植平台⽤户⾃⾏实现更改)
port\porttimer.c从机定时器移植(需根据移植平台⽤户⾃⾏实现更改)源⽂件描述
demo为⼯程实例定义从机数据缓冲区,实现从机Modbus 功能的回调接⼝(需⽤户根据需求⾃⾏实现更改)打开modbus⽂件夹,显⽰内容为freemodbus⾃⾝协议源码
因为我们移植的是RTU通讯,所以暂且不⽤管ASCII TCP两个⽂件夹中的内容
⽂件结构
源⽂件描述
modbus\mb.c给应⽤层提供Modbus 从机设置及轮询相关接⼝modbus\functions\mbfunccoils.c从机线圈相关功能
modbus\functions\mbfuncdisc.c从机离散输⼊相关功能
modbus\functions\mbfuncholding.c从机保持寄存器相关功能
modbus\functions\mbfuncinput.c从机输⼊寄存器相关功能
modbus\functions\mbfuncother.c其余Modbus 功能
modbus\functions\mbutils.c⼀些协议栈中需要⽤到的⼯具函数modbus\rtu\mbcrc.c CRC 校验功能
modbus\rtu\mbrtu.c从机RTU 模式设置及其状态机“include”⽂件夹内为modbus源代码的头⽂件存放⽂件夹
开始移植 Freemodbus到stm32平台⼯程中
移植之前我们需打开上⽂提到的freemodbus源⽂件及stm32 rs485实验⼯程
分别打开两个⽂件夹
⼯程⽂件内modbus⽂件夹内容的添加
在485实验⼯程⽂件夹内新建"MODBUS"⽂件夹
将freemodbus-v1.6“demo”⽂件夹中的BARE⽂件夹复制到MODBUS⽂件夹内将freemodbus-v1.6“modbus”⽂件夹复制到MODBUS⽂件夹内
如下图所⽰
keil⼯程内modbus源码及头⽂件的添加
便携式鱼缸
打开RS485基础⼯程,创建modbus⼯程组
添加如下⽂件到⼯程组内,前⾯有提到它们所属的⽂件⽬录
添加头⽂件路径
收腰羽绒服
keil⼯程接⼝函数的补充及报错的解决
添加完成后,先编译⼀遍后出现报错,我们对如下⽂件进⾏更改,删除“porttimer.c”⽂件中下图两个函数前⾯的inline字符
将“mbconfig.h”⽂件中的#define MB_ASCII_ENABLED ( 1 )改为(0)失能ASCII模式
将demo.c中的 int main函数删除,并对函数进⾏补充完善
具体更改后代码如下
#include"mb.h"
#include"mbport.h"
//保持寄存器
#define REG_HOLDING_START 0x0001    //起始为1,请看前⾯modbus rtu协议说明
#define REG_HOLDING_NREGS 4
uint16_t usRegHoldingBuf[REG_HOLDING_NREGS]={0x0000,0x5678,0x5678,0x5678};
//输⼊寄存器皮带架>喷气式汽车
#define REG_INPUT_START 0x0001    //起始为1,请看前⾯modbus rtu协议说明
#define REG_INPUT_NREGS 4
uint16_t usRegInputBuf[REG_INPUT_NREGS]={0x0000,0x1111,0x2222,0x3333};
/
* ----------------------- Start implementation -----------------------------*/
乙酰氨基阿维菌素/**
*****************************************************************************
* @Name  : 读输⼊寄存器
* @Brief  : 对应功能码0x04 -> 读单个或多个输⼊寄存器eMBFuncReadInputRegister
* @Input  : *pucRegBuffer数据缓冲区
*          usAddress:    寄存器地址
*          usNRegs:      寄存器数量
* @Output : none
* @Return : Modbus状态信息
*****************************************************************************
**/
eMBErrorCode
eMBRegInputCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs )
{
eMBErrorCode    eStatus = MB_ENOERR;
int            iRegIndex;
//判断寄存器地址范围
if(((int16_t)usAddress
>= REG_INPUT_START )
网络流量统计
&&( usAddress + usNRegs
<= REG_INPUT_START
+ REG_INPUT_NREGS ))

本文发布于:2023-06-04 20:49:50,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/2/125977.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:件夹   移植   功能   寄存器   相关   实现   打开   函数
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图