本帖最后由 cl17726 于 2013-12-24 11:03 编辑
串口FIFO是怎么用的啊.我写了个测试,还没用中断,发现只能一直打印H.我是用Tiva Launchpad
单步跟入:UARTCharPutNonBlocking(UART0_BASE,*Buf++);
第二次跟入:
- void UART0_Init(void){
- SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
- SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
- GPIOPinConfigure(GPIO_PA0_U0RX);
- GPIOPinConfigure(GPIO_PA1_U0TX);
- GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
- UARTConfigSetExpClk(UART0_BASE, SysCtlClockGet(),115200,(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE));
- UARTFIFOEnable(UART0_BASE);
- UARTFIFOLevelSet(UART0_BASE,UART_FIFO_TX7_8,UART_FIFO_RX7_8);
- UARTEnable(UART0_BASE);
- }
- void UART0_SendStr(const char *Buf){
- unsigned char len;
- len = strlen(Buf);
- while(len--){
- if(UARTSpaceAvail(UART0_BASE)){
- UARTCharPutNonBlocking(UART0_BASE,*Buf++);
- }
- }while(!UARTSpaceAvail(UART0_BASE));
- }
- int main(void)
- {
- SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);
- UART0_Init();
- while(1)
- {
- UART0_SendStr("Hello World
");
- }
- }
复制代码
此帖出自
小平头技术问答
你的程序中把字符放到FIFO后就退出函数了,还没等字符发送完,你又进入下一次循环又开始写"Hello World" ,所以每次都只打印得出'H', 解决问题有两个办法:
1. 把UARTCharPutNonBlocking 更换成UARTCharPut
2. 在主函数的while(1)循环中增加一个延时函数.
一周热门 更多>