https://github.com/armink/FreeModbus_Slave-Master-RTT-STM32

http://www.360doc.com/content/14/0906/09/17350204_407389804.shtml

http://blog.csdn.net/dldw8816/article/details/50595154

https://www.cnblogs.com/skl374199080/archive/2013/12/16/3476153.html

http://blog.csdn.net/arminkztl/article/details/11738395

从机流程

/*first:
->从机等待串口数据包
->接收到数据包触发串口中断-
->xMBRTUReceiveFSM()函数
-->不断接收数据但不保存,不断重置定时器-
->直到数据接收完后产生3.5T定时器中断,代表接收完成
->中断函数调用xMBRTUTimerT35Expired(void)函数
->根据状态RXINIT调用xMBPortEventPost(EV_READY)事件函数加入序列
->关闭定时器,设为RXIDLE,返回主程序。
->主程序poll根据EVREADY空操作取出事件,返回
second:
->再次接收到串口数据包
->进入中断函数xMBRTUReceiveFSM()
->根据状态RXIDLE数据存入RTUBUF,状态设为RXRCV,启动定时器
->收到下个数据包,存储数据并重置定时器,不断重复直到接收完数据包
->收完后产生3.5T定时中断xMBRTUTimerT35Expired()
->根据RXRCV发送事件EV_FRAME_RECEIVED,关闭定时器设为RXIDLE,返回主程序poll
->根据FRAMERECEIVED调用eMBRTUReceive()处理收到数据的存储指针,然后发送事件EV_EXECUTE
->然后返回主程序,继续执行poll,
->根据EVEXECUTE,提取功能码,并判断功能码确定功能处理函数指针,并调用该函数
处理:
->调用功能函数解析数据包(长度/地址、寄存器数量)
->执行功能函数的回调函数,提取数据。返回poll
->执行eMBRTUSend()
->TXXMIT,使能串口发送功能
->发送中断,调用xMBRTUTransmitFSM( )函数,输出完毕事件设为EV_FRAME_SENT,禁用串口发送,状态改为TXIDLE------à返回poll,根据FRAMESENT取出事件清空队列,一个循环完成
*/

MODBUS移植的参考文章的更多相关文章

  1. 深度学习环境配置:Ubuntu16.04安装GTX1080Ti+CUDA9.0+cuDNN7.0完整安装教程(多链接多参考文章)

    本来就对Linux不熟悉,经过几天惨痛的教训,参考了不知道多少篇文章,终于把环境装好了,每篇文章或多或少都有一些用,但没有一篇完整的能解决我安装过程碰到的问题,所以决定还是自己写一篇我安装过程的教程, ...

  2. 深度学习环境配置:Ubuntu16.04下安装GTX1080Ti+CUDA9.0+cuDNN7.0完整安装教程(多链接多参考文章)

    本来就对Linux不熟悉,经过几天惨痛的教训,参考了不知道多少篇文章,终于把环境装好了,每篇文章或多或少都有一些用,但没有一篇完整的能解决我安装过程碰到的问题,所以决定还是自己写一篇我安装过程的教程, ...

  3. k8s安装部署过程个人总结及参考文章

    以下是本人安装k8s过程 一.单机配置 1. 环境准备 主机名 IP 配置 master1 192.168.1.181 1C 4G 关闭所有节点的seliux以及firewalld sed -i 's ...

  4. docker系列 参考文章

    Docker 系列一(概念原理和安装) Docker 系列二(操作镜像) Docker 系列三(容器管理) 持续更新... ubuntu 安装docker 参考文章 :(https://blog.cs ...

  5. Tarjan算法分解强连通分量(附详细参考文章)

    Tarjan算法分解强连通分量 算法思路: 算法通过dfs遍历整个连通分量,并在遍历过程中给每个点打上两个记号:一个是时间戳,即首次访问到节点i的时刻,另一个是节点u的某一个祖先被访问的最早时刻. 时 ...

  6. weex参考文章

    1官网:https://weex.apache.org/zh/guide/introduction.html 2.weexui   https://alibaba.github.io/weex-ui/ ...

  7. Windows7下移植Qt4.8.4项目到QT5.2上时遇到的一些问题(包括三篇参考文章)

    文章来源:http://blog.csdn.net/ccf19881030/article/details/18220447 问题一:错误:C1083: 无法打开包括文件:“QApplication” ...

  8. Linux下搭建PHP环境的参考文章小记

    之前也在Linux上安装过两次,但是当我再次需要安装时,还是很多不懂的地方,于是记下此篇,以防下次再费经心思找到不合适的文章,瞎折腾. 通过参考这几篇文章,成功的安装好了自己的PHP(LNMP)环境. ...

  9. .net core 微服务参考文章

    网址: https://www.cnblogs.com/edisonchou/p/9124985.html Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.Consul基础介绍 Co ...

随机推荐

  1. js里=、== 和===有什么区别?

    说明:该文章是转载后进行修改完善的,望大家有收获. =是赋值运算符,==是关系运算符; ===是全等运算符. ”==”与”===”是不同的,一个是判断值是否相等,一个是判断值及类型是否完全相等.第一个 ...

  2. Android View中滚动相关

    方法   scrollTo: (内容的左上角)达到某个地点 scrollBy: 根据当前位置,再移动多少 属性:   mScrollX, 以下是文档解释   The offset, in pixels ...

  3. Yii的缓存机制之页面缓存

    页面缓存是不能通过片段缓存来实现的,因为布局和内容不能同时缓存.只能通过过滤器来生成缓存. 实现方法: 在控制器里使用过滤器来实现 function filters (){ return array( ...

  4. Springboot框架中request.getInputStream()获取不到上传的文件流

    Springboot框架中用下面的代码,使用request.getInputStream()获取不到上传的文件流 @PostMapping("/upload_img") publi ...

  5. (QACNN)自然语言处理:智能问答 IBM 保险QA QACNN 实现笔记

    follow: https://github.com/white127/insuranceQA-cnn-lstm http://www.52nlp.cn/qa%E9%97%AE%E7%AD%94%E7 ...

  6. 【转载】rageagainstthecage.c源码以及注释

    如下: //头文件包含 #include <stdio.h> #include <sys/types.h> #include <sys/time.h> #inclu ...

  7. <十三>UML核心视图静态视图之业务用例图

    一:uml的核心视图 --->如果说UML是一门语言,上一章学习的参与者等元素是uml的基本词汇,那么视图就是语法.uml通过视图将基元素组织在一起,形成有意义的句子. --->uml可视 ...

  8. eclipse Tomcat 启动报错

    如果之前启动都是正常的,更新完后端代码后启动Tomcat报错,又没有错误的日志提示. 尝试先把Tomcat里面的项目删掉,然后点击Tomcat右键,Clean清除缓存,再把项目Add: 重新启动!

  9. web集群时代

    随着业务的不断增加,我们的单台服务器承受不住需求,那么我们就需要对此进行伸缩,有两种维度,一种是纵向的也就是增大该台服务器的硬件,再者就是加新服务器与之前的机器组成集群对外提供服务,我们都知道前者是有 ...

  10. web.xml报错Cannot resolve class 'StrutsPrepareAndExecuteFilter' (idea创建SSH项目)

    原因: xwork-core.jar包已经合并到struts2-core.jar下,并且点开jar包,发现没有 org.apache.struts2.dispatcher.ng.filter.Stru ...