tag 标签: lm3s串口

相关博文
  • 热度 22
    2012-11-26 10:23
    2032 次阅读|
    0 个评论
    编写串口接收函数时 当通信速率很高,且单片机速度较慢时 如果接收函数写的不仔细就会发生数据没接收到的情况 下面的代码考虑到了每次对接收缓冲区的操作  每次进中断就读取缓冲区所有的数据 值得借鉴 //  UART2中断服务函数      void UART2_ISR(void)      {         char c;         unsigned long ulStatus;              ulStatus = UARTIntStatus(UART2_BASE, true);             //  读取当前中断状态         UARTIntClear(UART2_BASE, ulStatus);                     //  清除中断状态              if ((ulStatus UART_INT_RX) || (ulStatus UART_INT_RT))   //  若是接收中断或者         {                                                           //      接收超时中断             for (;;)             {                 if (!UARTCharsAvail(UART2_BASE)) break;         //  若接收FIFO里无字符则跳出                 c = UARTCharGetNB(UART2_BASE);                  //  从接收FIFO里读取字符                      if (c == '\r')                 {                     UARTCharPut(UART2_BASE, '\r');              //  回显回车换行                     UARTCharPut(UART2_BASE, '\n');                     RxEndFlag = true;                           //  接收结束标志置位                     break;                 }                      if (isprint(c))                                 //  若是可打印字符                 {                     if (BufP  MAX_SIZE)                     {                         UARTCharPut(UART2_BASE, c);             //  回显                         RxBuf = c;                         RxBuf = '\0';                     }                 }             }         }      }  
  • 热度 14
    2012-11-26 10:18
    1221 次阅读|
    1 个评论
    以下是代码片段:lm3s9b92上的串口发送函数对比 //*****************************************************************************  //  // The UART0 INIT.  //  //*****************************************************************************  void Uart0Init()  {   SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);   //移植时更改   SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);   //移植时更改   GPIOPinConfigure(GPIO_PA0_U0RX); //移植时更改      GPIOPinConfigure(GPIO_PA1_U0TX); //移植时更改      GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);   UARTConfigSetExpClk(UART0_BASE, SysCtlClockGet(),115200,                              (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |                               UART_CONFIG_PAR_NONE));   //      // Enable the UART interrupt.      //     IntEnable(INT_UART0);     UARTIntEnable(UART0_BASE, UART_INT_RX|UART_INT_RT);     IntMasterEnable();     UARTEnable(UART0_BASE);  }    //*****************************************************************************  //方法1:发少量字符(不推荐)  // Send a string to the UART(这个函数发送字符数不能一次性超过17个(byte)).  //  //*****************************************************************************  void   UARTSend(const uint8 *pucBuffer, uint16 ulCount)  {      //      // Loop while there are more characters to send.      //      while(ulCount--)      {          //          // Write the next character to the UART.          //          UARTCharPutNonBlocking(UART0_BASE, *pucBuffer++);      }  while(UARTBusy(UART0_BASE))  {};           //是否发送结束?  }    //*****************************************************************************  //方法二:建议使用,无限制  // Send a string to the UART. //这个发送函数使用无任何限制(推荐,但是如果是485发送需要加上  while(UARTBusy(UART0_BASE))  {};           //是否发送结束? )  //  //*****************************************************************************  void UART0Send (const uint8  *pucBuffer,uint16 Length)  {      uint16 ucByte = Length;        while (ucByte)    {          if ( UARTSpaceAvail(UART0_BASE) )    {          UARTCharNonBlockingPut(UART0_BASE, *pucBuffer++);          ucByte--;          }      }       }         第三部分:RS485的一个发送实例 /************************************************************************  * 函数名:   * 函数功能:  * 输入参数:  * 输出参数:  * 返回值:  ************************************************************************/  void Rs485Send(const unsigned char *pucBuffer, unsigned long ulCount)  {   GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_6,GPIO_PIN_6);   //RS485发送   SysCtlDelay(230);        UART1Send((unsigned char *)pucBuffer, ulCount);     while(UARTBusy(UART1_BASE))  {};              //等待串口空闲   GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_6,0X00);      //RS485接收   SysCtlDelay(230);  }