加上之后就好了,这是为什么?大哥们帮我解决一下下!谢啦谢啦!
18 个解决方案
#1
一般不需要,只是在切换或启动晶振后需要一下,你这个不知道原因
#2
在发送后需要加上一个延迟,因为通信都是需要消耗时间的。延迟后可以等待通信的完成。
#3
需要将缓冲区里面的数据移位到输出口 否则读出的是上次的数据
#4
需要将缓冲区里面的数据移位到输出口 否则读出的是上次的数据
#5
一般的串口发送字节函数 都会有一个发送完毕等待的过程。例如:MSP430的就是是
while (!(IFG2 & UCA0TXIFG)) ;楼主还是根据自己MCU型号,找相关例程比对一下吧。
while (!(IFG2 & UCA0TXIFG)) ;楼主还是根据自己MCU型号,找相关例程比对一下吧。
#6
一般不需要,只是在切换或启动晶振后需要一下
#7
不需要。
#8
++
我理解错LZ的意思了
#9
++
从没发现lz 的情况,用的什么串口?
#10
单片机处理数据的速度太快,最好加一点delay,保证通信正常
#11
应该有特殊的寄存器,用while判断一下晶振是否稳定。
稳定之后在发数据。
稳定之后在发数据。
#12
加上之后就好了,这是为什么?大哥们帮我解决一下下!谢啦谢啦!
感觉这个可能是该芯片的串口有两级缓冲的原因
第一级缓冲是供单片机读写的
第二级是用于通信的。
在第二级缓冲完成通信,串口会根据第一级缓冲是不是空来选择产生的中断
如果,通信完成,缓冲为空,会产生通信完成中断
如果通信完成,缓冲不为空,会把第一级缓冲中的数据送入第二级,进行通信,同时产生的是缓冲为空的中断
LZ可能是都用缓冲为空中断进行处理,其实缓冲为空的时候,通信才刚刚开始,如果这个时候恢复了总线上的状态(如485中的收和发切换)就会造成通信错误,最后一个字节丢失
所以在应用上,通常要对最后一个字节等待的中断标志进行更换
感觉这个可能是该芯片的串口有两级缓冲的原因
第一级缓冲是供单片机读写的
第二级是用于通信的。
在第二级缓冲完成通信,串口会根据第一级缓冲是不是空来选择产生的中断
如果,通信完成,缓冲为空,会产生通信完成中断
如果通信完成,缓冲不为空,会把第一级缓冲中的数据送入第二级,进行通信,同时产生的是缓冲为空的中断
LZ可能是都用缓冲为空中断进行处理,其实缓冲为空的时候,通信才刚刚开始,如果这个时候恢复了总线上的状态(如485中的收和发切换)就会造成通信错误,最后一个字节丢失
所以在应用上,通常要对最后一个字节等待的中断标志进行更换
#13
感觉是程序的BUG吧,好好看看程序!
#14
不需要
#15
我以前也遇到过,串口初始化之前,也就是单片机刚开始执行代码时,需要延时以后,再初始化UART,才能正确收发数据
也没找问题到底出在哪,可能是晶振吧,不确定
也没找问题到底出在哪,可能是晶振吧,不确定
#16
你是不是刚一上电就去初始呀,
#17
恩,貌似是晶振的问题,换了一个晶振就好了。谢啦
#18
你在串口初始化前是不是有做时钟源调整?如果是的话最好做一定的延迟用来等待振荡器稳定。
#1
一般不需要,只是在切换或启动晶振后需要一下,你这个不知道原因
#2
在发送后需要加上一个延迟,因为通信都是需要消耗时间的。延迟后可以等待通信的完成。
#3
需要将缓冲区里面的数据移位到输出口 否则读出的是上次的数据
#4
需要将缓冲区里面的数据移位到输出口 否则读出的是上次的数据
#5
一般的串口发送字节函数 都会有一个发送完毕等待的过程。例如:MSP430的就是是
while (!(IFG2 & UCA0TXIFG)) ;楼主还是根据自己MCU型号,找相关例程比对一下吧。
while (!(IFG2 & UCA0TXIFG)) ;楼主还是根据自己MCU型号,找相关例程比对一下吧。
#6
一般不需要,只是在切换或启动晶振后需要一下
#7
不需要。
#8
++
我理解错LZ的意思了
#9
++
从没发现lz 的情况,用的什么串口?
#10
单片机处理数据的速度太快,最好加一点delay,保证通信正常
#11
应该有特殊的寄存器,用while判断一下晶振是否稳定。
稳定之后在发数据。
稳定之后在发数据。
#12
加上之后就好了,这是为什么?大哥们帮我解决一下下!谢啦谢啦!
感觉这个可能是该芯片的串口有两级缓冲的原因
第一级缓冲是供单片机读写的
第二级是用于通信的。
在第二级缓冲完成通信,串口会根据第一级缓冲是不是空来选择产生的中断
如果,通信完成,缓冲为空,会产生通信完成中断
如果通信完成,缓冲不为空,会把第一级缓冲中的数据送入第二级,进行通信,同时产生的是缓冲为空的中断
LZ可能是都用缓冲为空中断进行处理,其实缓冲为空的时候,通信才刚刚开始,如果这个时候恢复了总线上的状态(如485中的收和发切换)就会造成通信错误,最后一个字节丢失
所以在应用上,通常要对最后一个字节等待的中断标志进行更换
感觉这个可能是该芯片的串口有两级缓冲的原因
第一级缓冲是供单片机读写的
第二级是用于通信的。
在第二级缓冲完成通信,串口会根据第一级缓冲是不是空来选择产生的中断
如果,通信完成,缓冲为空,会产生通信完成中断
如果通信完成,缓冲不为空,会把第一级缓冲中的数据送入第二级,进行通信,同时产生的是缓冲为空的中断
LZ可能是都用缓冲为空中断进行处理,其实缓冲为空的时候,通信才刚刚开始,如果这个时候恢复了总线上的状态(如485中的收和发切换)就会造成通信错误,最后一个字节丢失
所以在应用上,通常要对最后一个字节等待的中断标志进行更换
#13
感觉是程序的BUG吧,好好看看程序!
#14
不需要
#15
我以前也遇到过,串口初始化之前,也就是单片机刚开始执行代码时,需要延时以后,再初始化UART,才能正确收发数据
也没找问题到底出在哪,可能是晶振吧,不确定
也没找问题到底出在哪,可能是晶振吧,不确定
#16
你是不是刚一上电就去初始呀,
#17
恩,貌似是晶振的问题,换了一个晶振就好了。谢啦
#18
你在串口初始化前是不是有做时钟源调整?如果是的话最好做一定的延迟用来等待振荡器稳定。