FreeModbus For stm32:点击下载源码

1、测试环境Keil MDK 4.7a  stm32f103c8, PB12为输出线圈,
   可以通过Modbus Poll来控制线圈的输出状态。

2、通过ModbusProt.h配置硬件、数据缓冲区大小和功能码配置

#define UART_USE                                 2       //串口号

#define TIM_USE                                  3       //定时器号

#define CPU_CLK                                  8       //8MHz             

#define REG_INPUT_START                          0x0000  //输入寄存器起始地址

#define REG_INPUT_NREGS                          6       //输入寄存器数量

#define REG_HOLDING_START                        0x0000  //保持寄存器起始地址

#define REG_HOLDING_NREGS                        6       //保持寄存器数量

#define REG_COILS_START                          0x0000  //线圈起始地址

#define REG_COILS_SIZE                           8       //线圈数量(小于0x07B0)

#define REG_DISCRETE_START                       0x0000  //离散开关起始地址

#define REG_DISCRETE_SIZE                        8       //离散开关数量(小于0x07D0)

#define MB_FUNC_HANDLERS_MAX                    ( 4  )   //使用的功能码数量

#define MB_FUNC_OTHER_REP_SLAVEID_BUF           (  4 )   

#define MB_FUNC_OTHER_REP_SLAVEID_ENABLED       (  0 )   //报告从设备功能

#define MB_FUNC_READ_INPUT_ENABLED              (  0 )   //读输入寄存器功能

#define MB_FUNC_READ_HOLDING_ENABLED            (  1 )   //读保持寄存器功能

#define MB_FUNC_WRITE_HOLDING_ENABLED           (  0 )   //写操持寄存存功能

#define MB_FUNC_WRITE_MULTIPLE_HOLDING_ENABLED  (  1 )   //写多个操持寄存存功能

#define MB_FUNC_READ_COILS_ENABLED              (  0 )   //读线圈

#define MB_FUNC_WRITE_COIL_ENABLED              (  1 )   //写线圈

#define MB_FUNC_WRITE_MULTIPLE_COILS_ENABLED    (  0 )   //写多个线圈

#define MB_FUNC_READ_DISCRETE_INPUTS_ENABLED    (  0 )   //读离散输入

#define MB_FUNC_READWRITE_HOLDING_ENABLED       (  0 )   //读写多个寄存器

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

3、移植要点为Port.c和Port.h

   定时器操作在stm32平台下基本不用改

   a、定时器初始化;   xMBPortTimersInit()

   b、开定时器及中断; vMBPortTimersEnable()

   c、关定时器及中断; vMBPortTimersDisable()

   d、定时器溢出中断服务程序;TIME_IQR_HANDLER()

   串口操作:

   a、串初始化;   xMBPortSerialInit()

   b、串口发送中断、接收中断; UART_IQR_HANDLER()

   c、串口收发控制; vMBPortSerialEnable()

   开关量操作 CPU硬件寄存器类型指针定义,用于定义IO输入和输出,

   注意在此定义的IO必须初始化为输入或输出。

   typedef volatile uint32_t * CPURegistertype;

    //线圈状态, 存储格式:&IO输出口寄存器, 引脚号

    MBCoilType MBCoils[REG_COILS_SIZE] = {

        &(GPIOB->ODR), 12, //PB12做为输出线圈

        &(GPIOB->ODR), 12,

        &(GPIOB->ODR), 12,

        &(GPIOB->ODR), 12,

        &(GPIOB->ODR), 12,

        &(GPIOB->ODR), 12,

        &(GPIOB->ODR), 12,

        &(GPIOB->ODR), 12,

    };

    //离散开关输入状态, 存储格式:&IO输出口寄存器, 引脚号

    MBDiscreteType MBDiscretes[REG_DISCRETE_SIZE] = {

        &(GPIOB->ODR), 12, //PB12做为离散输入

        &(GPIOB->ODR), 12,

        &(GPIOB->ODR), 12,

        &(GPIOB->ODR), 12,

        &(GPIOB->ODR), 12,

        &(GPIOB->ODR), 12,

        &(GPIOB->ODR), 12,

        &(GPIOB->ODR), 12,

    };

 

         Mail: worldsing@foxmail.com

          QQ: 237539049

FreeModbus for stm32(Keil工程)——精简Modbus slave协议【worlsing笔记】的更多相关文章

  1. 移植FreeModbus+ModbusMaster+STM32至RT-Thread(初步)

    一.项目描述 目前操作系统在嵌入式软件行业非常流行,在工控组网方面,以后可能会经常使用到Modbus主机+操作系统.Modbus从机+操作系统甚至Modbus主机+Modbus从机+操作系统.但是操作 ...

  2. 移植FreeModbus+ModbusMaster+STM32至RT-Thread(3、4阶段)

    一.简介及进展 经过一个多月的努力,目前项目开发已进入最后阶段.虽然比预期时间有些延迟,但也收获不少,边工作边开源的效率确实还有待提高. 简单说下目前的进展吧 1.目前项目已经在Github中开源,大 ...

  3. Port of FreeModbus to STM32

    /********************************************************************************* * Port of FreeMod ...

  4. GitHub使用整理——关于上传Keil工程一些注意的点

    git上传警告warning: LF will be replaced by CRLF 在上传keil工程时,会遇到warning: LF will be replaced by CRLF警告: wa ...

  5. 我的Modbus Slave/Client开发历程(Rtu/AscII/Tcp)

    我的Modbus Slave/Client开发历程(Rtu/AscII/Tcp) 分类: [自动化]2007-07-19 10:04 34038人阅读 评论(38) 收藏 举报 vb嵌入式dostcp ...

  6. Keil工程文件的建立、设置与目标文件的获得

    单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为 CPU 可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工 汇编的方法了.机器汇编是通过汇编软件 ...

  7. Modbus测试工具 :Modbus Poll,Modbus Slave

    源:http://blog.sina.com.cn/s/blog_49352090010138e7.html Modbus测试工具 :Modbus Poll,Modbus Slave

  8. .gitignore文件配置:keil工程文件类型【转】

    本文转载自:https://blog.csdn.net/u010160335/article/details/80043965 .gitignore源文件下载链接:git管理keil工程.gitign ...

  9. Modbus测试工具ModbusPoll与Modbus Slave使用方法

    感谢https://blog.csdn.net/byxdaz/article/details/77979114原创,由于CSDN经常调整,故再编辑收藏,并修改了部分BUG. 一.介绍 Modbus P ...

随机推荐

  1. ZOJ1586——QS Network(最小生成树)

    QS Network DescriptionIn the planet w-503 of galaxy cgb, there is a kind of intelligent creature nam ...

  2. HTTP代理协议 HTTP/1.1的CONNECT方法

    我们平时使用HTTP协议无非就是GET.POST这些方法,但是HTTP的内容远不止那些.今天就来说说HTTP代理使用的CONNECT.这个不是在网页开发上用的,如果没兴趣就跳过吧. APACHE只是作 ...

  3. R语言学习笔记:生成序列(Genenrating Sequences)

    R提供了多种生成不同类型序列的方法.如: > x<-1:20 > x [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 1 ...

  4. Compiler options do not specify -mv64+, but configuration is for C64x+

     2013-06-20 10:02:47 错误报告: "pin_connect_cfg.s62", ERROR!   at line 365: [ ***** USER ERROR ...

  5. C#中配置文件的使用

    1. 向项目添加app.config文件: 右击项目名称,选择“添加”→“添加新建项”,在出现的“添加新项”对话框中,选择“添加应用程序配置文件”:如果项目以前没有配置文件,则默认的文件名称为“app ...

  6. 【HDOJ】4366 Successor

    基本思路是将树形结构转换为线性结构.然后,所求即为一个区间内大于abi的最大的loy指向的ID.将结点按照abi降序排序,注意abi可能相等.然后,使用线段树单点更新,区间查询可解. /* 4366 ...

  7. 三个入侵的必备小工具-lcx.exe、nc.exe、sc.exe

      lcx.exe的使用方法 以前抓肉鸡都是通过1433弱口令,然后.. 但是发现很多服务器开了1433,3389,但是终端是连不上的,因为服务器本身是在内网,只对外开放了1433端口,幸好有lcx. ...

  8. BZOJ2893: 征服王

    题解: 裸的上下界最小流是有问题的.因为在添加了附加源之后求出来的流,因为s,t以及其它点地位都是平等的.如果有一个流经过了s和t,那么总可以认为这个流是从s出发到t的满足题意的流. 既然可能存在s到 ...

  9. poj2752 水题

    又2b了一次…… var s:ansistring; ans,pre:..] of longint; i,k,tot:longint; procedure main; begin pre[]:=;k: ...

  10. vijos p1071新年趣事之打牌

    描述 过年的时候,大人们最喜欢的活动,就是打牌了.xiaomengxian不会打牌,只好坐在一边看着. 这天,正当一群人打牌打得起劲的时候,突然有人喊道:“这副牌少了几张!”众人一数,果然是少了.于是 ...