例程下载: 资料包括程序、相关说明资料以及软件使用截图 
百度云盘: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****/
 
 
复制代码  
 |