本是低电平,结果只能到1.5V,造成识别错误

当我把3.3V的串口信号的TXD连到MCU上,结果发现低电平拉不到低,只能拉到1.5V

img

确定下通信两端的电平?确定是否匹配,是不是都是TTL的电平?

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答由chatgpt基于相关博客总结生成:

    我会尽力解决这个问题。根据问题描述和示意图,可能的原因是MCU的输入电平较高,导致无法正确识别3.3V范围内的低电平信号。下面是一些可能的解决方案:

    1. 确认MCU的规格和工作电压:首先,请确保MCU能够接受3.3V的信号电平。如果MCU的规格要求输入电平高于3.3V,那么您可能需要使用电平转换器或电平转换电路来降低信号电平。

    2. 使用电平转换器:如果MCU不能直接接受3.3V信号,请考虑使用电平转换器。电平转换器是一种电路元件,可以将3.3V的信号电平转换为适合MCU的电平范围。下面是一个简单的电平转换器的示例代码:

    // 定义输入和输出引脚
    const int inputPin = 2;
    const int outputPin = 3;
    
    void setup() {
      pinMode(inputPin, INPUT);
      pinMode(outputPin, OUTPUT);
    }
    
    void loop() {
      // 读取输入引脚的电平
      int inputLevel = digitalRead(inputPin);
    
      // 转换电平并写入输出引脚
      if (inputLevel == HIGH) {
        digitalWrite(outputPin, HIGH);
      } else {
        digitalWrite(outputPin, LOW);
      }
    }
    
    1. 使用电阻分压电路:如果您没有电平转换器,您可以尝试使用电阻分压电路来降低信号电平。电阻分压电路通过在信号线上添加两个电阻,将信号电压分压到适合MCU的范围。下面是一个简单的电阻分压电路的示例代码:
    // 定义输入引脚
    const int inputPin = 2;
    
    void setup() {
      pinMode(inputPin, INPUT);
    }
    
    void loop() {
      // 读取输入引脚的电平
      int inputLevel = digitalRead(inputPin);
    
      // 根据电阻分压比例计算输出电平
      float outputVoltage = inputLevel * (3.3 / (R1 + R2));
    
      // 打印输出电平
      Serial.println(outputVoltage);
    }
    

    请注意,在使用电阻分压电路时,需要根据信号电阻和电阻的阻值进行适当的计算。根据您的具体情况,可以调整电阻值来实现所需的电平变换。

    1. 检查信号线和引脚的连接:最后,请确保您的信号线和引脚连接没有松动或接触不良的问题,这可能会导致电平识别错误。

    希望这些解决方案能够帮助您解决问题。如果您有任何进一步的问题,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

1:串口信号和 MCU 没共地
2:示波器量错管脚了
3:MCU 的相关管脚配置错了
4:TXD 接错了,没接到 MCU 的指定的管脚
5:发生了短路,误测等
6:眼睛花了,示波器坏了