首页 > 解决方案 > UART传输工作但不通过端口引脚接收数据?

问题描述

我正在使用带有 UART echo 示例的 S32K148 作为基础项目。我一直在尝试通过端口引脚读取数据。

  while (1)
{
      LPUART_DRV_ReceiveData(INST_LPUART1, buffer, 1UL);
      while(LPUART_DRV_GetReceiveStatus(INST_LPUART1, &bytesRemaining) != STATUS_SUCCESS);

      LPUART_DRV_SendData(INST_LPUART1, buffer, 1UL);
      while(LPUART_DRV_GetTransmitStatus(INST_LPUART1, &bytesRemaining) != STATUS_SUCCESS);
    }

快速入门指南中,我发现 LPUART1 RX/TX 分别连接到端口 PTC6/PTC7。

我已将一根电线连接到 TX 引脚并使用 FTDI uart 串行转 USB 模块来验证我是否可以从 S32 传输数据。

在调试模式下,当直接连接到 S32 OpenSDA COM 端口时,我已经能够将数据从 PuTTY 发送到电路板。所以我知道当数据通过 USB 发送时 RX 工作。

但是当我尝试将数据直接发送到 RX 引脚时,板子没有接收到数据。

RX 引脚的电压电平为 5。似乎我对引脚施加的任何信号,都不会触发接收。除了,当我将 RX 引脚短暂接地时,确实会触发接收。

也许这与电压水平有关。我不知道。我用来测试向板上发送字符的 FTDI 模块设置为 5V。

以下是端口引脚的默认配置:

    {
    .base          = PORTC,            //TX
    .pinPortIdx    = 7u,
    .pullConfig    = PORT_INTERNAL_PULL_NOT_ENABLED,
    .passiveFilter = false,
    .driveSelect   = PORT_LOW_DRIVE_STRENGTH,
    .mux           = PORT_MUX_ALT2,
    .pinLock       = false,
    .intConfig     = PORT_DMA_INT_DISABLED,
    .clearIntFlag  = false,
    .gpioBase      = NULL,
    .digitalFilter = false,
},
{
    .base          = PORTC,             //RX
    .pinPortIdx    = 6u,
    .pullConfig    = PORT_INTERNAL_PULL_NOT_ENABLED,
    .passiveFilter = false,
    .driveSelect   = PORT_LOW_DRIVE_STRENGTH,
    .mux           = PORT_MUX_ALT2,
    .pinLock       = false,
    .intConfig     = PORT_DMA_INT_DISABLED,
    .clearIntFlag  = false,
    .gpioBase      = NULL,
    .digitalFilter = false,
},

标签: serial-portuartnxp-microcontroller

解决方案


这是因为 OpenSDA Rx 引脚与 PTC6 共享。我有同样的问题,在进行 OpenSDA 调试和一起使用 LPUART1 时,我可以发送数据但不能接收,因为 Rx 引脚上的电平为 5V,并且来自我的 UART 适配器的 UART 信号没有到达 GND / 驱动太弱。

托马斯


推荐阅读