CC2530 zigbee RS485通讯

来源:互联网 发布:背四级单词软件 编辑:程序博客网 时间:2024/06/06 01:11

 通讯是RS485,之前代码在115200波特率下能正常工作,后来改成9600居然异常。实测数据,是发送不完整,甚至只发送了一个字节的错误数据。

分析原因,是RS485发送接收硬件切换脚的使能,没有等到发送完成就切换了。原来由于速度快等待时间短。

串口收发用的是中断,这里只描述发送。

    发送函数:  P0_1 = 1;
      HalUARTWrite(0,buf,len);

1、 _hal_uart_isr.c 中, 

  if (isrCfg.txHead == isrCfg.txTail)
  {
    IEN2 &= ~UTXxIE;
    isrCfg.txMT = 1;
  },保持不变,原来的115200时,在中断函数里加了延时和RS485脚的切换,但9600时间长了,不合适加在中断里。

2、MT_UART.C中,串口初始化的回调函数里,增加:

  if(event &HAL_UART_TX_EMPTY){
     event &=(~HAL_UART_TX_EMPTY);
  //    P0_1 = 0;
    osal_start_timerEx(SampleApp_TaskID,SEND_TIME_RS485_EVENT,SEND_TIME_RS485MAX); 
  },其实我想在这个函数中直接将RS485使能脚改为接收,但还是会出现最后一个字节发送不完整。因此,增加了延时使能的串口事件,不在此直接延时等待。

3、SanmpleApp.c中,uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events )函数里,增加:

  if ( events & SEND_TIME_RS485_EVENT )
  {
    P0_1 = 0;
    return (events ^ SEND_TIME_RS485_EVENT);
  } 

至此,整个发送完成。SEND_TIME_RS485MAX经调试,2毫秒即可,推算,发送完成标志置位,还有一个字节没有传输完,并且传输完后还需要稳定时间,9600发送完后1毫秒多点。

0 0
原创粉丝点击