硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2699|回复: 2
收起左侧

[STM32H7] stm32h7 使用libmodbus错误码-1 求问

[复制链接]

1

主题

1

回帖

4

积分

新手上路

积分
4
发表于 2021-8-5 16:33:29 | 显示全部楼层 |阅读模式
板子是银杏的stm32h750 icore4t,前面移植freemodbus,不是报错误3就是错误4,所以来用Libmodbus,但是还是有问题
因为我没找到RS485的控制引脚,所以就用的232,主程序代码如下:
  1. //#define RS485_RE GET_PIN(G, 8)
  2. //#define HAVE_DECL_TIOCM_RTS 0

  3. static void test_thread(void *param)
  4. {
  5.    //#define RS485_RE GET_PIN(G, 8)
  6. //#define HAVE_DECL_TIOCM_RTS 0

  7. static void test_thread(void *param)
  8. {
  9.     uint16_t tab_reg[64] = {0};
  10.     modbus_t *ctx = RT_NULL;
  11.     ctx = modbus_new_rtu("/dev/uart1", 115200, 'N', 8, 1);
  12.     modbus_rtu_set_serial_mode(ctx, MODBUS_RTU_RS232);
  13.    // modbus_rtu_set_rts(ctx, RS485_RE, MODBUS_RTU_RTS_UP);
  14.     modbus_set_slave(ctx, 1);
  15.     modbus_connect(ctx);
  16.     modbus_set_response_timeout(ctx, 0, 1000000);
  17.     int num = 0;
  18.     while (1)
  19.     {
  20.         memset(tab_reg, 0, 64 * 2);
  21.         int regs = modbus_read_registers(ctx, 0, 10, tab_reg);
  22.         printf("-------------------------------------------\n");
  23.         printf("[%4d][read num = %d]", num, regs);
  24.         num++;
  25.         int i;
  26.         for (i = 0; i < 10; i++)
  27.         {
  28.             printf("<%#x>", tab_reg[i]);
  29.         }
  30.         printf("\n");
  31.         printf("-------------------------------------------\n");
  32.         rt_thread_mdelay(5000);
  33.     }
  34.     //7-关闭modbus端口
  35.     modbus_close(ctx);

  36.     //8-释放modbus资源
  37.     modbus_free(ctx);
  38. }

  39. int rtu_test_init(void)
  40. {
  41.    // rt_pin_mode(RS485_RE, PIN_MODE_OUTPUT);
  42.     rt_thread_t tid;
  43.     tid = rt_thread_create("test",
  44.                            test_thread, RT_NULL,
  45.                            2048,
  46.                            12, 10);
  47.     if (tid != RT_NULL)
  48.         rt_thread_startup(tid);
  49.     return RT_EOK;
  50. }
  51. INIT_APP_EXPORT(rtu_test_init);
  52. }
复制代码
串口设置如下:
  1. if(huart->Instance==USART1)
  2.   {
  3.   /* USER CODE BEGIN USART1_MspInit 0 */

  4.   /* USER CODE END USART1_MspInit 0 */
  5.   /** Initializes the peripherals clock
  6.   */
  7.     PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USART1;
  8.     PeriphClkInitStruct.Usart16ClockSelection = RCC_USART16CLKSOURCE_D2PCLK2;
  9.     if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
  10.     {
  11.       Error_Handler();
  12.     }

  13.     /* Peripheral clock enable */
  14.     __HAL_RCC_USART1_CLK_ENABLE();

  15.     __HAL_RCC_GPIOA_CLK_ENABLE();
  16.     __HAL_RCC_GPIOB_CLK_ENABLE();
  17.     /**USART1 GPIO Configuration
  18.     PA9     ------> USART1_TX
  19.     PB15     ------> USART1_RX
  20.     */
  21.     GPIO_InitStruct.Pin = GPIO_PIN_9;
  22.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  23.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  24.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  25.     GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
  26.     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  27.     GPIO_InitStruct.Pin = GPIO_PIN_15;
  28.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  29.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  30.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  31.     GPIO_InitStruct.Alternate = GPIO_AF4_USART1;
  32.     HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  33.   /* USER CODE BEGIN USART1_MspInit 1 */

  34.   /* USER CODE END USART1_MspInit 1 */
  35.   }
复制代码
现在的情况就是slave模拟软件这边窗口只看到了RX,没有TX,在freemodbus测试的时候,RXTX都是有的,不知道libmodbus为什么没有
测试图如下:


回复

使用道具 举报

1

主题

1

回帖

4

积分

新手上路

积分
4
 楼主| 发表于 2021-8-5 17:12:58 | 显示全部楼层
问题解决了,是因为libmodbus这个程序默认开机自启,然后我又手动启动了一遍,它没有防止重复启动的代码,所以导致两组代码一起发,就出错了
回复

使用道具 举报

3

主题

48

回帖

57

积分

初级会员

积分
57
发表于 2023-11-27 09:52:40 | 显示全部楼层
您好,请问您是怎样移植libmodbus到单片机的,我目前也在搞,能分享一下吗?能看下您最简单的工程源码就更好了!十分感谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-9 13:22 , Processed in 0.149083 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表