找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2734|回复: 4
收起左侧

stm32f103单片机串口连续发送多字节程序求分析问题

[复制链接]
ID:91471 发表于 2021-5-6 15:53 | 显示全部楼层 |阅读模式
stm32f103单片机做通信控制,发送的数据总是不对。抄了网上各种发送程序,禁止编译器优化等都试遍了。实在不知道错在哪里,请网友帮忙指教。比如说我要发送的数据:0x5a  0xa5  0x03  0x10  0x20  0x30  ;
上面0x5a  0xa5是帧头,0x03是后面要发送的数据量(这里是3个), 0x10  0x20  0x30  就是要发送的数据了。
下面的图片是我试着从发送一个字节到发送7个字节时收到了数据截图,好给大伙分析;
最先发送一个字节,是外围接了一个按钮,按一次发送一次。
图9.jpg

发送一个字节后串口助手接收到正确的数据
图10.jpg

从一次发送两个字节开始接收就不对了
图11.jpg

第一次按按钮,接收到的是0x5a。没错,第一次只能收到一个字节,按道理应该接收到0x5a  0xa5。从第二次开始接收到的数据时0xa5  0x5a,这是一次收到了两个字节但反了顺序。不知道程序错在哪里,求指点!
图12.jpg

后面是发送3个字节
图13.jpg

没让我失望,接收的还是2个字节。但从这里开始,接收到的都已经不是原来发送了的数据了。发送的0x5a  0xa5  0x03已经变成了0x5a  0x3f两个字节了。
图14.jpg

后面的我也懒得打字了,都是少了一个字节。0xa5  0x03 都变成了 0x3f。
图15.jpg

图16.jpg

图17.jpg

图18.jpg

图19.jpg

图20.jpg

图21.jpg

图22.jpg

请大神们帮我分析一下问题出在哪里了?

回复

使用道具 举报

ID:91471 发表于 2021-5-6 15:59 | 显示全部楼层
求一份可以一次正确发送多字节的程序范例,稍微改一下还能发送MODBUS协议的多字节程序。
回复

使用道具 举报

ID:538157 发表于 2021-5-6 19:29 | 显示全部楼层
恕我太菜看不出什么问题来,但是从你程序的大括号上看,我发现你的程序一直在初始化硬件,然后再发送,我建议你把硬件的初始化配置只执行一次,发送部分放在一个while(1)循环里,最好加一个按键条件判断发送,方便调试。最后,我把一个确定没有问题的函数给你,你应该也是标准库写的,你看看试一试。
/*****************  发送一个字节 **********************/
void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch)//选择哪一个串口,选择发送哪一个数据
{
        /* 发送一个字节数据到USART */
        USART_SendData(pUSARTx,ch);
               
        /* 等待发送数据寄存器为空 */
        while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);       
}

/****************** 发送指定长度的数组 ************************/
void Usart_SendArray( USART_TypeDef * pUSARTx, uint8_t *array, uint16_t num)//选择哪一个串口,数组名或者指针,数据长度即有几个发送的数据
{
  uint8_t i;
       
        for(i=0; i<num; i++)
  {
            /* 发送一个字节数据到USART */
            Usart_SendByte(pUSARTx,array[i]);       

  }
        /* 等待发送完成 */
        while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)==RESET);

}
modbus通信的部分,
回复

使用道具 举报

ID:889094 发表于 2021-5-6 20:21 | 显示全部楼层
51的过来学习一下,确定两边的波特率是一样的?
回复

使用道具 举报

ID:91471 发表于 2021-5-9 10:35 | 显示全部楼层
xu2509674896 发表于 2021-5-6 19:29
恕我太菜看不出什么问题来,但是从你程序的大括号上看,我发现你的程序一直在初始化硬件,然后再发送,我建 ...

谢谢!我现在只是想把功能实现,上面是在开关步进电机。现在外地出差还没试你说可以正常用的程序,我看了一下大概率是不正常的,因为那段程序我已经试过了。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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