你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F103RCT6的USART1不能接收多字节数据

[复制链接]
chh650319 提问时间:2019-8-23 18:17 /
用串口助手手动发送和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个字节的数据?
烦请指导,谢谢!
收藏 评论8 发布时间:2019-8-23 18:17

举报

8个回答
294479435@qq.co 回答时间:2019-8-29 14:55:36
调试看看你串口中断接收那儿数据是否收完了,程序不完整,看不出来太多问题,建议把串口接收中断函数贴出来吧,
hh_song 回答时间:2019-8-29 15:04:25
把串口优先级调到最高,把单片机主频调到最高,把串口堆栈改成环形堆栈。500ms都有错误帧,这个应该不至于,我觉得还是好好检查代码吧。
andrewsss 回答时间:2019-8-31 11:38:41
用个全局的数组在串口中断里接收
天臆弄人 回答时间:2019-8-31 11:38:41
新手吧,中口接收这样写不丢才怪,在中断接收,我都发过5M的文件给STM32照样一个接收不丢
哀歌与世无争 回答时间:2019-9-1 16:12:04
接收程序有问题吧,串口接收中断是来一个字节中断一次,所以每次进中断都要读接收到的字节,正点原子里也是先接收,再判断接收是否完成
Res =USART_ReceiveData(USART1);        //读取接收到的数据
                if((USART_RX_STA&0x8000)==0)//接收未完成
怎么你这是先判断再接收,这样就可能丢字节了
qazplm3218 回答时间:2019-9-1 17:44:16
应该是中断接收程序有问题!在中断里先用数组来接收所以数据,在进行判断数组里的数据
void USART3_IRQHandler(void)                       
{
        uint8_t temp=0;  
  
        if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
        {   
                USART_ClearITPendingBit(USART3,USART_IT_RXNE);                                                       
                temp = USART_ReceiveData(USART3);
          usart3_tabel_r[usart3_r_count]=temp;
STM1024 回答时间:2019-10-15 12:52:16
这么快的话,为什么不换DMA试试?
butterflyspring 回答时间:2019-11-5 17:29:16
串口可以查询,中断和DMA方式。官方都有相应的例程。建议先了解串口发送和接收的流程,包括中间设置了那么几个标志,则各种方式随便用都可以
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版