在 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(); } }