This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] EK-TM4C123GXL:为什么 UART1不在终端上打印字符??

Guru**** 2044370 points
Other Parts Discussed in Thread: EK-TM4C123GXL
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/948647/ek-tm4c123gxl-why-uart1-is-not-printing-characters-on-the-terminal

器件型号:EK-TM4C123GXL

我正在处理 TM4C123GXL 的 UART1、在此之前、我尝试使用 "TivaWare_C_Series-2.2.0.295\examples\boards\ek-tm4c123gxl\UART_echo "对 UART0上的字符进行回显、这是成功的。 然后、我对 UART1尝试了相同的代码、只 做了一些小改动、但仍然无法打印字符。

此外、在调试时、我将断点放置在此行"ui32Status = MAP_UARTIntStatus (UART1_base、true)"上;"我观察到我在"ui32Status"中得到0x40值、这意味着每当我们将数据放在 UART1上时、"MIS"寄存器"RTMIS"位就会被置位。 这到底意味着什么? 我阅读 了数据表、但我没有任何想法。

当我通过串行终端发送字符"G"时、我看到 UART1的数据寄存器发生了变化。



每当我们进入任何字符控制 时、我观察到的另一件事是进入 UART 处理程序。 那么,不在终端上打印的原因应该是什么?
我要附加代码以及寄存器 PICS。 任何帮助都是真的
谢谢。 谢谢你。

#include 
#include 
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "driverlib/debug.h"
#include "driverlib/fpu.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/pin_map.h"
#include "driverlib/driverlib.rom"#include"#driverlib/driverlib/rom.rom.include"

#include "driverlib/driverlib"#driverlib_rom.intrate.h"#include"#include "driverlib_rom.ine.h"




//
// UART 中断处理程序。
////
*****************
空
UARTIntHandler (void)
{
uint32_t ui32Status;

//
//获取中断状态。
//
ui32Status = MAP_UARTIntStatus (UART1_BASE、TRUE);

//
//清除已发出的中断。
//
MAP_UARTIntClear (UART1_BASE、ui32Status);

//
//在接收 FIFO 中有字符时循环。
//
while (MAP_UARTCharsAvail (UART1_BASE))
{
//
//从 UART 读取下一个字符并将其写回 UART。
//
MAP_UARTCharPutNonBlocking (UART1_base、MAP_UARTCharGetNonBlocking (UART1_base));

//
//闪烁 LED 以显示字符传输正在发生。
//
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_2、GPIO_PIN_2);

//
//延迟1毫秒。 每个 SysCtlDelay 大约为3个时钟。
//
SysCtlDelay (SysCtlClockGet ()/(1000 * 3));

//
//关闭 LED
//
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_2、0);

}
}

//*********
//
//向 UART 发送字符串。
////
*****************
void
UARTSend (const uint8_t * pui8Buffer、uint32_t ui32Count)
{
//
//循环,同时有更多字符要发送。
//
while (ui32Count---)
{
//
//将下一个字符写入 UART。
//
MAP_UARTCharPutNonBlocking (UART1_base、* pui8Buffer++);
}
}

//*********
//
//此示例演示了如何将一串数据发送到 UART。
////
*****************
int
main (void)
{
//
//为中断处理程序启用怠惰堆栈。 这允许使用浮点
//在中断处理程序中使用的指令,但代价是
//额外的堆栈用法。
//
MAP_FPUEnable();
MAP_FULazyStackingEnable();

//
//将时钟设置为直接从晶体运行。
//
MAP_SysCtlClockSet (SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_16MHz);

//
//启用用于板载 LED 的 GPIO 端口。
//
MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);

//
//为 LED 启用 GPIO 引脚(PF2)。
//
MAP_GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_2);

//
//启用此示例使用的外设。
//
MAP_SysCtlPeripheralEnable (SYSCTL_Periph_UART1);
MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOC);

//
//启用处理器中断。
//
MAP_IntMasterEnable();

//
//将 GPIO A0和 A1设置为 UART 引脚。
//
GPIOPinConfigure (GPIO_PC5_U1TX);
GPIOPinConfigure (GPIO_PC4_U1RX);
MAP_GPIOPinTypeUART (GPIO_PORTC_BASE、GPIO_PIN_5 | GPIO_PIN_4);

//
//将 UART 配置为115、200、8-N-1操作。
//
MAP_UARTConfigSetExpClk (UART1_base、MAP_SysCtlClockGet ()、115200、
(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
UART_CONFIG_PAR_NONE));

//
//启用 UART 中断。
//
MAP_IntEnable (INT_UART1);
MAP_UARTIntEnable (UART1_BASE、UART_INT_RX | UART_INT_RT);

//
//提示输入文本。
//
UARTSend ((uint8_t *)"\033[2JEnter 文本:"、16);

//
//循环通过 UART 永久回显数据。
//
while (1)
{
}
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    检查硬件连接。 我获取了您的源代码、对其进行了编译、并在 EK-TM4C123GXL LaunchPad 上运行。 我在 PC5 (U1TX)上放置一个逻辑分析仪、并获得正确的输出。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、非常感谢您对代码的遵守。 我将再次检查。

    此致

    Omkar