当前位置:网站首页>Freemodbus 移植过程记录
Freemodbus 移植过程记录
2022-08-06 02:21:00 【mainbanp】
前言
Freemodbus 是一个协议栈;纯代码,按照一定逻辑性实现;
比如串口,用它来收发二进制数据,人们就制定一种规则(数据帧)来达到高效稳定的数据串数目的。再详细的内容可以自行网上检索一下相关介绍。
需求
作者的一个项目上需要用到modbus从机,想找一个好用方便的modbus协议栈移植过来(为什么不敲一个?不解释了)。
刚开始找到的是安富莱的modbus代码,硬汉确实令人敬佩,代码文档写的都不错。发现它的代码有几个接口函数耦合到其他接口上了,因为作者正常会使用babyos,所以又找了一下,发现freemodbus 耦合的比较少。只要实现这几个接口:
串口
- 带串口配置参数的接口函数
- 中断接收
- 发送空中断
- 中断服务函数
- 关机/打开 接收/发送中断 函数
定时器
- 50us *N 定时器配置接口
- 打开/关闭定时器函数
- 中断服务程序
移植
在硬汉的网站上下载了ModbusonAT32MCU-单片机文档类资源-CSDN文库
只要是coretex-m 核的单片机用起来接口都很接近。
于是作者将上面的代码移植到自己的M0上。按照上面的接口都实现好。
调试
这里都是经验。将你按照需要的代码都移植好了之后,发现不能正常工作怎么办?
调试50us中断是否正常
prvvTIMERExpiredISR设置固定50us中断,在这里让IO翻转,示波器测试验证;
测试串口接收是否正常
BOOL
xMBPortSerialGetByte( CHAR * pucByte )在这里添加一个buf,将收到的数据写到buf内校验;
进一步的
ucRTUBuf这个是协议栈的接收/发送buf,对比一下这个buf 接收的数据对不对;
这里作者遇到的问题是,接收的收据能收到,只有第一个字节是正确的,后面的都不对,原因是串口配置部分出现问题:将检验位关闭就正常了。
测试工具
Modbus Poll;

这里可以看到发送下去的贞,可以将一帧数据复制到串口调试工具进行调试;
接收校验成功后,ucRTUBuf 内容会被填充为发送的数据;
发送测试
断点设置再
BOOL
xMBPortSerialPutByte( CHAR ucByte )正常发送都会进去这个函数,刚开始作者配置的是发送中断,发现不会进这个中断,配置位发送空中断就正常了。
边栏推荐
- Soul submitted a listing application to the Hong Kong Stock Exchange and continued to develop the social metaverse track
- 通过这份高级Android面试题,我斩获了15家互联网公司offer
- TS(TypeScript) 变量类型
- ResultSet遍历结果集的原数据
- 多线程-线程调度
- 1321_一份BootLoader xmodem部分的协议分析
- LeetCode Daily 2 Questions 01: Flip word prefixes (both 1200 questions)
- 【树上差分】CF 1076E. Vasya and a Tree
- TS (TypeScript) Binary Operators + , - , * , / , % , << , >> , >>> , & , | , ^ Analysis
- 软件工程-大学体育馆管理系统类图
猜你喜欢

【无标题】

基于Flask框架实现Mock Server

eslint和prettier实现代码格式化

HTTP中的强缓存与协商缓存

Software Engineering - University Gymnasium Management System Class Diagram

软件工程-大学体育馆管理系统用例图

Compose Advanced Challenge is here!Live Preview|August 7th at 19:30 pm face to face with GDE instructor

LeetCode每日两题02:回文数 (均1200道)

在香橙派OrangePi 3 LTS开发板上安装向日葵远程控制软件的操作方法

在线问题反馈模块实战(二十):实现文件批量导出到zip压缩包中功能
随机推荐
[机缘参悟-61]:《兵者,诡道也》-3-孙子兵法解读-敌战计
MySQL high-performance construction 1: Centos7+Mysql7.5 builds master-slave replication
3个云渲染平台的价格体系,哪个最合适(四)
【hiflow】-- 腾讯云场景连接器实现定时查询疫情信息
5、nerf++(pytorch)
【回顾】基于树莓派下的4G模块(EC200U-CN)实现远程控制短信的收发
图解 JVM 内存结构
Configuring Smart Link Load Balancing on Huawei Devices
数据治理:走出数据孤岛
华为设备配置Smart Link负载分担
为什么黑客不敢攻击微信钱包?
缓存算法有哪些分类呢?
LeetCode Daily 2 Questions 02: Number of Palindromes (1200 each)
读书笔记 如何阅读一本书
LeetCode每日两题02:最长回文子串 (均1200道)
【HCIP】BGP实验
esp32之arduino配置下载提速
快速查看Oracle数据库告警日志的存储位置
二次开发入门须知
浏览器如何清除缓存教程