打印
[应用相关]

串口接收数据不正确

[复制链接]
3285|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Thorald|  楼主 | 2017-4-13 20:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用自己写的上位机程序读传感器,收到的协议是正确的(7个字节 01 0D 3个数据字节 2个校验字节),但用stm32的串口3读出来的却是4个字节(与协议完全不对),没有发生溢出错误,使stm32与上位机通讯正常,这是什么原因呢??
void USART3_IRQHandler(void)
{               
if(USART_GetITStatus(USART3,USART_IT_RXNE)==SET)                  
        {
                Delay2(1);
                USART_ClearITPendingBit(USART3,USART_IT_RXNE);
                U3_ReceivedBuf[U3_flag++] = USART_ReceiveData(USART3);                          
        }
        
        if(USART_GetFlagStatus(USART3,USART_FLAG_ORE)!=RESET)
    {
        USART_ClearFlag(USART3,USART_FLAG_ORE);    //?SR
                WriteString(165,80,"overflow",Red);        
        }         
}
沙发
yiyigirl2014| | 2017-4-13 20:42 | 只看该作者
也就是说你的那个传感器接口是232串口,直接通过串口助手读取正确,是吧?
但是接单片机上不正确了,那肯定是单片机哪儿没有设置好,比如波特率,数据的组成。。

使用特权

评论回复
板凳
Bjorn| | 2017-4-13 20:52 | 只看该作者
stm32与上位机通讯正常,这说明stm32的串口是正常的,这就要找找你的传感器的串口的问题了,或者是波特率不正确。

使用特权

评论回复
地板
Rollo| | 2017-4-13 21:17 | 只看该作者

中断里面用延时不太好吧

使用特权

评论回复
5
Rangar| | 2017-4-13 21:26 | 只看该作者
一帧数据发送完毕可以立即关中断。

使用特权

评论回复
6
Stannis| | 2017-4-13 21:39 | 只看该作者
波特率是一个可能原因,还有一个可能原因就是数据线的问题,我以前也遇到过读数不正确的情况,怎么检查都没问题,结果无意间换了根线好了

使用特权

评论回复
7
Brand2| | 2017-4-13 21:52 | 只看该作者
一般来说是要在硬件板的串口加上拉电阻,这样保持数据稳定,另外用示波器把信号读出来看一下,找出是发多了,还是接收多了,一步一步分析问题。

使用特权

评论回复
8
zhuomuniao110| | 2017-4-13 21:52 | 只看该作者
对呀,进入中断后你延时个毛线

使用特权

评论回复
9
yangxf1217| | 2017-4-14 14:38 | 只看该作者
Rollo 发表于 2017-4-13 21:17
中断里面用延时不太好吧

加延时确实有问题,看延时长短不同,受影响不同。我也是被这个整过。

使用特权

评论回复
10
Ketose| | 2017-4-14 14:52 | 只看该作者
中断里加延时,你真行!
一般这种情况很大一部分原因是波特率设置不对。

使用特权

评论回复
11
yiilanying| | 2017-4-14 15:38 | 只看该作者
U3_ReceivedBuf[U3_flag++] = USART_ReceiveData(USART3);
你的程序好像没给完全,这个U3_ReceivedBuf[U3_flag++]是怎么设置的,发送的数据格式是什么

使用特权

评论回复
12
selongli| | 2017-4-14 22:45 | 只看该作者
是不是第一个字节是0x00?

使用特权

评论回复
13
selongli| | 2017-4-14 22:47 | 只看该作者
建议单步调试试试串口。

使用特权

评论回复
14
Prry| | 2017-4-15 11:13 | 只看该作者
1、中断用延时是大忌!
2、中断调试发送函数是大忌,万一发送不成功或者其他问题,将中断阻塞了,整个应用就是死掉了!
3、从学习时养成好习惯,注重基础,不要急着看结果。

使用特权

评论回复
15
Lbsonggz| | 2017-4-15 12:28 | 只看该作者
这函数写的,中断中判断状态位用while,C语言基础

使用特权

评论回复
16
yiy| | 2017-4-16 18:48 | 只看该作者
都好几天了,搞定了吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

183

主题

849

帖子

1

粉丝