STM32 FreeModbus RTU从机移植以及UART配置

本文详细介绍了如何在STM32上移植FreeModbus库,专注于RTU从机模式。主要内容包括移植步骤,如添加modbus文件、配置mbconfig.h、移植UART驱动,以及在portserial.c和porttimer.c中的关键函数实现。在UART配置过程中,作者遇到了数据丢失的问题,并探讨了解决方案,涉及字符类型和奇偶校验位设置。此外,还讨论了如何根据晶振频率精确配置波特率。
摘要由CSDN通过智能技术生成

FreeModbus的具体介绍就不提了。至于为什么要移植,大概就是因为移植比较快,而且比较稳定,可以减少因为自己编写出现的漏洞。
但是FreeModbus 1.5版本是没有主机的,因此移植的时候只可以做从机。网上有几个关于Modbus主机的源代码,回头等我弄好了再更新。

==================================

理论上来说,此处我移植了全部,但是只调试了RTU部分,因此其他部分不做赘述。

移植过程:
1.将modbus目录下所有文件拷贝加入工程。
2.对modbus中的include下的mbconfig.h进行编辑,裁剪其中需要的模块。(此处我没有进行裁剪,因此选项都是默认)
3.将demo中的合适的port文件夹下的文件加入工程。
4.修改port文件夹下的代码,移植UART驱动。
5.使用modbus poll调试。

因为没有配置mbconfig.h,因此直接从port的移植开始说。

port.c

#include "stm32f10x.h"

void EnterCriticalSection(  )
{
    __set_PRIMASK(1);
}

void ExitCriticalSection(  )
{
    __set_PRIMASK(0);
}

port.c中的两个函数作用是开关总中断并保存。

port.h

#ifndef _PORT_H
#define _PORT_H

#include "stm32f10x.h"
#include <assert.h>
#include <inttypes.h>

#define INLINE
#define PR_BEGIN_EXTERN_C           extern "C" {
   
#define PR_END_EXTERN_C             }

#define ENTER_CRITICAL_SECTION( )       EnterCriticalSection( )
#define EXIT_CRITICAL_SECTION( )    ExitCriticalSection( )

void            EnterCriticalSection( void );
void            ExitCriticalSection( void );


#ifndef TRUE
#define TRUE            1
#endif

#ifndef FALSE
#define FALSE           0
#endif

typedef u8 UCHAR;
typedef u16 USHORT;
typedef u8 BOOL;
typedef u32 ULONG;
typedef char CHAR;
typedef long LONG;
typedef short SHORT;
typedef int INT;

#endif

port.h只要是针对一些类型的跨平台支持。

portevent.c

#include "mb.h"                  
#include "mbport.h"

/* ----------------------- Variables ----------------------------------------*/
static eMBEventType eQ
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值