• Freemodbus 移植过程记录


    前言

        Freemodbus 是一个协议栈;纯代码,按照一定逻辑性实现;

        比如串口,用它来收发二进制数据,人们就制定一种规则(数据帧)来达到高效稳定的数据串数目的。再详细的内容可以自行网上检索一下相关介绍。

    需求

            作者的一个项目上需要用到modbus从机,想找一个好用方便的modbus协议栈移植过来(为什么不敲一个?不解释了)。

            刚开始找到的是安富莱的modbus代码,硬汉确实令人敬佩,代码文档写的都不错。发现它的代码有几个接口函数耦合到其他接口上了,因为作者正常会使用babyos,所以又找了一下,发现freemodbus 耦合的比较少。只要实现这几个接口:

    串口

    • 带串口配置参数的接口函数
    • 中断接收
    • 发送空中断
    • 中断服务函数
    • 关机/打开 接收/发送中断 函数

    定时器

    • 50us *N 定时器配置接口
    • 打开/关闭定时器函数
    • 中断服务程序

    移植

    在硬汉的网站上下载了ModbusonAT32MCU-单片机文档类资源-CSDN文库

    只要是coretex-m 核的单片机用起来接口都很接近。

    于是作者将上面的代码移植到自己的M0上。按照上面的接口都实现好。

    调试

    这里都是经验。将你按照需要的代码都移植好了之后,发现不能正常工作怎么办?

    调试50us中断是否正常

    prvvTIMERExpiredISR

    设置固定50us中断,在这里让IO翻转,示波器测试验证;

    测试串口接收是否正常

    1. BOOL
    2. xMBPortSerialGetByte( CHAR * pucByte )

    在这里添加一个buf,将收到的数据写到buf内校验;

    进一步的

    ucRTUBuf

    这个是协议栈的接收/发送buf,对比一下这个buf 接收的数据对不对;

    这里作者遇到的问题是,接收的收据能收到,只有第一个字节是正确的,后面的都不对,原因是串口配置部分出现问题:将检验位关闭就正常了。

    测试工具

    Modbus Poll;

    这里可以看到发送下去的贞,可以将一帧数据复制到串口调试工具进行调试;

    接收校验成功后,ucRTUBuf 内容会被填充为发送的数据;

    发送测试

    断点设置再

    1. BOOL
    2. xMBPortSerialPutByte( CHAR ucByte )

    正常发送都会进去这个函数,刚开始作者配置的是发送中断,发现不会进这个中断,配置位发送空中断就正常了。

     

        

  • 相关阅读:
    【STL】stack栈容器与list链表容器
    python对于grpc的简单操作(二)
    【编程题】【Scratch四级】2021.03 绳子算法
    旅游网站大数据分析 - 数据抓取
    linux日志查看命令
    深入了解视觉语言模型
    生命在于学习——Python人工智能原理(3.2)
    springMVC返回对象或List集合时报错 无法解析
    Jackson分析:侧向流动免疫分析在床旁检测中的优势
    基于Yolov8的中国交通标志(CCTSDB)识别检测系统
  • 原文地址:https://blog.csdn.net/Q85038427/article/details/126152328