如果不是中文的话,可以按照下面方式进行检查
1、具体检查方法,将linux中的发送和接受进行短接(就是将发送和接受连起来),看看接受的数据是否相同。
这一步中,因为使用的是同一个串口,所以串口的设置一定是相同的。这样如果都收不正确,可以确定是linux串口驱动的问题。
2、详细设置linux串口的参数,包括波特率,校验,串口位数。将linux和单片机设置相同,看看接受数据是否相同
如果还是不相同。
3、在windows中使用串口调试助手设置同单片机串口相同的参数,查看接受数据是否正确。
如果不正确,说明是单片机串口参数设置的问题,或者是时钟频率的问题。
如果正确,说明一定是linux端的问题。
如果是linux端的问题,主要从两个方面解决,一个是参数设置,一个是信息读取。下面是测试方法。
4linux端查看一下代码设置。利用驱动接口,读出串口的参数,看看和你程序中设置的参数是否相同,如果不相同说明设置参数的代码没写对。
5如果参数设置是正确的,那么直接cat 驱动的位置,可以直接读出串口的数据,此时读取的数据应该是和发送端一样的,如若不一样。。。。那么基本就是linux时钟的问题导致的了。若linux是PC上的一般不会出现时钟设置错误,如果linux是嵌入式上的话,你看看时钟配置是否正确吧。当你发送一串字符串给单片机的时候,430刚接收到第一个字符于是开始进行回发固定数据给串口助手,可还没发送完毕(发送需要时间,而你尽然在接收中断里发送,这样接受中断就得不到及时响应),你第二个字符串又进来了,于是出错了。(第一件事还没干完,你第二件、第三件。。。全部紧接的来了,要你,你不疯?)这里的问题是你没搞明白整个流程,这个程序框架也不好。这种情况下,你需要建立一个缓存区(FIFO),中断的任务就是把接收到的数据扔到缓存,置标志位,并立马退出!在主程序里发送数据,这样就不会导致接收无法及时响应问题(这个跟蓄水池一样的道理)把显示函数写在串口接受数据的函数外面。用中断的方式写,用一个数组接受数据,接受数据时判断接受的数据是否是A,如果是A则停止继续接受,否则存入数组。接受完后跳出中断。主函数里写上显示数组的语句。因为可能是你整个显示函数占用的周期比较大,可能还没运行结束,RI又等于O,所以发生了错误。为啥要发送字符80 80 52 0c?是根据说明书所给的通信协议要求的吗?这种智能仪表,都有特定的通信协议,发什么代码,仪表返回什么数据,代表什么,都应该有说明的,仔细看一下通信协议就可以了。单片机是通过设置相关寄存器来设置波特率的。
你可以在串口中断里写段代码,收到某个命令,就重新设置寄存器,修改波特率。
你用的是什么单片机,去下载该单片机的芯片资料,里面会告诉你是哪个寄存器。或者你上Hi告诉我单片机型号,看看我是否用过,就可以直接告诉你怎么编程了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)