FreeModbus for stm32(Keil工程)——精简Modbus slave协议【worlsing笔记】
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笔记】的更多相关文章
- 移植FreeModbus+ModbusMaster+STM32至RT-Thread(初步)
一.项目描述 目前操作系统在嵌入式软件行业非常流行,在工控组网方面,以后可能会经常使用到Modbus主机+操作系统.Modbus从机+操作系统甚至Modbus主机+Modbus从机+操作系统.但是操作 ...
- 移植FreeModbus+ModbusMaster+STM32至RT-Thread(3、4阶段)
一.简介及进展 经过一个多月的努力,目前项目开发已进入最后阶段.虽然比预期时间有些延迟,但也收获不少,边工作边开源的效率确实还有待提高. 简单说下目前的进展吧 1.目前项目已经在Github中开源,大 ...
- Port of FreeModbus to STM32
/********************************************************************************* * Port of FreeMod ...
- GitHub使用整理——关于上传Keil工程一些注意的点
git上传警告warning: LF will be replaced by CRLF 在上传keil工程时,会遇到warning: LF will be replaced by CRLF警告: wa ...
- 我的Modbus Slave/Client开发历程(Rtu/AscII/Tcp)
我的Modbus Slave/Client开发历程(Rtu/AscII/Tcp) 分类: [自动化]2007-07-19 10:04 34038人阅读 评论(38) 收藏 举报 vb嵌入式dostcp ...
- Keil工程文件的建立、设置与目标文件的获得
单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为 CPU 可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工 汇编的方法了.机器汇编是通过汇编软件 ...
- Modbus测试工具 :Modbus Poll,Modbus Slave
源:http://blog.sina.com.cn/s/blog_49352090010138e7.html Modbus测试工具 :Modbus Poll,Modbus Slave
- .gitignore文件配置:keil工程文件类型【转】
本文转载自:https://blog.csdn.net/u010160335/article/details/80043965 .gitignore源文件下载链接:git管理keil工程.gitign ...
- Modbus测试工具ModbusPoll与Modbus Slave使用方法
感谢https://blog.csdn.net/byxdaz/article/details/77979114原创,由于CSDN经常调整,故再编辑收藏,并修改了部分BUG. 一.介绍 Modbus P ...
随机推荐
- UR #13 Yist
第一次打UR,打了一个半小时就弃疗了QAQ 这是我唯一一道考试的时候做出来的题目,其他两道连暴力都懒得写了 很容易发现对于每个要删除的点 我们找到左边第一个比他小的不用删除的点,右边第一个比他小的不用 ...
- 基于SMB协议的共享文件读写
一.SMB协议 SMB协议是基于TCP-NETBIOS下的,一般端口使用为139,445. 服务器信息块(SMB)协议是一种IBM协议,用于在计算机间共享文件.打印机.串口等.SMB 协议可以用在因特 ...
- CCS使用TIPS
2013-06-20 09:37:49 CCS使用TIPS: 代码编写: CCS中通过Using CodeSense方便写代码,跟VC助手类似,具体使用方法在ccs的help中搜索using visu ...
- mysql rr 查询出现的事务情况
select * from INFORMATION_SCHEMA.INNODB_TRX\G The INNODB_TRX table contains information about every ...
- JavaScript DOM高级程序设计 2.4-try{}catch{}--我要坚持到底!
先看一段有异常的语句 var sound = 'Roar!'; function myOrneryBeast() { this.style.color='green';//window没有style属 ...
- Java汉字排序(1)排序前要了解的知识(数组和list的排序接口)
对于包含汉字的字符串来说,排序的方式主要有两种:一种是拼音,一种是笔画. 本文就讲述如何实现按拼音排序的比较器(Comparator). 作者:Jeff 发表于:2007年12月21日 11:27 最 ...
- 【HDOJ】4317 Unfair Nim
基本的状态压缩,想明白怎么dp还是挺简单的.显然对n个数字进行状态压缩,dp[i][j]表示第i位状态j表示的位向高位产生了进位. /* 4317 */ #include <iostream&g ...
- How to install GSL on linux(ubuntu,centos,redhat)
Test: ftp://ftp.gnu.org/gnu/gsl/gsl-1.15.tar.gz success. ftp://ftp.gnu.org/gnu/gsl/gsl-1.13.0.tar.g ...
- 测试darwin calendar 服务器
cd CalDAVTester README.txt中说的明白—— QUICKSTART Edit the serverinfo.xml file to run the test against yo ...
- 第一部分 Android MediaPlayer 概述
[IT168 技术文档]本文主要介绍的是Android中很重要也最为复杂的媒体播放器(MediaPlayer)部分的架构.对于Android这样一个完整又相对复杂的系统,一个MediaPlayer功能 ...