| 例程下载: 资料包括程序、相关说明资料以及软件使用截图
 
 百度云盘:https://pan.baidu.com/s/1slN8rIt 密码:u6m1 360云盘:https://yunpan.cn/OcPiRp3wEcA92u密码 cfb6(硬石YS-F1Pro开发板HAL库例程持续更新\6. 软件设计之Modbus(HAL库版本)\YSF1_HAL_freemodbus_001. freemodbus移植) /**
 ******************************************************************************
 *                           硬石YS-F1Pro开发板例程功能说明
 *
 *  例程名称: YSF1_HAL_freemodbus_001. freemodbus移植
 *
 ******************************************************************************
 * 说明:
 * 本例程配套硬石stm32开发板YS-F1Pro使用。
 *
 * 淘宝:
 * 论坛:硬石电子社区
 * 版权归硬石嵌入式开发团队所有,请勿商用。
 ******************************************************************************
 */
 
 【1】例程简介
 它是一个针对嵌入式应用的一个免费(自由)的通用MODBUS协议的移植。Modbus是一个工业
 制造环境中应用的一个通用协议。Modbus通信协议栈包括两层:Modbus应用层协议,该层定义
 了数据模式和功能;另外一层是网络层。
 
 【2】跳线帽情况
 ******* 为保证例程正常运行,必须插入以下跳线帽 **********
 丝印编号     IO端口      目标功能引脚        出厂默认设置
 JP1        PA10        TXD(CH340G)          已接入
 JP2        PA9         RXD(CH340G)          已接入
 CN6        PB10        TX(SP485E)           未接入
 CN6        PB11        RX(SP485E)           未接入
 
 【3】操作及现象
 使用两根导线连接两个开发板上的CN7接收端子,对应连接“A -- A”和“B -- B”,使用开发板配
 套的MINI USB线连接到开发板标示“调试串口”字样的MIMI USB接口(需要安装驱动),在电脑端打
 开串口调试助手工具,设置参数为115200 8-N-1。下载完程序之后,在串口调试助手窗口可接收到信
 息。
 /******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/
 
 main.c文件内容
 
 
/**  ******************************************************************************  * 文件名程: main.c   * 作    者: 硬石嵌入式开发团队  * 版    本: V1.0  * 编写日期: 2015-10-04  * 功    能: RS485双机通信--从机设备实现  ******************************************************************************  * 说明:  * 本例程配套硬石stm32开发板YS-F1Pro使用。  *   * 淘宝:  * 论坛:http://www.ing10bbs.com  * 版权归硬石嵌入式开发团队所有,请勿商用。  ******************************************************************************  *//* 包含头文件 ----------------------------------------------------------------*/#include "stm32f1xx_hal.h"#include "usart/bsp_debug_usart.h"#include "RS485/bsp_usartx_RS485.h"#include "mb.h"#include "mbport.h"/* 私有类型定义 --------------------------------------------------------------*//* 私有宏定义 ----------------------------------------------------------------*/#define REG_INPUT_START 0#define REG_INPUT_NREGS 4/* 私有变量 ------------------------------------------------------------------*/static USHORT   usRegInputStart = REG_INPUT_START;static USHORT   usRegInputBuf[REG_INPUT_NREGS];/**  * 函数功能: 主函数.  * 输入参数: 无  * 返 回 值: 无  * 说    明: 无  */int main(void){     /* 复位所有外设,初始化Flash接口和系统滴答定时器 */  HAL_Init();  /* 配置系统时钟 */  SystemClock_Config();  /* 初始化串口并配置串口中断优先级 */  MX_DEBUG_USART_Init();  printf("freemodbus 移植测试\n");  RS485_USARTx_Init();    eMBInit(MB_RTU, 0x01, 3, 9600, MB_PAR_NONE);        /* Enable the Modbus Protocol Stack. */        eMBEnable();  /* 无限循环 */  while (1)  {        (void)eMBPoll();  }}eMBErrorCode eMBRegInputCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs ){  eMBErrorCode    eStatus = MB_ENOERR;  int             iRegIndex;    printf("eMBRegInputCB\n");//        用作例子        usRegInputBuf[0] = 0x11;        usRegInputBuf[1] = 0x22;        usRegInputBuf[2] = 0x33;        usRegInputBuf[3] = 0x44;//        例子结束          if((usAddress>=REG_INPUT_START)&&(usAddress+usNRegs<=REG_INPUT_START+REG_INPUT_NREGS))  {    iRegIndex=(int)(usAddress-usRegInputStart);    while( usNRegs > 0 )    {      *pucRegBuffer++ = (unsigned char)(usRegInputBuf[iRegIndex]>>8);      *pucRegBuffer++ = (unsigned char)(usRegInputBuf[iRegIndex]&0xFF);      iRegIndex++;      usNRegs--;    }  }  else  {    eStatus = MB_ENOREG;  }  return eStatus;}eMBErrorCode eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs,eMBRegisterMode eMode ){  printf("eMBRegHoldingCB\n");  return MB_ENOREG;}eMBErrorCode eMBRegCoilsCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNCoils,eMBRegisterMode eMode ){  printf("eMBRegCoilsCB\n");  return MB_ENOREG;}eMBErrorCode eMBRegDiscreteCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNDiscrete ){  printf("eMBRegDiscreteCB\n");  return MB_ENOREG;}/******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/
复制代码 |