在 UART 端口2 Rx 引脚上接收字符时遇到问题。 我已将(硬件)引脚 PB1 (Tx ox UART1)连接到 PD6 (UART2的 Rx)。 我成功地从 UART1端口传输数据、但无法在 UART 端口2 Rx 引脚上接收任何数据。 我也在发布代码。 在这方面,即使是小幅帮助也是值得赞赏的。
#include
#include
#include
#include "inc/hw_memmap.h"
#include "driverlib/gpio.h"
#include "driverlib/pin_map.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"
#include "utils/uartstdio.h"
#include "driverlib/interrupts.intruarts/include"
#include "h/intruarts.h"
//
//
//此函数将 UART1设置为用于 launchpad
//和 GPS 模块之间的通信。
////
*****************
void
ConfigureUART1 (void)
{
//
//启用用于 UART1引脚的 GPIO 端口 B。
// TODO:将其更改为您正在使用的 GPIO 端口。
//
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);
//
//为端口 B0和 B1上的 UART1功能配置引脚复用。
//如果您的器件不支持引脚复用、则无需执行此步骤。
// TODO:更改此选项以选择您正在使用的端口/引脚。
//
GPIOPinConfigure (GPIO_PB0_U1RX);
GPIOPinConfigure (GPIO_PB1_U1TX);
//
//启用 UART1,以便我们可以配置时钟。
//
SysCtlPeripheralEnable (SYSCTL_Periph_UART1);
//
//使用内部16MHz 振荡器作为 UART 时钟源。
//与 SIR 核对
//
UARTClockSourceSet (UART1_base、UART_CLOCK_PIOSC);
//
//为这些引脚选择替代(UART)功能。
// TODO:更改此选项以选择您正在使用的端口/引脚。
//
GPIOPinTypeUART (GPIO_PORTB_BASE、GPIO_PIN_0 | GPIO_PIN_1);
//
//初始化 UART1。
//
//UARTStdioConfig (1、9600、16000000);
UARTClockSourceSet (UART1_base、UART_CLOCK_PIOSC);
UARTConfigSetExpClk (UART1_base、UART_CLOCK_PIOSC、9600、UART_CONFIG_PAR_ZERO);
UARTFIFOEnable (UART1_BASE);
}
//*********
//
//此函数将 UART2设置为用于 UART1和 UART2之间的通信。
////
*****************
void
ConfigureUART2 (void)
{
//
//启用用于 UART2引脚的 GPIO 端口 D。
// TODO:将其更改为您正在使用的 GPIO 端口。
//
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);
//
//为端口 D6和 D7上的 UART2功能配置引脚复用。
//如果您的器件不支持引脚复用、则无需执行此步骤。
// TODO:更改此选项以选择您正在使用的端口/引脚。
//
GPIOPinConfigure (GPIO_PD6_U2RX);
GPIOPinConfigure (GPIO_PD7_U2TX);
//
//启用 UART1,以便我们可以配置时钟。
//
SysCtlPeripheralEnable (SYSCTL_Periph_UART2);
//
//使用内部16MHz 振荡器作为 UART 时钟源。
//与 SIR 核对
//
UARTClockSourceSet (UART2_base、UART_CLOCK_PIOSC);
//
//为这些引脚选择替代(UART)功能。
// TODO:更改此选项以选择您正在使用的端口/引脚。
//
GPIOPinTypeUART (GPIO_PORTD_base、GPIO_PIN_6 | GPIO_PIN_7);
//
//初始化 UART1。
//
//UARTStdioConfig (1、9600、16000000);
UARTClockSourceSet (UART2_base、UART_CLOCK_PIOSC);
UARTConfigSetExpClk (UART2_base、UART_CLOCK_PIOSC、9600、UART_CONFIG_PAR_ZERO);
UARTFIFOEnable (UART2_base);
}
//*********
//
//此函数使用简单的轮询方法提供1秒延迟。
////
*****************
void
SimpleDelay (void)
{
//
//延迟周期1秒
//
SysCtlDelay (16000000 / 3);
}
//*********
//
//向 UART0发送字符串。
////
*****************
void
UART1Send (const uint8_t * pui8Buffer、uint32_t ui32Count)
{
//
//循环,同时有更多字符要发送。
//
while (ui32Count---)
{
//
//将下一个字符写入 UART。
//
while (!UARTSpaceAvail (UART1_base)){
//等待 Tx FIFO 中的空间可用。
UARTFIFODisable (UART1_BASE);
UARTFIFOEnable (UART1_BASE);
}
UARTCharPut (UART1_base、* pui8Buffer++);
//
//打开 LED (绿色)。
//
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_3、GPIO_PIN_3);
SimpleDelay();
//关闭 LED (绿色)。
//
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_3、0x00);
//
//打开 LED (蓝色)。
//
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_2、GPIO_PIN_2);
SimpleDelay();
//
//关闭 LED (蓝色)。
//
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_2、0x00);
}
}
//*********
//
//针对闪烁 LED 的配置。
////
*****************
void
ConfigureLED (void){
//
//启用用于板载 LED 的 GPIO 端口。
//
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
//
//检查是否启用了外设访问。
//
while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOF))
{
}
//
//为 LED 启用 GPIO 引脚(PF3、PF2、PF1)。
//将方向设置为输出,并启用 GPIO
//用于数字功能的引脚。
//
GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_3);
GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_2);
GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_1);
}
//*********
//
//主要功能
//
//*********
int
main (void)
{
ConfigureLED();
配置 UART1 ();
配置 UART2 ();
while (true){
uint32_t rec = 0;
UART1Send ((uint8_t *)"ABCDEFGHKLIJMNOP"、16);
SimpleDelay();
while (!UARTCharsAvail (UART2_base)){
//
//等待 UART2的接收 FIFO 中出现一个字符。
//
}
//
//提取字符。 根据、"REc"将为 true 或 false
//接收 FIFO 中存在字符。
//
REC = UARTCharGetNonBlocking (UART2_base);
if (rec){
//
//打开红色 LED。
//
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_1、GPIO_PIN_1);
SimpleDelay();
//
//关闭红色 LED。
//
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_1、0x00);
SimpleDelay();
}
}

: 