搜索
查看: 2682|回复: 10

[求助] stm32发rs485信号错乱

[复制链接]

该用户从未签到

1

主题

4

帖子

0

蝴蝶豆

新手上路

最后登录
2018-11-16
发表于 2018-11-15 21:13:54 | 显示全部楼层 |阅读模式
按网上教程,用cubeMx写了一个通过rs485发送16进制数据的程序
  1.         HAL_GPIO_WritePin(GPIOD, GPIO_PIN_7, GPIO_PIN_SET);
  2.         uint16_t TxByte = 0x01 ;
  3.         HAL_UART_Transmit(&huart2, (uint8_t *)&TxByte, 1, 0xFF);
  4.                
  5.                     TxByte =0x06 ;
  6.         HAL_UART_Transmit(&huart2, (uint8_t *)&TxByte, 1, 0xFF);
  7.                
  8.                     TxByte =0x00 ;
  9.         HAL_UART_Transmit(&huart2, (uint8_t *)&TxByte, 1, 0xFF);

  10.                     TxByte = 0x42  ;
  11.         HAL_UART_Transmit(&huart2, (uint8_t *)&TxByte, 1, 0xFF);
  12.                                 
  13.                                 TxByte = 0x03 ;
  14.         HAL_UART_Transmit(&huart2, (uint8_t *)&TxByte, 1, 0xFF);
  15.                                 
  16.                                 TxByte = 0xE8 ;
  17.         HAL_UART_Transmit(&huart2, (uint8_t *)&TxByte, 1, 0xFF);
  18.                                 
  19.                                 TxByte = 0x29 ;
  20.         HAL_UART_Transmit(&huart2, (uint8_t *)&TxByte, 1, 0xFF);
  21.                                 
  22.                                 TxByte = 0x60 ;
  23.         HAL_UART_Transmit(&huart2, (uint8_t *)&TxByte, 1, 0xFF);

  24.         HAL_Delay(1000);
复制代码
然后烧录上之后理论上发送的是01 06 00 42 03 E8 29 60 ,结果用串口助手试了下收到的是81 06 00 42 03 E8 A9 60

请问是怎么回事……
回复

使用道具 举报

该用户从未签到

9

主题

744

帖子

287

蝴蝶豆

论坛元老

最后登录
2021-3-27
发表于 2018-11-16 09:02:23 | 显示全部楼层
格式没设置对,串口助手的格式一定要和单片机的一致。
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2017-12-6 11:47
  • 签到天数: 1 天

    [LV.1]初来乍到

    49

    主题

    3724

    帖子

    429

    蝴蝶豆

    论坛元老

    最后登录
    2021-8-7
    发表于 2018-11-16 09:28:57 | 显示全部楼层
    如果用IO来设置发送使能的话,设置了发送使能后,一定要加一点点延时,否则第一个数可能不对。
    但是你的第1个和第7个数据都不对,都是最高位有问题,串口发送时是低在前高在后,最高位后面是校验位和停止位。
    上位机的校验位、停止位,一定要与MCU的一致,波特率也要一致。拿不准的话,用示波器看一下波特率是多少

    TIM图片20181226105958_01.jpg
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    4

    帖子

    0

    蝴蝶豆

    新手上路

    最后登录
    2018-11-16
     楼主| 发表于 2018-11-16 10:10:11 | 显示全部楼层
    す疯Ⅱ恒す 发表于 2018-11-16 09:02
    格式没设置对,串口助手的格式一定要和单片机的一致。

    这是程序  

      huart2.Instance = USART2;
      huart2.Init.BaudRate = 115200;
      huart2.Init.WordLength = UART_WORDLENGTH_8B;
      huart2.Init.StopBits = UART_STOPBITS_1;
      huart2.Init.Parity = UART_PARITY_EVEN;
      huart2.Init.Mode = UART_MODE_TX_RX;
      huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
      huart2.Init.OverSampling = UART_OVERSAMPLING_16;

    这是串口助手

    串口助手

    串口助手



    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    4

    帖子

    0

    蝴蝶豆

    新手上路

    最后登录
    2018-11-16
     楼主| 发表于 2018-11-16 10:10:41 | 显示全部楼层
    toofree 发表于 2018-11-16 09:28
    如果用IO来设置发送使能的话,设置了发送使能后,一定要加一点点延时,否则第一个数可能不对。
    但是你的第1 ...

    麻烦您也看下楼上那个……我不知道哪里设置错了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5

    主题

    325

    帖子

    39

    蝴蝶豆

    高级会员

    最后登录
    2020-5-30
    发表于 2018-11-16 10:29:01 | 显示全部楼层
    波特率降低一下试试。说不定是线路问题。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9

    主题

    744

    帖子

    287

    蝴蝶豆

    论坛元老

    最后登录
    2021-3-27
    发表于 2018-11-16 10:35:06 | 显示全部楼层
    coldfear 发表于 2018-11-16 10:10
    这是程序  

      huart2.Instance = USART2;

    huart2.Init.WordLength = UART_WORDLENGTH_8B;


    这句改成
    huart2.Init.WordLength = UART_WORDLENGTH_9B;
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    4

    帖子

    0

    蝴蝶豆

    新手上路

    最后登录
    2018-11-16
     楼主| 发表于 2018-11-16 10:54:16 | 显示全部楼层
    す疯Ⅱ恒す 发表于 2018-11-16 10:35
    huart2.Init.WordLength = UART_WORDLENGTH_8B;

    解决了!多谢!但是是为什么呢?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    100

    主题

    1255

    帖子

    191

    蝴蝶豆

    论坛元老

    最后登录
    2024-1-26
    发表于 2018-11-16 11:01:19 | 显示全部楼层
    你程序上使用奇偶校验了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9

    主题

    744

    帖子

    287

    蝴蝶豆

    论坛元老

    最后登录
    2021-3-27
    发表于 2018-11-16 17:41:59 | 显示全部楼层
    coldfear 发表于 2018-11-16 10:54
    解决了!多谢!但是是为什么呢?

    使用偶检验要多一位,但是上位机不是这样算的。最好你仔细看看规格书,上面说的很详细。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

    GMT+8, 2024-4-20 19:21 , Processed in 0.219250 second(s), 46 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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