牛卧堂MCU技术交流

标题: 我用的新塘MO58的芯片,编写485通信的程序,有个奇怪的现象 [打印本页]

作者: fan168668    时间: 2014-1-8 09:16
标题: 我用的新塘MO58的芯片,编写485通信的程序,有个奇怪的现象
编好的程序,向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
在485模式发送的第一个字节是地址,接下来才是数据,用串口助手接收需要配置第九位高低才能正确接收
作者: fan168668    时间: 2014-1-8 10:48
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
不確定是不是bsp的關係,要不要下載新的bsp, 試看看。
http://www.nuvoton.com/NuvotonMO ... d-aa85-31e261a87d30





欢迎光临 牛卧堂MCU技术交流 (http://www.nuvoton-mcu.com/) Powered by Discuz! X3.2