你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】基于STM32F103标准库、rt-thread操作系统完美移植freemodbus主机程序

[复制链接]
STMCU小助手 发布时间:2022-4-21 21:00
一、说明
1.移植的开发环境是keil5。
2.基于rt-thread操作系统,也可以使用ucos和freeRTOS操作系统。
3.本人可有偿代移植其他操作系统,具体费用主页加我QQ联系。
4.页面底部有rt-thread操作系统移植成功的工程链接,大家可以参考。
二、移植步骤
由于移植过程比较繁琐,就不过多说明了,大家可以下载工程研究一下就行

三、特殊说明
1. 读取输入寄存器(功能04)
使用函数:
  1. /**
  2. * Modbus master input register callback function.
  3. *
  4. * @param pucRegBuffer input register buffer
  5. * @param usAddress input register address
  6. * @param usNRegs input register number
  7. *
  8. * @return result
  9. */
  10. eMBErrorCode eMBMasterRegInputCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs )
复制代码

读取值存入变量:

  1. USHORT   usMRegInBuf[MB_MASTER_TOTAL_SLAVE_NUM][M_REG_INPUT_NREGS];
复制代码

2. 读取线圈(功能01)
使用函数:

  1. /**
  2. * Modbus master coils callback function.
  3. *
  4. * @param pucRegBuffer coils buffer
  5. * @param usAddress coils address
  6. * @param usNCoils coils number
  7. * @param eMode read or write
  8. *
  9. * @return result
  10. */
  11. eMBErrorCode eMBMasterRegCoilsCB(UCHAR * pucRegBuffer, USHORT usAddress,
  12.         USHORT usNCoils, eMBRegisterMode eMode)
复制代码

读取值存入变量:

  1. ucMCoilBuf[MB_MASTER_TOTAL_SLAVE_NUM][M_COIL_NCOILS/8+1];
复制代码

3.读取保持寄存器(功能03)
使用函数:

  1. /**
  2. * Modbus master holding register callback function.
  3. *
  4. * @param pucRegBuffer holding register buffer
  5. * @param usAddress holding register address
  6. * @param usNRegs holding register number
  7. * @param eMode read or write
  8. *
  9. * @return result
  10. */
  11. eMBErrorCode eMBMasterRegHoldingCB(UCHAR * pucRegBuffer, USHORT usAddress,
  12.         USHORT usNRegs, eMBRegisterMode eMode)
复制代码

读取值存入变量:

  1. USHORT   usMRegHoldBuf[MB_MASTER_TOTAL_SLAVE_NUM][M_REG_HOLDING_NREGS];
复制代码

四、相关宏定义的设置
在 user_mb_app_m.c文件中,对离散量接收缓冲器 ucMDiscInBuf、线圈接收缓冲器 ucMCoilBuf、输入寄存器接收缓冲器 usMRegInBuf、保持寄存器接收缓冲器 usMRegHoldBuf的大小进行了定义。定义的缓冲区大小取决于对于下列宏的定义:
mbconfig.h 从机数量 MB_MASTER_TOTAL_SLAVE_NUM
user_mb_app.h 中:
#define RT_M_DISCRETE_INPUT_START 0 //离散量起始地址
#define RT_M_DISCRETE_INPUT_NDISCRETES 16 //离散量数量
#define RT_M_COIL_START 0 //线圈起始地址
#define RT_M_COIL_NCOILS 64 //线圈数量
#define RT_M_REG_INPUT_START 0 //输入寄存器起始地址
#define RT_M_REG_INPUT_NREGS 100 //输入寄存器数量
#define RT_M_REG_HOLDING_START 0 //保持寄存器起始地址
#define RT_M_REG_HOLDING_NREGS 100 //保持寄存器数量



收藏 评论0 发布时间:2022-4-21 21:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版