实验目标
配置TM4C123G的板载UART串口,使其能用类似printf的函数与输出字符到电脑端。
配置过程
1、TM4C123G的串口结构图
2、引脚映射表
3、开发板原理图
4、配置流程和相关函数
从上述资料可以看到,实验中用到的是UART0,Rx对应PA0,Tx对应PA1
1)使能URAT外设
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
2)设置输入输入引脚
GPIOPinConfigure(GPIO_PA0_U0RX);//RX=GPIO_PIN_0
GPIOPinConfigure(GPIO_PA1_U0TX);//TX=GPIO_PIN_1
GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
3)设置UART时钟频率
设置时钟16MHZ
UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC);
4)设置波特率
UARTStdioConfig(0,baud, 16000000);//参数分别是UART编号,波特率,UART时钟频率
5)另一种串口设置方法
3)和4)完成了重定向,类似在STM32中stdio对printf的重定向,有所不同的是,Tiva C重定向后的函数是UARTprintf(),且需要包uartstdio.c文件
3)和4)的一种替代方法,但是在用uartstdio.c对printf重定向时不能用以下方法设置UART
UARTConfigSetExpClk(UART0_BASE, SysCtlClockGet() , baud, (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE));
代码
串口配置头文件
#ifndef __MY_TIVA_UART_H
#define __MY_TIVA_UART_H
#include "sys.h"
void Uart_Init(uint32_t baud);
#endif
串口配置c文件
#include "my_Tiva_uart.h"
void DEBUG_Handler(void)
{
uint32_t status=0;
// uint8_t res=0;
UARTIntClear( UART0_BASE , UART_INT_OE );
UARTRxErrorClear( UART0_BASE );
status=UARTIntStatus(UART0_BASE, true);
UARTIntClear(UART0_BASE,status);
}
void Uart_Init(uint32_t baud)
{
//enable the UART peripheral
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
// set Rx/Tx pins as UART pins
GPIOPinConfigure(GPIO_PA0_U0RX);//RX=GPIO_PIN_0
GPIOPinConfigure(GPIO_PA1_U0TX);//TX=GPIO_PIN_1
GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
//以下配置可以使用UARTprintf
UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC); //时钟16MHZ
UARTStdioConfig(0,baud, 16000000);//参数分别是UART编号,波特率,UART时钟频率
// UARTIntEnable(UART0_BASE,UART_INT_RX);
UARTIntRegister(UART0_BASE,DEBUG_Handler);
UARTFIFODisable(UART0_BASE);
}