首页 > 解决方案 > 为什么我无法使用此代码从 USART 接收字符串?

问题描述

使用此代码后,我在串行监视器上没有得到任何东西,而它应该给我我正在发送的字符串。我是对的,我从串行监视器发送的字符串在 arduino 中以 null 终止(这就是我等待 null 的原因字符以获取字符串)?请帮忙

    void setup()
    {


      UBRR0 = 103; // for configuring baud rate of 9600bps
      UCSR0C |= (1 << UCSZ01) | (1 << UCSZ00);
      // Use 8-bit character sizes
      UCSR0B |= (1 << RXEN0) | (1 << TXEN0) | (1 << RXCIE0);
      //// Turn on the transmission, reception, and Receive interrupt
      sei();// enable global interrupt

    }


        ISR(USART_RX_vect)
        {
          while (1)
          {

            while (!(UCSR0A & (1 << RXC0)));
            if (UDR0 != '\0')
            {
              buf[i] = UDR0;
              i++;
            }
            else
            {

              break;
            }
          }
          temp=String(buf);


          uart_send_string(temp); //this function is working properly
        }

标签: arduino

解决方案


不,您通常不会收到空的 '\0' 字符。

除非发件人明确发送一个。但这对于通过串行的非二进制数据传输来说是不寻常的。SerialMonitor 绝对不会!

如果您需要注意消息的结尾,换行符( LF 、 '\n' 或 0x0A )很常见。但任何其他角色也可以这样做。


顺便说一句:当您标记问题Arduino时,为什么不使用 Arduino 库进行串行 UART 通信?


推荐阅读