找回密码
 立即注册

QQ登录

只需一步,快速开始

开启左侧

[M051] 我用的新塘MO58的芯片,编写485通信的程序,有个奇怪的现象

[复制链接]
fan168668 发表于 2014-1-8 09:16:33 | 显示全部楼层 |阅读模式
编好的程序,向PC机串口调试助手发数据。比如一个数组a[5]={0xa1, 0xa2, 0xa3, 0xa4, 0xa5};共有5个字节的数据,但是我用自己编写的函数
void fasong_485(uint8_t        *command2,uint8_t number2)
{
  uint8_t *Txbufer;
  Txbufer = command2;
  DrvUART_Write(UART_PORT1,Txbufer,number2);
//  _DRVUART_WAIT_TX_EMPTY (UART_PORT1);         不屏蔽该语句很难返回!!!
}发送数据到串口,假如fasong_485( a , 5 );串口只能显示前4个数据,改为fasong_485( a , 6 );就能显示全了!怎么回事呢?求解释

回复

使用道具 举报

chenwenbin 发表于 2014-1-8 10:10:10 | 显示全部楼层
在485模式发送的第一个字节是地址,接下来才是数据,用串口助手接收需要配置第九位高低才能正确接收
回复 支持 反对

使用道具 举报

 楼主| fan168668 发表于 2014-1-8 10:48:58 | 显示全部楼层
chenwenbin 发表于 2014-1-8 10:10
在485模式发送的第一个字节是地址,接下来才是数据,用串口助手接收需要配置第九位高低才能正确接收 ...

   是这样的,我们做的控制器有与触摸屏的通信,这一部分由UART0完成,属于232通信。与次调机的通信用UART1完成,配置与UART0相同,只是波特率不同。不过UART1的485功能由控制器上的RSM485CT实现,发送和接收由该芯片的5脚的高低电平来控制。不知道这样算不算485的通信。我接上PC机的串口调试助手,是为了查看有没有数据传过来。然后就发现了这个问题。
我们的控制器需要主次调机之间的通信,一个主调机,最多3台次调机,主调向次调机发送指令,一直查询主调发来的指令。在这种方式下,我单独的把主次调通信的那一块程序拿出来调试,结果主次调之间正常通信了,不过所有的发送指令都要多发一个字节,就像我问的一样。,但是把通信环节放在我的整个控制程序中就不行了,不知道是什么原因?我是判断这个条件成立就接收数据 if(UART1->FSR.RX_EMPTY ==0)。但是这个条件一直不成立,内部的语句没执行到。         
回复 支持 反对

使用道具 举报

a_ziliu 发表于 2014-1-8 17:13:57 | 显示全部楼层
不確定是不是bsp的關係,要不要下載新的bsp, 試看看。
http://www.nuvoton.com/NuvotonMO ... d-aa85-31e261a87d30
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

新唐MCU