【发布时间】:2018-04-14 20:08:25
【问题描述】:
我想做的很简单,从 UART 读取 ASCII 数据。我正在使用 NXP kl27 并且正在使用 Kinetis 1.2.0。我有一个 GPS(tx 引脚)连接到引脚 PTD2,并将该引脚配置为 UART2_Rx。
PORT_HAL_SetMuxMode(PORTD,2u,kPortMuxAlt3); //UART2_Rx
PORT_HAL_SetMuxMode(PORTE,22u,kPortMuxAlt4); //UART2_Tx (unused)
UART对象的配置如下:
uart_user_config_t g_uartConfig= {
.baudRate = 9600u,
.parityMode = kUartParityDisabled,
.stopBitCount = kUartOneStopBit,
.bitCountPerChar = kUart8BitsPerChar,
};
最后,这是我用来尝试接收 UART 数据的代码:
uart_state_t g_uartState;
UART_DRV_Init(2u, &g_uartState, &g_uartConfig);
uint8_t rxChar
// Uart #, return data, data count, timeout in miliseconds
UART_DRV_ReceiveDataBlocking(2u, &rxChar, 1u,1000u);
问题是 UART_DRV_RecieveDataBlocking 永远不会返回。
我的尝试
- 我已确认 GPS 正在输出数据
- 我已确认 PTD2 引脚实际上已连接并接收数据(感谢示波器)
- 使用引脚 PTE22 发送 UART 数据以查看故障是否与 UART 对象有关。数据发送成功。
- 使用 GDB 进行调试。这很快变成了一个兔子洞,我在一段时间后就放弃了。我发现的是,在 fsl_uart_hal.c (line 325) 中调用 UART_SET_C3 后,代码在调试器中永远等待。
- 更改配置对象(更改 parityMode)。
据我所知,我正在关注我在读取 UART 数据时看到的每个示例/演示。如果有人对正在发生的事情有任何想法,我很想听听。
【问题讨论】:
-
UART_DRV_* 函数的代码在哪里?
-
在检查来自 GPS 芯片的数据时..1) 波特率是多少 2) 多少停止位? 3) 是否发送了奇偶校验位? 4) TX 线在字符之间是否保持“低”? 5(什么是字符间时间?6)什么是位时间? 7) 什么是“高”电压电平(与接地相比)? 8) 什么是“低”电压电平(与接地相比)。 9) VCC 电压电平是多少(与 gnd 相比)? 3D-FIX 线是否曾经“走高”?
-
“无法读取 UART 数据” --> 是否应该将某些东西连接到 RX 引脚? “引脚 PTD2 实际上已连接并接收数据” ==> 连接到 TX 引脚??这看起来与
PORT_HAL_SetMuxMode()调用不一致。 -
@user3629249 UART 代码是 SDK 的一部分。具体在 fsl_uart_driver.c
-
1.5 伏特高,足以让您使用的 CPU 板被肯定地识别为“高”
标签: c uart nxp-microcontroller