⑴ 单片机和仪器485通信的问题,分别供电的时候,485通信正常,使用同一个电源供电的时候,无法通信。
多半是干扰引起的,电源滤波、地线没走好都可能出这类问题,也可能你的485回路或者软件协议比较脆弱,容易被干扰。
建议第一步先 检查:RS485匹配电阻接了吗,例如接120欧
⑵ 单片机之间串口通信异常
产品测:9600,e,8,2, 单片机测:9600,N,8,1
这很明显两者的通信模式不同,当然就不能正常通信了,产品的通信模式是两位停止位,可单片机只能有一位停止位,那个校验位,对于单片机倒是可以做到,可停止位不好解决。产品的通信模式能不能设置,最好设置成1位停止位。
⑶ 单片机串口通信时而正常,时而不正常,硬件没问题,应该是时序问题,一般会有什么时序问题呢
问题原因可能是如下几个方面:
1、是否使用的是USB转串口的转换线?这种方式目前出问题太多了,系统正常运行状态下还好点,如果单片机设备频繁上下电问题就特别多,而且好像没有太好的解决方法。
2、通讯双方的协议是否不匹配?波特率不说了,还有比如是否都是1个起始位+8个数据位+1个停止位,二者应一致。
3、PC机一端问题。这种可能性不大,如果使用的是串口调试助手之类的软件就更不会有问题。
4、单片机一端软件可能有问题。而且问题出在接收时的可能性较大。具体的:
a、在软件流程中是否有对REN控制位修改的指令?如果有需要检查当REN=0时的相关语句。
b、应特别关注TI的清零操作。接收时RI有效后将数据读入内存、清RI标志,即可退出接收操作;而发送时【最后1个字节送入SBUF后,发送操作并未完成】,【必须等待这次发送完成后TI置位,然后清0】,才能根本上保证下次操作的正确性的情况。
c、如果串口收发未使用中断方式,需要检查主程序流程中是否有较长时间的延时程序,会不会造成数据接收遗漏的情况。以9600波特率为例,1个字节的发送或接收需要差不多1ms的时间,延时操作如果有超过1ms的就可能会造成数据丢失。
d、其它中断处理软件是否会长时间占用CPU资源,使得串口数据的接收出现数据丢失情况?串口如果采用了中断,其中断级别是否是高级别?
5、设备运行环境。是否有外部强电磁干扰?比如电机的起停。处理方法就说不清了。
⑷ 51单片机与PC进行串口通信,可以烧写,但是不能通信
首先,别乱试MAX232周围的那四个电容,根据MAX232的数据说明书里规定这四个电容必须是1uF的,并且最好是带极性的电解电容(耐压至少16V以上)。
既然能进行ISP在线编程烧写程序进去,那说明硬件是没有问题。你的程序在开发板上实现过,但能确认开发板的串口电路和你现在用的ISP电路是一样的么?
还有,计算机上的串口接收软件也没设置好也收不到数据的!
如果怀疑是串口硬件电路的问题,可以做这样的实验,就是让把单片机拔出来,MAX232留着,PC上的串口发送数据,然后把原本接单片机TXD和RXD的两个数据引脚短路,看看PC上的接收软件是否能接收到直接发送并返回的数据,如果能成功,则证明串口硬件电路没问题。
串口通讯有的时候要求很多,你先实验一下能不能单片机只给PC发送数据。然后再试把数据从PC发下去,让单片机返回数据。
还有问题可以发网络HI的信息给我。
⑸ 单片机与串口通信无法正常工作...
2个原因,一个软件问题,一个硬件问题。
首先在确保硬件没有问题的情况下,检查是不是软件问题。
一般的大多是软件问题。
⑹ 两个单片机UART通信不能正常进行
单片机串口可以在115.2k可靠传输,不要怀疑波特率,如果你的波特率计算真的没有错误的话;
从你的条件不会退出能通信的结果,肯定有的细节你没有说明,不知是什么;
如果真的如你所说,只能让一片单片机不断的发,示波器监视发送是否正常;串口助手给另一片单片机发数据,看接受是否正常,一步步来。
如果还没问题就是看你的线是否过长,是否有干扰等
⑺ 我要用HLK-RM04模块控制单片机部分,现在要写一个控制程序,谁懂,求教
这么简单的程序,自己就可以焊板子了。。做个核心板+max232cpe加个串口就行。
⑻ 52单片机与GSM模块通过rxd与txd连接中,出现单片机与GSM之间不能正常通信,望大神赐教
GSM跟52分开测试
GSM通过PC调试 这个主要是检测GSM模块的好坏而已
52通过PC调试主要是查看52通过串口发送的AT指令是否是正确格式
⑼ 单片机与电脑不能通讯
你恰好把RXD和TXD管脚焊反了。对于PC机:
2脚为RXD接收232端子,应该连接到芯片的14脚。芯片的11脚连接到单片机的TXD管脚。
3脚为TXD发送232端子,应该连接到芯片的13脚。芯片的12脚连接到单片机的RXD管脚。
⑽ 请问大神,我用STM32与RM04进行串口通信的时候,为什么STM32都接收不到数据
void halRfSendPacket(INT8U *txBuffer, INT8U size)
{
halSpiStrobe(CCxxx0_SFTX);//清空缓冲区
halSpiWriteReg(CCxxx0_TXFIFO, size);//这个必须要
halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, size); //写入要发送的数据
halSpiStrobe(CCxxx0_STX); //进入发送模式发送数据
// Wait for GDO0 to be set -> sync transmitted
while (!(GDO0));
// Wait for GDO0 to be cleared -> end of packet
while (GDO0);
//halSpiStrobe(CCxxx0_SFTX);
}