qq_39801835 2020-05-21 17:50 采纳率: 100%
浏览 304
已采纳

想用stm32开发板的485发送modbus,输出不对,怎么解决,为什么

我是根据硬石开发板的YSF4_HAL_Modbus_002. 基于RS232&RS485的Modbus主机例程改的程序

因为要发送图片说明
我就直接改变bsp_mb_host.c文件中

void MB_ReadHoldingReg_03H()
{
    uint16_t TxCount = 0;
    uint16_t crc = 0;
    Tx_Buf[TxCount++] = 0x01;           /* 从站地址 */
    Tx_Buf[TxCount++] = 0x03;             /* 功能码 */   
    Tx_Buf[TxCount++] = 0x00;     /* 寄存器地址 高字节 */
    Tx_Buf[TxCount++] = 0x00;             /* 寄存器地址 低字节 */
    Tx_Buf[TxCount++] = 0x00;     /* 寄存器(16bits)个数 高字节 */
    Tx_Buf[TxCount++] = 0x02;  

    crc = MB_CRC16((uint8_t*)&Tx_Buf,TxCount);

    Tx_Buf[TxCount++] = crc>>8;           /* crc 高字节 */
  Tx_Buf[TxCount++] = crc;            /* crc 低字节 */

  UART_Tx((uint8_t *)&Tx_Buf,TxCount);
}

的程序的值,希望能通过485串口发送出0x01,0x03,0x00,0x00,0x00,0x02,0xc4,0x0b
但是我将485通过转接口直接接到电脑上通过助手查看数值时发现发送的数据不对。
图片说明
主函数

int main(void)
{
  /* 复位所有外设,初始化Flash接口和系统滴答定时器 */
  HAL_Init();
  /* 配置系统时钟 */
  SystemClock_Config();
  /* 初始化串口并配置串口中断优先级 */
  MX_DEBUG_USART_Init(); 
  /* 定时器初始化 */
  GENERAL_TIMx_Init();
  /* LED初始化 */
 // LED_GPIO_Init();
  /* 使能定时器中断 */
  __HAL_TIM_ENABLE_IT(&htimx,TIM_IT_CC1);
  __HAL_TIM_ENABLE_IT(&htimx,TIM_IT_UPDATE);
  /* 设置字符间超时时间1.5个字符的时间 */
  __HAL_TIM_SET_COMPARE(&htimx,TIM_CHANNEL_1,(uint16_t)OVERTIME_15CHAR);
  /* 设置帧间超时时间3.5个字符的时间 */
  __HAL_TIM_SET_AUTORELOAD(&htimx,(uint16_t)OVERTIME_35CHAR); // 设置帧内间隔时间

  Rx_MSG = MSG_IDLE;
  /* 无限循环 */
  while (1)
  {
 //   if(KEY4_StateRead()==KEY_DOWN)
  //  {
    //  Rx_MSG = MSG_IDLE;
      /* 读取reg_addr 的寄存器状态 */
      MB_ReadHoldingReg_03H();
      /* 等待从机响应 */
      WaitTimeOut(); //等待时间大概为200ms
  //  }

  }
}
  • 写回答

1条回答 默认 最新

报告相同问题?

悬赏问题

  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序
  • ¥15 onvif+openssl,vs2022编译openssl64