玩转TM4C1294XL(6)——Uart串口

1.简介
       简单介绍芯片内部的uart串口模块,分享uart的配置。本人是边学习边记录,内容仅作参考,有错误的地方请见谅。

2.UART介绍
       本部分内容参考自TI官方手册。
       芯片内部一共有8路独立的串口,像奇偶校验、停止位、波特率等常规配置都是具备的,120M主频时波特率最大支持到15Mbps。其中uart0-uart4支持硬件流控,其他的串口不支持硬件流控。每个串口都有两个独立的16BytteFIFO,分别用于Tx和Rx。支持硬件的SIR(红外线)编解码功能,还支持ISO 7816 smartcard通信。每个串口的Tx和Rx都支持DMA操作。
在这里插入图片描述

图1 UART模块功能框图

3.UART配置
       uart0配置实现接收中断,在接收中断中读取数据然后发送,实现一个简单的串口回射功能。

void bsp_InitUart0(void)
{
    SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
    
    IntMasterEnable();
    
    // Set GPIO A0 and A1 as UART pins.
    GPIOPinConfigure(GPIO_PA0_U0RX);
    GPIOPinConfigure(GPIO_PA1_U0TX);
    GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
    
    // Configure the UART for 115,200, 8-N-1 operation.
    UARTConfigSetExpClk(UART0_BASE, SystemCoreClock, 115200,
                        (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
                        UART_CONFIG_PAR_NONE));
    
    // Enable the UART interrupt.
    IntEnable(INT_UART0);
    UARTIntEnable(UART0_BASE, UART_INT_RX | UART_INT_RT);
}

//串口0中断函数
void UART0_Handler(void)
{
    uint32_t ui32Status;

    // Get the interrrupt status.
    ui32Status = UARTIntStatus(UART0_BASE, true);
    // Clear the asserted interrupts.
    UARTIntClear(UART0_BASE, ui32Status);
    // Loop while there are characters in the receive FIFO.
    while(UARTCharsAvail(UART0_BASE))
    {
        // Read the next character from the UART and write it back to the UART.
        UARTCharPutNonBlocking(UART0_BASE,
                               UARTCharGetNonBlocking(UART0_BASE));
    }
}

4.UART的FIFO测试
       下载程序后可以对串口的接收FIFO进行测试,在接收中断里面打断点,通过串口助手发送数据,发送超过16个字节的数据,然后取消断点查看串口助手接收的数据个数是否为16个。测试结果如下图所示,我一次性发送20个字节数据,接收第一个字节时进入中断,然后程序停在中断中,剩下的数据硬件自动接收到FIFO中,直到FIFO被填满,然后取消断点FIFO中的数据被全部回射,可以看见一共只回射了16个字节数据。关闭FIFO再次进行相同的测试,最终只能回射1个字节数据。FIFO的可以在串口中断无法立刻执行的情况下对数据进行缓存,避免数据丢失。

在这里插入图片描述

图2 UART模块16byteFIFO测试
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落叶凋凌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值