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

移植完成通讯测试截图:

硬件连接:

移植过程:

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

FreeMODBUS官网:

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

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

修改名称为:

解压FreeModbusV1.6源码

里面的文件:

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

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

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

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

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

填加相应的头文件目录:

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

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

接下来就是修改文件了:

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

  • 6
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值