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. 详细阐述ping命令中请求超时与无法访问的区别

    1.Request timed out 这是大家经常碰到的提示信息,很多文章中说这是对方机器置了过滤ICMP数据包,从上面工作过程来看,这是不完全 正确的,至少有下几种情况. (1) 对方已关机,或者 ...

  2. Vue父子组件间的通信

    父组件通过 props 向下传递数据给子组件,子组件通过 events 向上给父组件发送消息. 父组件: <div> <div style="background:#344 ...

  3. c++之函数值传递和引用传递解析----关键在于理解函数return的实现机制(内存分配)

    函数调用过程解析 func里的a存储在调用fun函数时开辟的栈空间里,这块栈只在调用func时对func可用,调用结束后返回的a,其实是暂存在寄存器里的(一般情况下是eax),而返回到main里时,m ...

  4. Cube 数据 与 DW 数据对应不上

    场景: 时间维度表:字段(日期) 收费事实表:字段(金额,收费日期,就诊编号) 管理:使用维度表的 日期字段与事实表的 收费日期字段 进行关联,建立多维度数据集. 问题:     DW :   9月份 ...

  5. c++中stl----map

    1 map的本质 (1)关联式容器,键值对应 (2)增加和删除节点对迭代器的影响很小. (3)对于迭代器来说不可以修改键值,只能修改对应的实值. (4)map内部数据的祖居是自建一颗红黑树(或者说是平 ...

  6. 【HBase】HBase笔记:HBase的Region机制

    HBase 的机制里包含了许多优秀的算法,如 Region 定位.Region 分配.Region Server的上线和下线.Master 的上线和下线.在谈到这些之前,先把 HBase 的基本架构里 ...

  7. 3-1Java程序的执行流程

    3-1Java程序的执行流程 用记事本写一个简单的程序 存到:E:\java路径下 class HelloImooc{    public static void main(String[] agrg ...

  8. FileWriter 写文件

    FileWriter fw = new FileWriter("C://Users//pc//Desktop//aaa.txt",true); fw.write("201 ...

  9. 《剑指offer》面试题13—O(1)时间删除链表结点

    题目:给定单向链表的头指针和某结点指针,实现函数在O(1)时间内删除指定节点. 思路:由于没有要删除结点(j结点)的前一个结点(i结点)指针,通常想法是从头开始遍历找到指定结点的前一个结点(i结点), ...

  10. GIL 已经被杀死了么?

    GIL 已经被杀死了么? 本文原创并首发于公众号[Python猫],未经授权,请勿转载. 原文地址:https://mp.weixin.qq.com/s/8KvQemz0SWq2hw-2aBPv2Q ...