这些是我自己常用的代码,比官方的要简洁些,主要是自用,还有相关模块,使用代码。
具体文件可以去我github上下载。
UART 简介
计算机与外部设备的连接,基本上使用了两类接口:串行接口与并行接口。并行接口是
指数据的各个位同时进行传送,其特点是传输速度块,但当传输距离远、位数又多时,通信
线路变复杂且成本提高。串行通信是指数据一位位地顺序传送,其特点是适合于远距离通信,
通信线路简单,只要一对传输线就可以实现双向通信,从而大大降低了成本。
串行通信又分为异步与同步两类。UART(Universal Asynchronous Receiver/Transmitter,
通用异步收发器)正是设备间进行异步通信的关键模块。它的重要作用如下所示:
- 处理数据总路线和串行口之间的串/并、并/串转换;
- 通信双方只要采用相同的帧格式和波特率,就能在未共享时钟信号的情况下,仅用
两根信号线(Rx 和 Tx)就可以完成通信过程; - 采用异步方式,数据收发完毕后,可通过中断或置位标志位的方式通知微控制器进
行处理,大大提高微控制器的工作效率。 - 若加入一个合适的电平转换器,如 SP3232E、SP3485,UART 还能用于 RS-232、RS-485
通信,或与计算机的端口连接。UART 应用非常广泛,手机、工业控制、PC 等应用中都要
用到 UART。
源码main函数
#include "systemInit.h"
#include <uart.h>
#include <ctype.h>
#include <string.h>
#include "uartGetPut.h"
#include <stdio.h>
#include <timer.h>
#define PART_LM3S1138
#include <pin_map.h>
#include <math.h>
char Num ;
// 主函数(程序入口)
int main(void)
{
jtagWait(); // 防止JTAG失效,重要!
clockInit(); // 时钟初始化:晶振,6MHz
uartInit(); // UART初始化
while(1)
{
}
}
void UART2_ISR(void)
{
unsigned long ulStatus;
ulStatus = UARTIntStatus(UART2_BASE, true); // 读取当前中断状态
UARTIntClear(UART2_BASE, ulStatus); // 清除中断状态
if ((ulStatus & UART_INT_RX) || (ulStatus & UART_INT_RT)) // 若是接收中断或者
{
Num = UARTCharGet(UART2_BASE); // 等待接收字符
if (Num == 'a'){ // 如果遇到a<CR>
}
}
}
startup_ewarm.c(修改优先级)
这些是要改的部分。
具体的就不讲解了,地址后期会附上