帮忙看看我的串口程序吧,就几句话,困惑了大半天了



while(UARTCharsAvail(UART0_BASE))
{
buffer = UARTCharGet(UART0_BASE);                  // 1
UARTCharPut(UART0_BASE,buffer);                     //  2
// UARTCharPut(UART0_BASE,UARTCharGet(UART0_BASE));         //3
}

之前是串口收发出了问题,最后吧串口中断里的那部分简化成回显收发,

发现了问题,

屏蔽第一句和第二句,启用第三句,程序收发正常;

屏蔽第三句开启第一第二句,程序就无法回显数据了,

buffer的类型是char;

引用个中间变量差别就这么大吗?

求解答啊,谢谢

  • 应该不会是因为中间变量的问题吧,看看是不是其他问题引起

  • buff定义成静态变量试一下。

    不能确定是什么问题造成的。一是可判断的条件太少,二是问题太奇怪,不能确定你的测试是否正确。

  • #include "hw_ints.h"
    #include "hw_memmap.h"
    #include "hw_types.h"
    #include "debug.h"
    #include "gpio.h"
    #include "interrupt.h"
    #include "rom.h"
    #include "sysctl.h"
    #include "uart.h"
    #include <string.h>
    unsigned char buffer;
    unsigned long tmp;
    char klc='a';
    int cnt=0,flag=0;
    void UARTIntHandler(void)
    {
    unsigned long ulStatus;
    ulStatus = UARTIntStatus(UART0_BASE, true);
    UARTIntClear(UART0_BASE, ulStatus);
    while(UARTCharsAvail(UART0_BASE))
    {
    buffer = UARTCharGet(UART0_BASE);
    UARTCharPut(UART0_BASE,buffer);
    //UARTCharPut(UART0_BASE,UARTCharGet(UART0_BASE));
    }
    }
    void UARTSend(const unsigned char *pucBuffer, unsigned long ulCount)
    {
    while(ulCount--)
    {
    UARTCharPutNonBlocking(UART0_BASE, *pucBuffer++);
    }
    }
    int main(void)
    {
    SysCtlClockSet (
    SYSCTL_SYSDIV_1 |
    SYSCTL_USE_OSC |
    SYSCTL_OSC_MAIN |
    SYSCTL_XTAL_16MHZ
    );

    SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);

    IntMasterEnable();

    GPIOPinConfigure(GPIO_PA0_U0RX);
    GPIOPinConfigure(GPIO_PA1_U0TX);
    GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);

    UARTConfigSetExpClk(
    UART0_BASE, SysCtlClockGet(),
    9600,
    UART_CONFIG_WLEN_8 |
    UART_CONFIG_STOP_ONE |
    UART_CONFIG_PAR_NONE);
    UARTFIFOLevelSet(UART0_BASE,UART_FIFO_TX1_8, UART_FIFO_RX1_8);

    IntEnable(INT_UART0);
    UARTIntEnable(UART0_BASE, UART_INT_RX|UART_INT_RT);
    UARTIntRegister(UART0_BASE,UARTIntHandler);
    while(1)
    {
    }

    }

    我把完整的代码贴出来了,其他部分都是些设置和初始化,帮忙看看呢,谢谢

  • 看起来没什么问题。

    建议还是断点调试吧;

    看在终端里buffer的值是否正确。

  • buffer的数据类型是char,而UARTCharGet()的返回类型是long。 数据类型不匹配