STM32串口通信的问题

本人刚学系STM32,现在用两个串口(串口1和串口2)做一个小测试,如下:
有两个个串口线链接电脑,电脑用两个个串口助手窗口分别给两个串口发数据;
两个串口都开了接收中断,当串口1接到一个字节后在中断里发给串口2(这样可以在对应的串口助手窗口可以看到串口1收到的数据);串口2也一样这么做。
问题:当电脑串口助手发给串口1 的字符长度为13时“1234567890123”,第一次串口2对应的窗口看到的数据正常,但是第二次串口2对应的窗口看到的数据异常,而且串口2对应串口会一直收到重复数据。两个串口都是一样的问题,为什么会这样??

第1个回答  2014-06-10
数据高低位倒置可能硬件电路接反了
截个硬件图看看或者调换下发送与接收
还有波特率应该是对的吧,PC和开发板要一样追问

发送123456789012 正常



发生送1234567890123 就出现就这样子的问题了

STM32 串口通信乱码问题总结
首先,外部晶振频率的设置不匹配是导致乱码的常见原因之一。在标准库中默认晶振频率为25MHz,而运行速度为168MHz,为了实现8MHz的运行速度,我修改了工程的“HSE_VALUE“宏定义,将25000000改为8000000。这样设置后,输出的中断字符串从乱码转变为了清晰的"我在学习stm32"。其次,串口波特率设置不一致也会...

STM32串口接收不定长数据(接收中断+超时判断)
串口通信中,数据长度不固定可能造成接收中断频繁,这时常见的处理策略包括:固定格式:通过约定数据包的起始和结束标志,例如 AA BB 开头和 BB AA 结尾,接收端根据这些标志判断数据包的完整。接收中断+超时判断:利用串口接收中断,结合定时器监控,当在一个预设时间间隔内未接收到新字符,认为一帧数据接...

stm32串口为什么总返回数据
波特率设置不匹配。stm32串口通信需要设置相同的波特率,发送方和接收方的波特率不匹配,数据会接收错误,造成串口返回数据。

stm32串口接收数据一直为全为01
一直全为01的原因可能是:1、串口接线错误:可能与串口接线方式有关,需要检查是否接线正确,波特率设置是否匹配,信号线是否出现短路或虚接等问题。2、时钟设置错误:串口通讯需要精确的时钟控制,如果时钟设置错误,则会导致接收数据错误。这种情况下需要检查系统时钟源、时钟分频系数等设置是否正确。3、数据...

STM32之串口DMA接收不定长数据
在STM32或其他单片机的应用中,串口通讯是常见的功能,其中如何高效接收数据是开发者常需关注的问题。特别是当接收数据长度不确定时,更需要采取有效措施确保数据接收的高效与准确性。同学A提出的观点,即在串口中断发生时读取数据,这种方法在接收确定长度的数据时确实可行,但频繁的中断打断主程序运行,对...

STM32串口接收不定长数据(空闲中断+DMA)
STM32串口接收不定长数据的处理策略通常依赖于空闲中断和DMA。串口通信中,数据传输的长度是不确定的,这就要求我们设计一种机制来确保数据完整接收。以下是三种常见的处理方法:1. 固定格式:通过约定数据包的起始和结束标志,如AA BB和BB AA,接收端在接收到这些标志后,就可以确定数据包的边界,从而...

stm32串口用阻塞影响大吗
根据情况而定,使用阻塞方式进行串口通信可能会对STM32系统的整体性能产生一定的影响,具体影响的大小取决于应用程序的需求和实现方式。阻塞方式是指在进行串口通信时,发送或接收数据的操作会阻塞CPU,直到操作完成才会继续执行后续指令。这种方式可能导致CPU的资源浪费和效率下降,特别是在需要频繁进行数据交互...

STM32串口UART接收不定长数据最佳方案
在STM32单片机的开发中,UART串口通信是一种常见的通信手段。遇到接收不定长数据的情况时,如何高效处理成为关键。本文将分享一种通过结合DMA中断和串口空闲中断的优化方案,以减少CPU资源的消耗。在使用DMA进行数据接收时,DMA以循环方式填充缓存,当缓存满时(如100字节)会触发半满(HT)或全满(TC)...

STM32串口中断会偶发性收不到,是什么情况啊,两块主板之间通信?
您好,对于你的遇到的问题,我很高兴能为你提供帮助,我之前也遇到过哟,以下是我的个人看法,希望能帮助到你,若有错误,还望见谅!。你确定你使用的是交叉串口线,一般这种情况是引脚接线不正确引起的,我以前也出现过,后来认为的把串口线的Rx和Tx互换后就可以了非常感谢您的耐心观看,如有帮助请...

使用stm32usb转串口为什么传输不了数据
接触不良。USB转串口使用的通常是CH340芯片(1.5元),很少使用PL2303芯片(20元)。而CH340所产生的传输能力不够强。在没接MAX232之前只能进行很短距离的通信。解决方法可以用MAX232芯片加强传输能力(10M无压力)。让电平在MAX232中先由CMOS电平转成TTL电平再转CMOS电平。

相似回答