正点原子精英板移植freemodbus-v1.6

移植完成通讯测试截图:

正点原子精英板移植freemodbus-v1.6_第1张图片

硬件连接:

移植过程:

一、首先下载:FreeModbusV1.6源码

FreeMODBUS官网:

https://www.embedded-solutions.at/zh-hans/freemodbus/

准备一份精英板工程文件夹

修改名称为:

解压FreeModbusV1.6源码

里面的文件:

正点原子精英板移植freemodbus-v1.6_第2张图片

Demo例有很多移植例子就是没有STM32的......

在精英板工程文件夹里添加一个文件夹FreeModbus

将FreeModbusV1.6源码文件夹里的modbus文件夹内的所有文件复制到精英板工程文件夹里的FreeModbus文件夹里

正点原子精英板移植freemodbus-v1.6_第3张图片

正点原子精英板移植freemodbus-v1.6_第4张图片

再将FreeModbusV1.6源码文件夹里的demo文件夹内的BARE文件夹内的port文件夹复制到精英板工程文件夹里的FreeModbus文件夹里

正点原子精英板移植freemodbus-v1.6_第5张图片

正点原子精英板移植freemodbus-v1.6_第6张图片

打开MDK工程,添加工程分组FreeModbus,并将工程文件夹FreeModbus内的除Port内的所有.c文件添加到工程分组FreeModbus内

正点原子精英板移植freemodbus-v1.6_第7张图片

填加相应的头文件目录:

正点原子精英板移植freemodbus-v1.6_第8张图片

添加工程分组FreeModbusPort,并将工程文件夹FreeModbus内的port文件内所有.c文件添加进来:

正点原子精英板移植freemodbus-v1.6_第9张图片

编译发现两个错,五个警告:

正点原子精英板移植freemodbus-v1.6_第10张图片

接下来就是修改文件了:

port.h 可以不修改

porttimer.c 

添加定时器初始化代码这里使用TIM参数50us时基

BOOL

xMBPortTimersInit( USHORT usTim1Timerout50us )

定时器开启函数实现

void

vMBPortTimersEnable(  )

定时器关闭函数实现

void

vMBPortTimersDisable(  )

添加定时器中断服务程序

Portserial.c

发送接收使能函数配置:

void

vMBPortSerialEnable( BOOL xRxEnable, BOOL xTxEnable )

串口初始化函数配置:

BOOL

xMBPortSerialInit( UCHAR ucPORT, ULONG ulBaudRate, UCHAR ucDataBits, eMBParity eParity )

配置串口发送和接收字节函数:

BOOL

xMBPortSerialPutByte( CHAR ucByte )

最后添加串口中断处理函数

在main.c添加四个处理函数

注意事项:mbRTU.ceMBRTUSend中稍作修改,代码如下。

/* Activate the transmitter. */

//发送状态转换,在中断中不断发送

eSndState = STATE_TX_XMIT;

//插入代码 启动第一次发送,这样才可以进入发送完成中断

xMBPortSerialPutByte( ( CHAR )*pucSndBufferCur );

pucSndBufferCur++; 

usSndBufferCount--;

//使能发送状态,禁止接收状态

vMBPortSerialEnable( FALSE, TRUE );

寄存器的起始地址

若出现无法读取寄存器起始地址0地址内容,在计算偏移地址时要多-1或者定义起始地址为1,可解决问题,

也可以修改Freemodbus函数让其从0地址开始处理,而不是1地址。

参考资料:https://www.amobbs.com/thread-5491615-1-1.html

代码已上传我的资源,需要的朋友自行下载吧。

https://download.csdn.net/download/qq_41664294/11264558

你可能感兴趣的:(FreeModbus移植笔记)