STM32
直播中

贾埃罗

8年用户 1802经验值
私信 关注
[问答]

STM32F103RCT6的USART1不能接收多字节数据是什么原因导致的?

用串口助手手动发送和1秒一次的定时发送时,STM32F103RCT6能完整地接收到15个字节的数据。
用串口助循环发送时,与延时有关。500毫秒延时,STM32F103RCT6能接收到12个字节的数据。5毫秒延时,STM32F103RCT6只能接收到2个字节的数据。
用实际上位机发送时,STM32F103RCT6能接收到最后1个字节的数据。
实际上位机是这样发送的:
for(int j=0;j<16;j++)
  {
        mLogMotorNet.SendData(buf[j]);
  }


STM32F103RCT6是这样接收的:
for(i=0;i<16;i++)
  {
    j=i+1;
    if(USART_RX_STA==j) a=USART_ReceiveData(USART1);//
  }
串口是USART1,程序模板是使用正点原子的。USART配置、初始化和中断服务函数都没变动(照抄正点原子的)。
上位机是很早以前开发的,主板和软件系统也是公司自行设计的。上位机发送的速度很快,一瞬间就发送了(眼睛看不出其循环发送过程)。这种情况,STM32F103RCT6怎样才能完整地接收到15个字节的数据?
烦请指导,谢谢!

回帖(2)

李阳

2024-4-17 15:18:49
调试看看你串口中断接收那儿数据是否收完了,程序不完整,看不出来太多问题,建议把串口接收中断函数贴出来吧
举报

刘静

2024-4-17 15:19:01
接收程序有问题吧,串口接收中断是来一个字节中断一次,所以每次进中断都要读接收到的字节,正点原子里也是先接收,再判断接收是否完成
Res =USART_ReceiveData(USART1);        //读取接收到的数据
                if((USART_RX_STA 0x8000)==0)//接收未完成
怎么你这是先判断再接收,这样就可能丢字节了
举报

更多回帖

×
20
完善资料,
赚取积分