大家好、我设计了定制板、完成了所有焊接等工作 我使用 uart2 (PD6、PD7)建立了 UART 连接、并将 uart0和 uart1引脚用于其他目的。 在设计电路时、我很复杂地忘记了 PD7已锁定、需要解锁。 Uart0示例代码工作正常、但当我尝试将其转换为 uart2并在 startup.c 文件中进行所需的更改时、代码不起作用。 我搜索论坛、发现有人遇到相同的问题、并且没有工作代码共享。 我尝试解锁 PD7、但仍然无法正常工作。 您是否有有效的 uart2代码? 或者、您能帮助我使我的工作正常吗?
#include #include #include "inc/hw_ints.h" #include "inc/hw_types.h" #include "inc/hw_memmap.h" #include "driverlib/debug.h" #include "driverlib/fpu.h" #include "inc/hw_gpio.h" #include "driverlib/gpio.h" #include "driverlib/include "driverlib/driver.h"#include"#driverlib/driverlib.rom/driverlib"#include"#driverlib.intrl.driverlib/#include"#driverlib/driverlib/#include "driverlib/#driver.h"#include "driverlib.rom.rom.rom.include" // //! \addtogroup example_list //!UART 回波(UART_ECHO)
//! //! 此示例应用利用 UART 来回显文本。 第一个 UART //! (连接到评估板上的 USB 调试虚拟串行端口) //! 将配置为115、200波特、8-n-1模式。 所有字符均接收于 //! UART 被发送回 UART。 //// ***************** // // //如果驱动程序库遇到错误,则调用的错误例程。 //// ***************** #ifdef debug void __error__(char *pcFilename、uint32_t ui32Line) { #endif void UARTIntHandler (void); void uart2_init (){ //初始化 UART2 //设置发送和接收中断 //。 初始化 UART2的时钟和端口 D SysCtlPeripheralEnable (SYSCTL_Periph_UART2); SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD); //为时钟提供启动 SysCtlDelay 的时间(10); //在编程 UARTDisable (UART2_base)之前禁用 UART; //1。 设置波特率、TXE/RXE、stp2 (清除然后再清除)和 wlen (8位_) UARTConfigSetExpClk (UART2_base、SysCtlClockGet ()、9600、(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE);UART2_Disable (UART2_FOC)/ UARTFOL_DISABLE)。 这应该会在每次我获得一个字节时产生中断。 //1.5。 将 AFSEL 设置为 D6、D7并解锁 D7 HWREG (GPIO_PORTD_BASE_GPIO_LO_LOCK)= GPIO_LOCK_KEY; HWREG (GPIO_PORTD_BASE_GPIO_CR)|= GPIO_PIN_7; GPIOPIN_Configure (GPIO_PD6_U2RX);GPIOPIN_OUT7_GPIOPT_IN_OUTX/INP7 (GPIOP_IN_OUT7_IN_IN_OUTX/INPPT_IN_OUTX/IN_OUTx)无源冗余 ) 。 GPIOOT PinTypeUART (GPIO_PORTD_base、GPIO_PIN_6 | GPIO_PIN_7); //启用全局 NVIC 中断 IntEnable (INT_UART2); //启用本地中断 UARTIntEnable (UART2_base、(UART_INT_TX | UART_INT_RX);//启用 UARTx1_ET_UARTx1_TX_8 、UARTx1_UARTx1_UARTx1_UARTx1_FO_TX_TX_EMBLE/UARTx_TX_TX_TX_TS/ UARTx_TS_TS_EMBLE/UARTxTX_TX_TX_TX_TX_TX_TXD、UARTx8、UARTx_TS_TS_TR_EM_TS_TR_EM_TR_EM_EM_FO_TX_TR UARTIntDisable (UART2_base、UART_INT_TX); //将函数链接到 UART 中断 UARTIntRegister (UART2_base、UARTIntHandler); //启用 UART2 UARTEnable (UART2_base); } void GPIOPinUnlockGPIO (uint32_t ui32port、uint8_t ui8pins){ HWREG (ui32Port + GPIO_LOCK)= GPIO_LOCK_KEY; //解锁端口 HWREG (ui32Port + GPIO_CR)|= ui8引脚; //解锁引脚 HWREG (ui32Port + GPIO_LOCK)= 0; //锁定端口 } //********* // // UART 中断处理程序。 //// ***************** 空 UARTIntHandler (void) { uint32_t ui32Status; // //获取中断状态。 // ui32Status = ROM_UARTIntStatus (UART2_base、true); // //清除已发出的中断。 // ROM_UARTIntClear (UART2_base、ui32Status); // //在接收 FIFO 中有字符时循环。 // while (ROM_UARTCharsAvail (UART2_base)) { // //从 UART 读取下一个字符并将其写回 UART。 // ROM_UARTCharPutNonBlocking (UART2_base、 ROM_UARTCharGetNonBlocking (UART2_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。 // ROM_UARTCharPutNonBlocking (UART2_base、* pui8Buffer++); } } //********* // //此示例演示了如何将一串数据发送到 UART。 //// ***************** int main (void) { // //为中断处理程序启用怠惰堆栈。 这允许使用浮点 //在中断处理程序中使用的指令,但代价是 //额外的堆栈用法。 // ROM_FPUEnable(); ROM_FPULazyStackingEnable(); // //将时钟设置为直接从晶体运行。 // ROM_SysCtlClockSet (SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHz); // //启用用于板载 LED 的 GPIO 端口。 // ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF); // //为 LED 启用 GPIO 引脚(PF2)。 // ROM_GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_2); // //启用此示例使用的外设。 // // ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UART2); // ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD); // // ////启用处理器中断。 //// ////// ROM_IntMasterEnable (); // // GPIOPinUnlockGPIO (GPIO_PORTD_base、GPIO_PIN_7); // |解锁 PD7 GPIO //// GPIOPinConfigure (GPIO_PD7_NMI);// HWREG (GPIO_PORTD_BASE + GPIO_LOCK)= 0x4C4F434B;// HWREG (GPIO_PORTD_BASE + GPIO_PO_LOCK)= 0xFF;// HW4C4F_34B;// HWREG (GPIO_P0x80)/GPIO_GPBLE_GPIORT/ GPIORT/ 0xGP_GP_GPIORT/ 0xGP_GPIORT/ 0xGP_GPIORT/ 0xGP_GPD + GPIORP= 0x80;//配置 GPIORT/ GPIORT/ GPIORT/ GPIORP= 0xGP_GPIORT/ 0xGP_GP_GP_GP_GP_GP_GP_GPIORT/ 0x7 (0xGP_GP_GP_GP_GPD + GPIORT/ 0xGP_GP_GP_GPD + GPIORT/ 0xGP_GP_GP_GP // // //////////重新锁定提交寄存器 // // HWREG (GPIO_PORTD_BASE + GPIO_O_LOCK)= 0; // //// ////// //////// // //////////将 GPIO A0和 A1设置为 UART 引脚。 //// // ////////// ROM_GPIOPORTD_BASE,GPIO_PIN_6 | GPIO_PIN_7); // // //////////////将 UART 配置为115,200,8-N-1操作。 //// ////// ROM_UARTConfigSetExpClk (UART2_base、ROM_SysCtlClockGet ()、9600、 // (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | // UART_CONFIG_PAR_NONE); // ////// ////启用 UART 中断。 //// ////// ROM_IntEnable (INT_UART2); // ROM_UARTIntEnable (UART2_base、UART_INT_RX | UART_INT_RT); // //// ////提示输入文本。 uart2_init (); //// UARTSend ((uint8_t *)"\033[2JEnter 文本:"、16); // //循环通过 UART 永久回显数据。 // while (1) { UARTSend ((uint8_t *)"\033[2JEnter 文本:"、16); SysCtlDelay (1000); } }