12
返回列表 发新帖
楼主: zhangsaisai0814

[CodeWarrior] CW10.5下使用PE MKL02Z32VFG4使用UART0(已解决)

[复制链接]

该用户从未签到

13

主题

62

帖子

0

中级会员

Rank: 3Rank: 3

积分
238
最后登录
1970-1-1
 楼主| 发表于 2014-9-26 11:22:46 | 显示全部楼层
终于找到问题了。。我是用的MicroUSB的接口来作为485的输出,同时也给整块芯片供电,之前一直是通过USB接口连到电脑上的串口供电,刚刚更换成了移动电源供电就一切OK了。估计是在连接到电脑USB供电时,485的电源线和数据线都和电脑连起来了,所以可能就钳制了A、B口的点评。现在一切正常了,再次感谢FAE的热心解答
回复 支持 反对

使用道具 举报

该用户从未签到

13

主题

62

帖子

0

中级会员

Rank: 3Rank: 3

积分
238
最后登录
1970-1-1
 楼主| 发表于 2014-9-26 11:23:45 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2014-9-26 10:15
看你这种情况,应该还是485电路有问题了。
你再读读485的datasheet,看看相关的电源以及信号等是否在规定 ...

终于找到问题了。。我是用的MicroUSB的接口来作为485的输出,同时也给整块芯片供电,之前一直是通过USB接口连到电脑上的串口供电,刚刚更换成了移动电源供电就一切OK了。估计是在连接到电脑USB供电时,485的电源线和数据线都和电脑连起来了,所以可能就钳制了A、B口的点评。
现在一切正常了,再次感谢FAE的热心解答
回复 支持 反对

使用道具 举报

该用户从未签到

13

主题

62

帖子

0

中级会员

Rank: 3Rank: 3

积分
238
最后登录
1970-1-1
 楼主| 发表于 2014-9-26 11:24:12 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2014-9-26 10:15
看你这种情况,应该还是485电路有问题了。
你再读读485的datasheet,看看相关的电源以及信号等是否在规定 ...

终于找到问题了。。我是用的MicroUSB的接口来作为485的输出,同时也给整块芯片供电,之前一直是通过USB接口连到电脑上的串口供电,刚刚更换成了移动电源供电就一切OK了。估计是在连接到电脑USB供电时,485的电源线和数据线都和电脑连起来了,所以可能就钳制了A、B口的点评。
现在一切正常了,再次感谢FAE的热心解答
回复 支持 反对

使用道具 举报

该用户从未签到

13

主题

62

帖子

0

中级会员

Rank: 3Rank: 3

积分
238
最后登录
1970-1-1
 楼主| 发表于 2014-9-26 13:09:55 | 显示全部楼层
现在是用示波器测试485输出信号是正常的,但是如果按照上位机发送一个字符,下位机接收后将收到的字符发上来,结果却是上位机只发送一次,下位机接收到字符后,却开始不停的发。
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2014-9-26 14:49:49 | 显示全部楼层
zhangsaisai0814 发表于 2014-9-26 13:09
现在是用示波器测试485输出信号是正常的,但是如果按照上位机发送一个字符,下位机接收后将收到的字符发上 ...

一直不停的发吗?
那你程序是怎么写的,测下485输入端是不是一直发,如果一直发是程序的问题。
回复 支持 反对

使用道具 举报

该用户从未签到

13

主题

62

帖子

0

中级会员

Rank: 3Rank: 3

积分
238
最后登录
1970-1-1
 楼主| 发表于 2014-9-26 16:02:08 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2014-9-26 14:49
一直不停的发吗?
那你程序是怎么写的,测下485输入端是不是一直发,如果一直发是程序的问题。 ...

  //以下程序能正确接收字节,但发送字节停不下来
  while(1)
  {  
          max3485_rece();
          while( !( UART0_S1 & UART0_S1_RDRF_MASK ) );
          ch = UART0_D;
          time_delay(1);
          max3485_send();                                 
          while( !( UART0_S1 & UART0_S1_TDRE_MASK ) || !( UART0_S1 & UART0_S1_TC_MASK ));
          UART0_D = 0x05;
          time_delay(1);
                                           
  }
是的,一直在发。我在while( !( UART0_S1 & UART0_S1_RDRF_MASK ) );设置断点后查看寄存器的值,发现RDRF一直为1,事实是我在上位机只发送了一次。而且按照手册上的说明,在接收到一个字节后,对RDRF进行读操作,并读取UART0_D寄存器就可以清楚RDRF标志位。
另外,我还有一个疑问:C2寄存器里面的SBK位是干吗用的?设置了SBK位在发送时会有什么影响吗?
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2014-9-26 16:14:43 | 显示全部楼层
zhangsaisai0814 发表于 2014-9-26 16:02
//以下程序能正确接收字节,但发送字节停不下来
  while(1)
  {  

你在这句
  ch = UART0_D;
后面加个断点,然后读下UART0_S1,看看实际上有没有被清楚掉。
回复 支持 反对

使用道具 举报

该用户从未签到

13

主题

62

帖子

0

中级会员

Rank: 3Rank: 3

积分
238
最后登录
1970-1-1
 楼主| 发表于 2014-9-26 17:22:58 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2014-9-26 16:14
你在这句
  ch = UART0_D;
后面加个断点,然后读下UART0_S1,看看实际上有没有被清楚掉。 ...

设断点,可以观察到接收标志位是被清除的。刚刚又试验了几次,如果单步调试的话,程序运行是正常的,但是如果直接运行起来就是一直发送。但如果在一直发送的过程中,在程序某一处设置了断点让程序停下来,之后再让程序继续运行,就不会再发送了。
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2014-9-26 17:41:29 | 显示全部楼层
zhangsaisai0814 发表于 2014-9-26 17:22
设断点,可以观察到接收标志位是被清除的。刚刚又试验了几次,如果单步调试的话,程序运行是正常的,但是 ...

你time_delay(1)是多长时间?
时间调长点看看呢。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-25 08:43 , Processed in 0.106884 second(s), 27 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表