TI中文支持网
TI专业的中文技术问题搜集分享网站

TI 工程師您好 詢問z-stack 使用RS-485 問題

您好

   z-stack 預設使用DMA 方式,baudRate 2400~115200

  但我周邊裝置是

  baudRate =   1200 

    EVEN

    8 bit

   stop bit   =  1

  我修改_hal_uart_dma.c

  增加了

 case HAL_UART_BR_1200:
      UxGCR = 5;
      dmaCfg.txTick = 274;      UxUCR = UCR_STOP | UCR_PARITY | UCR_D9 | UCR_BIT9;      break;

UART 結構參數

   halUARTCfg_t uartConfig;
       uartConfig.configured           = TRUE;              // 2×30 don't care – see uart driver.
       uartConfig.baudRate             = SERIAL_APP_BAUD;
       uartConfig.flowControl          = FALSE;
       uartConfig.flowControlThreshold = 64; // 2×30 don't care – see uart driver.
       uartConfig.rx.maxBufSize        = 128;  // 2×30 don't care – see uart driver.
       uartConfig.tx.maxBufSize        = 128;  // 2×30 don't care – see uart driver.
       uartConfig.idleTimeout          = 6;   // 2×30 don't care – see uart driver.
       uartConfig.intEnable            = TRUE;              // 2×30 don't care – see uart driver.
       uartConfig.callBackFunc         =  BZ530_SerialApp_CallBack;

   都只能收 到前面 幾個字元  

   請問是否哪邊我沒注意到呢?

   謝謝~~

gancheng:

HI,我不是TI的工程师,但这个问题我可以回答你,我想TI 的工程师在设计Z-STACK的时候并没有把1200的波特率考虑进去,而Z-STACK中串口接收数据有一个超时时间,而这个超时时间对1200的波特率来说太短了,所以接收数据不完整。

lihua jia:

回复 gancheng:

请教高人

我是用CC2530 的usart0外接了MAX3485芯片,用P0.1作为发送接收使能控制,P0.2、P0.3作为Rx和Tx,做了一个485的接口,发送数据用了协议栈的HalUARTWrite函数,每次在调用HalUARTWrite之前将P0.1拉高(Tx使能),调用后在DMA的TX完成中断函数中将P0.1拉低。

我遇到的问题是发送一个数组的数据时,如果在DMA的TX完成中断函数中设置断点运行,接收结果是对的;如果全速运行,总会丢掉最后一个字节,而且倒数第二个字节会变成FF。

如果发送字符串,会在最后多一个FF的字节

这是什么原因呢?有设置不对的地方吗?我的波特率是115200的

luo qi:

回复 lihua jia:

根据这个现象,可以确定二楼说的是正确的。

cpu发送数据到fifo或者uart串并转换部分后,关闭485芯片的发送使能

但是实际情况是,cpu运行速度很快,uart串化部分还没把数据都发走,这时你关闭了485芯片的发送使能,就是强行把最后一次数据给切断了,接收方会在数据尾部发现错误

解决方法很简单,uart寄存器里一般有LSR,里边有一个TEMT的(omapl138是这个名字,你的应该也接近),该寄存器会检测fifo和串化状态,

该寄存器为1的时候才可以关闭485芯片的发送使能,这样就没问题了

赞(0)
未经允许不得转载:TI中文支持网 » TI 工程師您好 詢問z-stack 使用RS-485 問題
分享到: 更多 (0)