LM3S 库 中UART通信注解
#define u32 unsigned long;
#define u8 unsigned char;
GPIOPinTypeUART(u32 ulPort,u8 ucPins)
ulPort 填写对应的UART GPIO基地址
ucPins填写对应的UART GPIO管脚
如uart在GPIO的A系列管脚的PA0,和PA1口处
GPIOPinTypeUART(GPIO_PORTA_BASE,GPIO_PIN_0|GPIO_PIN_1);
SysCtlPeripheralEnable(u32 ulPeripheral);
ulPeripheral 填写相应要打开的外围设备
这里要打开UART对应的A系列外围和UART设备
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
二、UART库函数
1配置与控制
函数 UARTConfigSetExpClk( )用来对 UART端口的波特率、数据格式进行配置
在实际编程时, 往往用形式更简单的宏函数 UARTConfigSet( )来代替上述库函数。
宏函数UARTConfigSet( )
功能 UART配置(自动获取时钟速率)
原型 #define UARTConfigSet(a, b, c) UARTConfigSetExpClk(a, SysCtlClockGet( ), b, c)
说明
本宏函数常常用来代替函数UARTConfigSetExpClk( ),在调用之前应当先调用SysCtlClockSet( )函
数设置系统时钟(不要使用误差很大的内部振荡器IOSC、IOSC/4、INT30等)
示例
// 配置UART0:波特率9600,8个数据位,1个停止位,无校验
UARTConfigSet(UART0_BASE, 9600, UART_CONFIG_WLEN_8 |
UART_CONFIG_STOP_ONE |
UART_CONFIG_PAR_NONE);
// 配置UART1:波特率最大,5个数据位,1个停止位,无校验
UARTConfigSet(UART1_BASE, SysCtlClockGet( ) / 16, UART_CONFIG_WLEN_5 |
UART_CONFIG_STOP_ONE |
UART_CONFIG_PAR_NONE);
// 配置UART2:波特率2400,8个数据位,2个停止位,偶校验
UARTConfigSet(UART2_BASE, 2400, UART_CONFIG_WLEN_8 |
UART_CONFIG_STOP_TWO |
UART_CONFIG_PAR_EVEN);
函数UARTFIFOLevelSet( )用来设置收发FIFO触发中断
时的深度级别。
函数 UARTFIFOLevelSet( )
功能 设置使指定UART端口产生中断的收发FIFO 深度级别
原型
void UARTFIFOLevelSet(unsigned long ulBase,
unsigned long ulTxLevel,
unsigned long ulRxLevel)
参数
ulBase:UART端口的基址,取值UART0_BASE、UART1_BASE或 UART2_BASE
ulTxLevel:发送中断FIFO的深度级别,取下列值之一:
UART_FIFO_TX1_8 // 在1/8深度时产生发送中断
UART_FIFO_TX2_8 // 在1/4深度时产生发送中断
UART_FIFO_TX4_8 // 在1/2深度时产生发送中断
UART_FIFO_TX6_8 // 在3/4深度时产生发送中断
UART_FIFO_TX7_8 // 在7/8深度时产生发送中断
注:当发送FIFO里剩余的数据减少到预设的深度时触发中断,而非填充到预设深度时触发中断。因此在需要发送大量数据的应用场合,为了减少中断次数提高发送效率,发送FIFO中断触发深度级别设置的越浅越好,如设置为UART_FIFO_TX1_8。
ulRxLevel:接收中断FIFO的深度级别,取下列值之一:
UART_FIFO_RX1_8 // 在1/8深度时产生接收中断
UART_FIFO_RX2_8 // 在1/4深度时产生接收中断
UART_FIFO_RX4_8 // 在1/2深度时产生接收中断
UART_FIFO_RX6_8 // 在3/4深度时产生接收中断
UART_FIFO_RX7_8 // 在7/8深度时产生接收中断
注:当接收FIFO里已有的数据累积到预设的深度时触发中断,因此在需要接收大量数据的应
用场合,为了减少中断次数提高接收效率,接收FIFO中断触发深度级别设置的越深越好,如设置
为UART_FIFO_RX7_8。
2、使能与禁止
函数 UARTEnable( )和 UARTDisable( )用来使能和禁止 UART 端口的收发功能。一般是
先配置 UART,最后使能收发。当需要修改 UART 配置时,应当先禁止,配置完成后再使
能。
函数 UARTEnable( )
功能 使能指定UART端口的发送和接收操作
原型 void UARTEnable(unsigned long ulBase)
参数 ulBase:UART端口的基址,取值UART0_BASE、UART1_BASE或 UART2_BASE
返回 无
函数 UARTDisable( )
功能 禁止指定UART端口的发送和接收操作
原型 void UARTDisable(unsigned long ulBase)
参数 ulBase:UART端口的基址,取值UART0_BASE、UART1_BASE或 UART2_BASE
返回 无
3、 数据收发
函数 UARTCharPut( )以轮询的方式发送数据,如果发送 FIFO有空位则填充要发送的数
据,如果没有空位则一直等待。
函数 UARTCharGet( )以轮询的方式接收数据, 如果接收 FIFO里有数据则读出数据并返
回,如果没有数据则一直等待。
函数 UARTCharPut( )
功能 发送1个字符到指定的UART端口(等待)
原型 void UARTCharPut(unsigned long ulBase, unsigned char ucData)
参数
ulBase:UART端口的基址,取值UART0_BASE、UART1_BASE或 UART2_BASE
ulData:要发送的字符
返回 无(在未发送完毕前不会返回)
函数 UARTCharGet( )
功能 从指定的UART端口接收1 个字符(等待)
原型 long UARTCharGet(unsigned long ulBase)
参数 ulBase:UART端口的基址,取值UART0_BASE、UART1_BASE或 UART2_BASE
返回 读取到的字符,并自动转换为long型(在未收到字符之前会一直等待)
4、中断控制
UART 端口在收发过程中可产生多种中断,处理起来比较灵活。函数 UARTIntEnable( )
和 UARTIntDisable( )用来使能和禁止 UART 端口的一个或多个中断。
函数UARTIntClear( )用来清除UART的中断状态, 函数UARTIntStatus( )用来获取UART
的中断状态。
函数 UARTIntEnable( )
功能 使能指定UART端口的一个或多个中断
原型 void UARTIntEnable(unsigned long ulBase, unsigned long ulIntFlags)
参数
ulBase:UART端口的基址,取值UART0_BASE、UART1_BASE或 UART2_BASE
ulIntFlags:指定的中断源,应当取下列值之一或者它们之间的任意“或运算”组合形式:
UART_INT_OE // FIFO溢出错误中断
UART_INT_BE // BREAK错误中断
UART_INT_PE // 奇偶校验错误中断
UART_INT_FE // 帧错误中断
UART_INT_RT // 接收超时中断
UART_INT_TX // 发送中断
UART_INT_RX // 接收中断
注:接收中断和接收超时中断通常要配合使用,即UART_INT_RX | UART_INT_RT
返回 无
函数 UARTIntDisable( )
功能 禁止指定UART端口的一个或多个中断
原型 void UARTIntDisable(unsigned long ulBase, unsigned long ulIntFlags)
参数 参见表1.26的描述
返回 无
函数 UARTIntClear( )
功能 清除指定UART端口的一个或多个中断
原型 void UARTIntClear(unsigned long ulBase, unsigned long ulIntFlags)
参数 参见表1.26的描述
返回 无
函数 UARTIntStatus( )
功能 获取指定UART端口当前的中断状态
原型 unsigned long UARTIntStatus(unsigned long ulBase, tBoolean bMasked)
参数
ulBase:UART端口的基址,取值UART0_BASE、UART1_BASE或 UART2_BASE
bMasked:如果需要获取原始的中断状态,则取值false
如果需要获取屏蔽的中断状态,则取值true
返回 原始的或屏蔽的中断状态