Tiva串口FIFO是怎么用的啊.

2019-03-24 11:56发布

本帖最后由 cl17726 于 2013-12-24 11:03 编辑

串口FIFO是怎么用的啊.我写了个测试,还没用中断,发现只能一直打印H.我是用Tiva Launchpad
单步跟入:UARTCharPutNonBlocking(UART0_BASE,*Buf++);

QQ截图20131224110252.jpg

第二次跟入:
QQ截图20131224110252.jpg
  1. void UART0_Init(void){
  2.     SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
  3.     SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);

  4.     GPIOPinConfigure(GPIO_PA0_U0RX);
  5.     GPIOPinConfigure(GPIO_PA1_U0TX);
  6.     GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
  7.     UARTConfigSetExpClk(UART0_BASE, SysCtlClockGet(),115200,(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE));
  8.     UARTFIFOEnable(UART0_BASE);
  9.     UARTFIFOLevelSet(UART0_BASE,UART_FIFO_TX7_8,UART_FIFO_RX7_8);
  10.     UARTEnable(UART0_BASE);
  11. }

  12. void UART0_SendStr(const char *Buf){
  13.         unsigned char len;
  14.         len = strlen(Buf);
  15.         while(len--){
  16.                 if(UARTSpaceAvail(UART0_BASE)){
  17.                         UARTCharPutNonBlocking(UART0_BASE,*Buf++);
  18.                 }
  19.         }while(!UARTSpaceAvail(UART0_BASE));
  20. }

  21. int main(void)
  22. {
  23.     SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);
  24.     UART0_Init();
  25.     while(1)
  26.     {
  27.             UART0_SendStr("Hello World ");
  28.     }
  29. }
复制代码
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
1条回答
Triton.zhang
1楼-- · 2019-03-24 15:14
TIVA C 针对UART 的发送提供两个库函数,UARTCharPutNonBlocking,UARTCharPut,前一个函数直接把一个字符放入到UART的发送FIFO后就退出,后一个函数要等到这个字符发送结束后才退出函数.
你的程序中把字符放到FIFO后就退出函数了,还没等字符发送完,你又进入下一次循环又开始写"Hello World" ,所以每次都只打印得出'H', 解决问题有两个办法:
1. 把UARTCharPutNonBlocking 更换成UARTCharPut
2. 在主函数的while(1)循环中增加一个延时函数.

一周热门 更多>

相关问题

    相关文章