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.

[参考译文] TM4C1294NCPDT:TM4C1294NCPDT UART3

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/572900/tm4c1294ncpdt-tm4c1294ncpdt-uart3

器件型号:TM4C1294NCPDT
主题中讨论的其他器件: ADS1243

你(们)好

我使用 TM4C1294NCPDT 设计了自己的电路板。

我已经检查了 UART0、UART2和 UART4中断、它们工作正常。

但我遇到了 UART3问题。 程序卡在 uart3_init 函数中。

INIT 函数和中断处理程序函数与其他有效 UART 相同

功能如下:

//

void uart3_init (uint32_t ui32SysClock)

//
// PJ0-1用于 UART3。
//
ROM_GPIOPinConfigure (GPIO_PJ0_U3RX);
ROM_GPIOPinConfigure (GPIO_PJ1_U3TX);
ROM_GPIOPinTypeUART (GPIO_PORTJ_BASE、GPIO_PIN_0 | GPIO_PIN_1);

//已启用 GPIO 端口 D
//
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UART3);

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

//
//启用 UART 中断。
//
ROM_IntEnable (INT_UART3);
ROM_UARTIntEnable (UART3_base、UART_INT_RX | UART_INT_RT);

//

void uart4_init (uint32_t ui32SysClock)

//
// PA2-3用于 UART4。
//
ROM_GPIOPinConfigure (GPIO_PA2_U4RX);
ROM_GPIOPinConfigure (GPIO_PA3_U4TX);
ROM_GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_2 | GPIO_PIN_3);

//已启用 GPIO 端口 A
//
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UART4);

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

//
//启用 UART 中断。
//
ROM_IntEnable (INT_UART4);
ROM_UARTIntEnable (UART4_base、UART_INT_RX | UART_INT_RT);

//

// UART3中断处理程序。

空 UART3IntHandler (空)

uint32_t ui32Status;

//
//获取中断状态。
//
ui32Status = ROM_UARTIntStatus (UART3_base、true);

//
//清除已发出的中断。
//
ROM_UARTIntClear (UART3_base、ui32Status);

//
//在接收 FIFO 中有字符时循环。
//
while (ROM_UARTCharsAvail (UART3_base))

//
//从 UART3读取字符并将其写入 UART4。
//
ROM_UARTCharPutNonBlocking (UART4_base、UARTCharGetNonBlocking (UART3_base));

//

// UART4中断处理程序。

空 UART4IntHandler (空)

uint32_t ui32Status;

//
//获取中断状态。
//
ui32Status = ROM_UARTIntStatus (UART4_base、true);

//
//清除已发出的中断。
//
ROM_UARTIntClear (UART4_base、ui32Status);

//
//在接收 FIFO 中有字符时循环。
//
while (ROM_UARTCharsAvail (UART4_base))

//
//从 UART4读取下一个字符并将其写回 UART4。
//
ROM_UARTCharPutNonBlocking (UART4_base、UARTCharGetNonBlocking (UART4_base));

//

int main (空)

uint32_t ui32User0、ui32User1、ui32AnePos、ui32Color;
uint8_t pui8MACArray[8]、i;
tRectangle sRect;

//
//从 PLL 以120MHz 运行。
//
G_ui32SysClock = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480)、120000000);

//
//配置器件引脚。
//
init_pinconfig();
delay_ms (10);
uart0_init (g_ui32SysClock);
uart2_init (g_ui32SysClock);
uart3_init (g_ui32SysClock);
uart4_init (g_ui32SysClock);

while (1)

//

此外,我还在 init_pinconfig()函数中初始化了所需的 UART 外设。

是否有人可以帮助解决 UART3通信问题?

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

    Kiran、

    当您说代码被卡住时、最好让我们知道发生了什么... 它是否转到了 FAULT_ISR? 还有事吗?

    话虽如此、您是否启用了 UART3引脚所在的 GPIO 端口?

    此致

    布鲁诺

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

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

    谢谢 Bruno、

    谢谢 Amit、

    启用 GPIO 端口引脚 PJ0和 PJ1后、解决了该问题。

    此致、

    Kiran  

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

    但代码中提到的任何 GPIO 都没有启用时钟。。。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Amit:

    这些是在 init_pinconfig()函数中编写的

    void init_pinconfig()

    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOC);
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOG);
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOH);
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOJ);
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOK);
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOL);
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOM);
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPION);
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOP);
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOQ);

    GPIO_PORta_AHB_DIR_R |= 0xC8;//端口 A
    GPIO_PORta_AHB_DEN_R |= 0xFC;

    GPIO_PORTB_AHB_DIR_= 0x34;//端口 B
    GPIO_PORTB_AHB_DEN_R |= 0x34;

    GPIO_PORTC_AHB_DIR_R |= 0x30;//端口 C
    GPIO_PORTC_AHB_DEN_R |= 0x30;

    GPIO_PORTD_AHB_DIR_R |= 0x20;//端口 D
    GPIO_PORTD_AHB_DEN_R |= 0x3F;

    GPIO_Porte AHB_DIR_R |= 0x3C;//端口 E
    GPIO_Porte AHB_DEN_R |= 0x3D;

    GPIO_PORTF_AHB_DIR_= 0x0C;//端口 F
    GPIO_PORTF_AHB_DEN_R |= 0x0C;

    GPIO_PORTG_AHB_DIR_R |= 0x01;//端口 G
    GPIO_PORTG_AHB_DEN_R |= 0x03;

    GPIO_Porth_AHB_DIR_= 0x00;//端口 H
    GPIO_Porth_AHB_DEN_R |= 0x0F;

    GPIO_PORTJ_AHB_DIR_|= 0x02;//端口 J
    GPIO_PORTJ_AHB_DEN_R |= 0x03;

    GPIO_PORTK_DIR_R |= 0x9F;//端口 K
    GPIO_PORTK_DEN_R |= 0xFF;

    GPIO_PORTM_DIR_R = 0xFF;//端口 M
    GPIO_PORTM_DEN_R = 0xFF;

    GPIO_PORTN_DIR_R |= 0x3D;//端口 N
    GPIO_PORTN_DEN_R |= 0x3F;

    GPIO_PORTP_DIR_R |= 0x04;//端口 P
    GPIO_PORTP_DEN_R |= 0x04;

    GPIO_PORTQ_DIR_= 0x12;//端口 Q
    GPIO_PORTQ_DEN_R |= 0x1A;

    delay_ms (1);
    /*
    GPIO_PORTC_AHB_DATA_R |=(0x20);// Output1
    GPIO_PORTC_AHB_DATA_R |=(0x10);// output2
    GPIO_PORTK_DATA_R |=(0x04);// Output3
    GPIO_PORTK_DATA_R |=(0x08);// Output4
    GPIO_PORTK_DATA_R |=(0x01);// Output5
    GPIO_PORTK_DATA_R |=(0x02);// Output6
    GPIO_PORTB_AHB_DATA_R |=(0x10);// Output7
    GPIO_Porte AHB_DATA_R |=(0x04);// Output8

    *

    ROM_GPIOPinWrite (GPIO_PORTB_BASE、GPS、GPS_ON);//GPS 电源启用

    ROM_GPIOPinWrite (GPIO_PORTN_BASE、SDI12、SDI12_DISABLE);

    ROM_GPIOPinWrite (GPIO_PORTK_base、ADC_PWR、ADC_ON);// ADC 电源使能
    ROM_GPIOPinWrite (GPIO_PORTK_base、ADC、ADC_DISABLE);// ADS1243禁用


    ROM_GPIOPinWrite (GPIO_PORTQ_BASE、wifi、WIFI_ON);// Wifi 模块电源启用

    ROM_GPIOPinWrite (GPIO_PORTB_BASE、ICDI、ICDI_ON);// ICDI 电源启用

    ROM_GPIOPinWrite (GPIO_Porta_base、LCD、LCD_ON);// LCD 模块启用

    ROM_GPIOPinWrite (GPIO_PORTP_BASE、RS485、RS485_ON);// 5V 电源使能
    ROM_GPIOPinWrite (GPIO_PORTN_BASE、RS485、RS485_RX_ENABLE);// RS485 RX 启用

    ROM_GPIOPinWrite (GPIO_Porte _BASE、FLASH_PWR、FLASH_ON);//启用闪存电源
    ROM_GPIOPinWrite (GPIO_PORTQ_BASE、FLASH、FLASH_DISABLE);// MX66禁用

    ROM_GPIOPinWrite (GPIO_Porte _BASE、LED、LED_OFF);//用户 LED

    //
    // PF0/PF4-5/PH4/PQ0-2用于 SPI 闪存(板载和 SD 卡)。
    // PH4选择 SD 卡、PQ1选择板载 SPI 闪存。
    //
    ROM_GPIOPinConfigure (GPIO_PF0_SSI3XDAT1);
    // ROM_GPIOPinConfigure (GPIO_PF4_SSI3XDAT2);
    // ROM_GPIOPinConfigure (GPIO_P1_SSI3XDAT3);
    ROM_GPIOPinConfigure (GPIO_PQ0_SSI3CLK);
    ROM_GPIOPinConfigure (GPIO_PQ2_SSI3XDAT0);

    ROM_GPIOPinTypeSSI (GPIO_PORTF_BASE、GPIO_PIN_0);

    ROM_GPIOPinTypeGPIOOutput (GPIO_Porte _BASE、GPIO_PIN_1);
    ROM_GPIOPinWrite (GPIO_Porte _BASE、GPIO_PIN_1、GPIO_PIN_1);

    ROM_GPIOPinTypeSSI (GPIO_PORTQ_BASE、GPIO_PIN_0 | GPIO_PIN_2);

    ROM_GPIOPinTypeGPIOOutput (GPIO_PORTQ_BASE、GPIO_PIN_1);
    ROM_GPIOPinWrite (GPIO_PORTQ_BASE、GPIO_PIN_1、GPIO_PIN_1);

    此致、

    Kiran

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

    您在哪里为 UART 操作配置了 UART3 IO (不确定是使用 PA4-PA5对还是 PJ0-PJ1对)?

    此外、使用 DRM 也不是一个好主意。 而是使用 TivaWare driverlib 进行 IO 初始化。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Amit、您好!

    我正在使用 PJ0和 PJ1端口引脚,并在 uart3_init()函数中提到。

    是否有任何特定原因不使用 DRM。

    示例程序中给出了这种情况、即闪烁。 那么、我已经使用了。

    此致、

    Kiran

     

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

    使用 DRM 会使代码更容易出错、并且我们很难调试论坛用户/编写的复杂代码