1、设置TxD为推挽式输出,一定要配置和TxD和RxD引脚。
在不同的MCU环境下,配置的过程可能不同,但有一点是确定的,就是TxD一定要配置成输出模式,RxD配置成输入模式,并允许卡拉电阻。在78F0376D中的配置代码如下:
TxD6_PM=0; //output mode for TxD6
TxD6=1; //set TxD6 output to high level
RxD6_PM=1; //input mode for RxD6
2、在对串口进行配置的时候,一定要仔细的阅读手册,严格按照手册的顺序来做,不要太相信Demo代码。
在读手册的时候,一定要仔细查看那些和普通的MCU不一样、有细小改变的地方,一般情况下,MCU会有多个UART口,读手册的时候就要仔细的分析一下它们之间的不同,往往这种区别很小,但很重要,如果没有认识到或不注意的话,在调试的时候可能会绕很大的路子。在78F0376D中的串口配置顺序为:
<1> 设置 CKSR6 寄存器 → 选择基准频率
<2> 设置BRGC6 寄存器 → 设置通信波特率
<3> 设置ASIM6 的0 ~ 4 位 (ISRM6、SL6、CL6、PS60、PS61) → 设置数据帧
<4> 设置ASICL6 的第0 和1 位 (TXDLV6, DIR6) → LSB及数据反向选择
<5> 设置ASIM6 的第 7 位 (POWER6) = 1 → 上电
<6> 设置ASIM6 的第 6 位 (TXE6) = 1。 → 允许发送
设置ASIM6 的第5 位 (RXE6) = 1。 → 允许接收
<7> 将数据写入发送缓冲寄存器 6 (TXB6)。 → 开始发送数据
在上面的所有的寄存器配置中,要根据自己的情况来配置,其中有的步骤可以跳过,但一定要确认自己配置正确。许多Demo代码往往是针对一个系列产品,其中可能会有不同的地方,所以在参考Demo代码的时候,如果工作不了的话,可以根据手册来进行仔细的检查。我在调试的时候,就是因为没有配置第4步中的ASICL6寄存器,保留了系统默认设置,从而导致数据反向的。
3、如果数据能够通信,但有误差的话,一般是波特率、数据位长度、校验位、LSB或DSB,数据反向等问题,可以多次通信来观察一下。
如果数据可以通信,并且通信的位数没有问题,那么问题最可能的是波特率,试试修改波特率,如果数据大部分是FF或FE的话,说明波特率太高,反之为00的话说明太低。如果可以排除波特率的话,问题一般是出在数据位上,看看是不是数据位的长度、校验位配置、LSB或DSB、数据是否反向等。
4、在测试通信数据的时候,可以采用0x55、0xAA、0x5A、0xA5等数据来判断数据传输的正确与否。
这个是经验的问题,因为这些组合是大家常用的,有它特殊的用途,根据二进制位可以看出,这些组合是考虑了数据位变化的,所以如果在通信中有什么变化的话,通过这些组合可以很快找出问题。
5、一般的MCU的初始化可以分为三部分:时钟、端口和中断,这些地方不同的MCU具体的配置都不同,这部分一般仔细阅读手册都可以解决,但要注意不同种类MCU间的区别,比如IO口配置、振荡器配置等。
6、UART口的电路设计很重要,一般情况下要外接232芯片,或者集成了一个带RS232的TTL电平,这一点一定要弄清楚,如果没有轮换芯片的话,不能直接和口通信,所以在碰到新的MCU或板子时,首先要确认这一点。
7、在电路板上,一般引脚都会留有穿孔,所以在测试电路连接时,可以试试这些穿孔,很有用,可能会收到意想不到的效果。
8、关于发光二极管的测试,可以用万用表来测试,如果接上以后能够亮,说明是完好的,并且要把一端有两个小绿点的接负极。
9、在配置好时钟以后,如果想测试时钟是否正常,可以使用一个简单的计数器,然后读取它的值就可以,因为有的MCU有内部的时钟,会自动起振,而有的配置如果不正确的话,程序是走不下去的。
10、一般在调试UART口时,只需接2(发送)、3(接收)和5(地)三根线就可以了。
11、在串口调试时,如果遇到数据发送后自己又收到的情况,一般有两种可能,一是数据线短路,比如数据线和地线,这种情况比较危险,可能会把串口烧坏。二是没接地线,有的时候不接地线的话,数据通信很难正常。
12、UART口的电平转换,如果MCU没有特殊的声明的话,一般都是要加电平转换电路的,将TTL电平转换为RS232标准。
13、如果没有电平转换电路,那么PC机可能会正常接收到下位机的数据,但PC机发送数据时,下位机可能就收不到,这主要是因为PC机和下位机的串口容错不同,虽然电压没有转换,但PC机可以检测得到,而下位机可能就做的不好,采样不到正确的数据。
阅读(3378) | 评论(0) | 转发(0) |