OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 13211|回复: 8

stm32串口查询模式接收,发送的最后一个字节接收时却成了第一个字节???

[复制链接]

13

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
128
金钱
128
注册时间
2011-8-16
在线时间
6 小时
发表于 2012-12-24 14:32:08 | 显示全部楼层 |阅读模式

用查询模式做串口的接收,发现一个很奇怪的问题,发送的最后一个字节接收时却成了第一个字节,不知道是什么原因。
不在到有没遇到类似问题的?这是怎么回事呢?
如发送:39 38 37 36 35 34
接收到的却是:34 39 38 37 36 35
如下:
int main(void)
 { 
 u8 buf[20]={0x31,0x32};
 uart_init(9600);
while(1)
{
   do
     {
          if(USART_GetFlagStatus(USART1,USART_IT_RXNE)==SET)
         {
             buf[i++]=USART_ReceiveData(USART1);
            while(USART_GetFlagStatus(USART1,USART_IT_RXNE)==RESET);
         }
     }while(i!=6);     
    if((buf[0]!=0)&&(buf[5]!=0))
    {
       Uart1_SendBytes(buf,6);
       buf[0]=0;
       buf[1]=0;
       buf[2]=0;
       buf[3]=0;
       buf[4]=0;
       buf[5]=0;
       i=0;

    }
}
}

测试如下:上位机发送十六进制:39 38 37 36 35 34
串口收到:34 39 38 37 36 35

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-12-24 17:27:58 | 显示全部楼层
Uart1_SendBytes(buf,6);
这个函数咋样的?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

13

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
128
金钱
128
注册时间
2011-8-16
在线时间
6 小时
 楼主| 发表于 2012-12-25 13:37:24 | 显示全部楼层
是用的上位机串口助手软件发送的。应该跟发送没关系吧?
回复 支持 反对

使用道具 举报

13

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
128
金钱
128
注册时间
2011-8-16
在线时间
6 小时
 楼主| 发表于 2012-12-25 13:38:00 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
是用的上位机串口助手软件十六进制发送的。应该跟发送没关系吧?
回复 支持 反对

使用道具 举报

13

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
128
金钱
128
注册时间
2011-8-16
在线时间
6 小时
 楼主| 发表于 2012-12-25 13:38:36 | 显示全部楼层
void Uart1_SendBytes(u8* buf , u8 len)
{
    u8 i;
for(i=0;i<len;i++)
    {
USART_SendData(USART1,*buf++);
    while( USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET );//等待发送数据完成
    }
}>
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-12-25 17:00:35 | 显示全部楼层
改为:
void Uart1_SendBytes(u8* buf , u8 len) 

    u8 i; 
for(i=0;i<len;i++) 
    { 
while( USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET );//等待发送数据完成 
USART_SendData(USART1,*buf++); 
    
    } 
}>
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2012-4-15
在线时间
0 小时
发表于 2012-12-26 20:48:39 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
换汤不换药啊 。 
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-12-26 21:19:47 | 显示全部楼层
回复【7楼】gongkansb:
---------------------------------
这个可以解决第一个字节丢失/乱码的问题。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
180
金钱
180
注册时间
2012-9-6
在线时间
26 小时
发表于 2012-12-31 09:35:44 | 显示全部楼层
用中断方式做试试  接受最好还是用中断做吧  这样软件容错能力会好很多
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-20 04:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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