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-TM4C1294XL:EK_TM4C1294XL -使用 Booster Pack 引脚 PA1和 PA0时 UART0中断无法正常工作

Guru**** 2547740 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/783731/ek-tm4c1294xl-ek_tm4c1294xl---uart0-interrupt-not-working-correctly-with-booster-pack-pins-pa1-and-pa0

器件型号:EK-TM4C1294XL
主题中讨论的其他器件:TM4C1294NCPDT

大家好、  

我目前正在使用 Tiva C 系列 TM4C1294XL 开发板。 目前、我正在尝试使用 UART0从 BoosterPack 引脚获取 UART 通信(因此从 PA1获取 TX、从 PA0获取 Rx)。

我能够使用笔记本电脑上的串行监视器(Putty)示例"UART_ECHO"传输 UART、并成功接收和传输 TM4C1294XL 的字符。 但是、在编写一些程序并尝试在两个板之间发送和接收之后、不会发生任何情况。  

我一直保持 UART0的代码设置不变、检查布线并尝试调试。 虽然此时它看起来接收 UART0中断不能正常工作、但实际上不知道为什么它不起作用。  

详细信息:  

库版本: tivaware c_series_2_1_4_178

CCS 版本: CCS_8.3.0

 有没有人知道这为什么不能像它应该做的那样正常工作? 如果有任何帮助、我们将不胜感激、谢谢。  

我的发送代码:想法是只需按下一个按钮即可通过 UART0进行发送

#include 
#include 
include "inc/hw_ints.h"
#include "inc/hw_types.h"
#include "inc/hw_memmap.h"
#include "inc/hw_NVIC.h"
#include "inc/hw_sysctl.h"
#include "driverlib/drivermap/interrave.h"

#include "driverlib/rom.lib"#driverlib#driver.h"#driverlib/driverlib#include
"driverlib/driverlib.driverlib"



#include "driver.h"#driverlib#driverlib#driverlib.rom.lib"#driverlib#driverlib.driverlib.driverlib.driverlib.driver.h






//
//! \addtogroup example_list
//! 

UART 回波(UART_ECHO)

//! //! 此示例应用利用 UART 来回显文本。 第一个 UART //! (连接到评估板上的 USB 调试虚拟串行端口) //! 将配置为115、200波特、8-n-1模式。 所有字符均接收于 //! UART 被发送回 UART。 //// ***************** // // ////系统时钟速率,单位为 Hz。 //// ************* uint32_t g_ui32SysClock; //********* // //如果驱动程序库遇到错误,则调用的错误例程。 //// ***************** #ifdef debug void __error__(char *dpcFilename、uint32_t ui32Line) { #endif //********* // // UART 中断处理程序。 //// ***************** void SwitchSetup (void){ SysCtlPeripheralEnable (SYSCTL_Periph_GPIOJ); //启用用于板载交换机的 GPIO 端口。 while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOJ))//检查是否为 J 启用了外设访问 { } GPIOPinTypeGPIOInput (GPIO_PORTJ_BASE、GPIO_PIN_0);//使 SW1配置为输入- PORTJ HWREG (GPIO_PORTJ_BASE + GPIO_PUR)= GPIO_PIN_0;//启用弱上拉以检测按钮按压 操作} //************* // //向 UART 发送字符串。 //// ***************** void UARTSend (const uint8_t * pui8Buffer、uint32_t ui32Count) { // //循环,同时有更多字符要发送。 // while (ui32Count---) { // //将下一个字符写入 UART。 // UARTCharPutNonBlocking (UART0_BASE、* pu8Buffer++); } } //********* // //此示例演示了如何将一串数据发送到 UART。 //// ***************** int main (void) { SysCtlPeripheralEnable (SYSCTL_Periph_GPION); //启用用于板载 LED 的 GPIO 端口。 // // while (!SysCtlPeripheralReady (SYSCTL_Periph_GPION))//检查是否启用了外设访问。 { } GPIOPinTypeGPIOOutput (GPIO_PORTN_BASE、GPIO_PIN_0);//LED D2配置为输出 SwitchSetup(); G_ui32SysClock = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480)、120000000); // //启用用于板载 LED 的 GPIO 端口。 // SysCtlPeripheralEnable (SYSCTL_Periph_GPION); // //为 LED (PN0)启用 GPIO 引脚。 // GPIOPinTypeGPIOOutput (GPIO_PORTN_BASE、GPIO_PIN_0); // //启用此示例使用的外设。 // SysCtlPeripheralEnable (SYSCTL_Periph_UART0); SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA); // //启用处理器中断。 // IntMasterEnable(); // //将 GPIO A0和 A1设置为 UART 引脚。 // GPIOPinConfigure (GPIO_PA0_U0RX); GPIOPinConfigure (GPIO_PA1_U0TX); GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1); // //将 UART 配置为115、200、8-N-1操作。 // UARTConfigSetExpClk (UART0_BASE、g_ui32SysClock、115200、 (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE)); // //启用 UART 中断。 // IntEnable (INT_UART0); UARTIntEnable (UART0_BASE、UART_INT_RX | UART_INT_RT); while (1){ if (GPIOPinRead (GPIO_PORTJ_BASE、GPIO_PIN_0)== 0x0) //SPTB 开关 { UARTCharPutNonBlocking (UART0_BASE、"O"); GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_0、GPIO_PIN_0); } GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_0、0x00); } while (1) { } }

我的接收代码:使用 UART 中断检测引脚上的变化、然后应将接收到的值读入"U"

#include 
#include 
include "inc/hw_ints.h"
#include "inc/hw_types.h"
#include "inc/hw_memmap.h"
#include "inc/hw_NVIC.h"
#include "inc/hw_sysctl.h"
#include "driverlib/drivermap/interrave.h"

#include "driverlib/rom.lib"#driverlib#driver.h"#driverlib/driverlib#include
"driverlib/driverlib.driverlib"



#include "driver.h"#driverlib#driverlib#driverlib.rom.lib"#driverlib#driverlib.driverlib.driverlib.driverlib.driver.h






//
//! \addtogroup example_list
//! 

UART 回波(UART_ECHO)

//! //! 此示例应用利用 UART 来回显文本。 第一个 UART //! (连接到评估板上的 USB 调试虚拟串行端口) //! 将配置为115、200波特、8-n-1模式。 所有字符均接收于 //! UART 被发送回 UART。 //// ***************** // // ////系统时钟速率,单位为 Hz。 //// ************* uint32_t g_ui32SysClock; //********* // //如果驱动程序库遇到错误,则调用的错误例程。 //// ***************** #ifdef debug void __error__(char *dpcFilename、uint32_t ui32Line) { #endif //********* // // UART 中断处理程序。 //// ***************** 空 UARTIntHandler (void) { 字符 U; volatile uint32_t ui32Loop; uint32_t ui32Status; // //获取中断状态。 // ui32Status = UARTIntStatus (UART0_BASE、TRUE); // //清除已发出的中断。 // UARTIntClear (UART0_BASE、ui32Status); U = UARTCharGetNonBlocking (UART0_BASE); GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_0、GPIO_PIN_0); 对于(ui32Loop = 0;ui32Loop < 20000;ui32Loop +) { } GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_0、0x00); //} } //********* // //向 UART 发送字符串。 //// ***************** void UARTSend (const uint8_t * pui8Buffer、uint32_t ui32Count) { // //循环,同时有更多字符要发送。 // while (ui32Count---) { // //将下一个字符写入 UART。 // UARTCharPutNonBlocking (UART0_BASE、* pu8Buffer++); } } //********* // //此示例演示了如何将一串数据发送到 UART。 //// ***************** int main (void) { uint16_t i; G_ui32SysClock = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480)、120000000); // //启用用于板载 LED 的 GPIO 端口。 // SysCtlPeripheralEnable (SYSCTL_Periph_GPION); // //为 LED (PN0)启用 GPIO 引脚。 // GPIOPinTypeGPIOOutput (GPIO_PORTN_BASE、GPIO_PIN_0); // //启用此示例使用的外设。 // SysCtlPeripheralEnable (SYSCTL_Periph_UART0); SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA); // //将 GPIO A0和 A1设置为 UART 引脚。 // GPIOPinConfigure (GPIO_PA0_U0RX); GPIOPinConfigure (GPIO_PA1_U0TX); GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1); // //将 UART 配置为115、200、8-N-1操作。 // UARTConfigSetExpClk (UART0_BASE、g_ui32SysClock、115200、 (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE)); // //启用 UART 中断。 // UARTIntEnable (UART0_BASE、UART_INT_RX | UART_INT_RT); I=0; I=1; I=2; IntMasterEnable(); while (1){ i++; } }

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

    尊敬的 David:

     如果要将 UART0连接到 Booster Pack、则需要将 JP4和 JP5更改为垂直位置。 有关详细信息、请参阅以下摘录中的 LaunchPad 用户指南。

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

    您好、Charles、  

    谢谢、这在某种程度上帮助我解决了我的问题并使其正常工作。  

    事实证明我有三个问题。  

    问题1:正如您所说的、我没有将 JP4和 JP5垂直对齐、对于任何其他人、请确保将 JP4和 JP5按如下方式排列到 Booster Pack:  

    问题2: 为了在此处启用 UART、我必须在"接收"程序代码中添加一个额外的代码行:  

    问题3: 我注意到我尚未在"tm4c1294ncppdt_startup_ccs_gcc.c"中初始化 UART0的中断处理程序您需要添加/编辑以红色突出显示的部分:  

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