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.

[参考译文] 无法使 UART1在引脚 B0和 B1上运行

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/565804/cant-get-uart1-running-at-pins-b0-and-b1

器件型号:EK-TM4C123GXL
主题中讨论的其他器件:TM4C123GH6PMMAX232

工具/软件:Code Composer Studio

您好!

我将 Tiva 板 EK-TM4C123GXL 与 TM4C123GH6PM 搭配使用、Code Composer Studio 版本:6.1.3.00034

我想运行一个 UART、我已经将一个 MAX232接口连接到引脚 B0和 B1来使用 UART1。

我选择了示例"UART_ECHO"并将其修改为 UART1、端口 B 以及引脚 B0和 B1。

但它只能部分工作。 我得到了前17个字符发送正确(在115200、8、n、1处使用外部终端)、但不能再这样。  我可以将其减少到例如15个字符、这是有效的。

但我完全没有输入运行。 我检查了硬件、情况良好。

我的代码有什么问题?

----------------------------------------

此处是"UART_ECHO.c"的内容:

//
//
// uart_echo.c -从中的 UART 读取数据并向其中写入数据的示例
//              中断驱动方式。
//
//版权所有(c) 2012-2016德州仪器(TI)公司。  保留所有权利。
//软件许可协议
//
//德州仪器(TI)仅提供和使用此软件
//专门用于 TI 的微控制器产品。 该软件归其所有
// TI 和/或其供应商、受适用版权保护
//法律。 您不能将此软件与"病毒"开源软件结合使用
//软件,以便形成一个更大的程序。
//
//此软件按“原样”提供,且存在所有故障。
//不作任何明示、暗示或法定的保证,包括但
//不限于对适销性和适用性的暗示保证
//此软件的特定用途。 TI 不得以任何方式进行
//情况,对特殊、偶然或从属事件负责
//任何原因造成的损害。
//
//这是 EK-TM4C123GXL 固件包版本2.1.3.156的一部分。
//
//

#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/rom.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"


//
//
//! \addtogroup example_list
//!

UART 回波(UART_ECHO)


//!
//! 此示例应用利用 UART 来回显文本。  第一个 UART
//! (连接到评估板上的 USB 调试虚拟串行端口)
//! 将配置为115、200波特、8-n-1模式。  接收到的所有字符
//! UART 被发送回 UART。
//
//

//
//
//驱动程序库遇到错误时调用的错误例程。
//
//
#ifdef 调试
无效
_error__(char * pcFilename、uint32_t ui32Line)


#endif

//
//
// UART 中断处理程序。
//
//
无效
UARTIntHandler (空)

   uint32_t ui32Status;

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

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

   //
   //在接收 FIFO 中有字符时循环。
   //
   while (ROM_UARTCharsAvail (UART1_base))
   {
       //
       //从 UART 读取下一个字符并将其写回 UART。
       //
       ROM_UARTCharPutNonBlocking (UART1_BASE、
                                  ROM_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 发送字符串。
//
//
无效
UARTSend (const uint8_t * pui8缓冲器、uint32_t ui32计数)

   //
   //循环,同时有更多字符要发送。
   //
   while (ui32Count---)
   {
       //
       //将下一个字符写入 UART。
       //
       ROM_UARTCharPutNonBlocking (UART1_base、* pui8Buffer++);
   }


//
//
//此示例演示了如何将一串数据发送到 UART。
//
//
内部
main (空)

   //
   //为中断处理程序启用怠惰堆栈。  这允许使用浮点
   //在中断处理程序中使用的指令,但代价是
   //额外的堆栈用法。
   //
   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);

   //
   //启用此示例使用的外设。  =>将端口 B 更改为 UART1
   //
   ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UART1);
   ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);

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

   //
   //将 GPIO A0和 A1设置为 UART 引脚。  =>将 UART1的 B0和 B1更改为 B0
   //
   GPIOPinConfigure (GPIO_PB0_U1RX);
   GPIOPinConfigure (GPIO_PB1_U1TX);
   ROM_GPIOPinTypeUART (GPIO_PORTB_BASE、GPIO_PIN_0 | GPIO_PIN_1);

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

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

   //
   //提示输入文本。
   //
   UARTSend (((uint8_t *)"-Enter-text-34567abc "、17);

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


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

    是否可以替换 SEND 命令中的语句

    ROM_UARTCharPutNonBlocking (UART1_base、* pui8Buffer++);

    使用

    ROM_UARTCharPut (UART1_base、* pui8Buffer++);

    这是一条阻塞语句。