ARM的串行口实验.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程名称:嵌入式技术开课机房:11号机房
2012年4月1日星期二8:10~11:35
专业班级通信
09( 班
学号
Xb09680204
姓
名
江
立
坤
实验项目名称实验3——
ARM的串行
口实验
指导教师陈玮
一、实验任务与实验目的
实验目的1. 了解UART的基本知识
2. 掌握基于群星系列CM3程序库的UART配置、数据收发编程
3. 学会串口调试助手或超级终端的使用
实验任务任务一:使用Stellaris驱动库函数,编写可以接收及发送字符串的基于EASY ARM 8962开发板的UART驱动程序
任务二:在Microsoft Visual Studio开发环境下,使用C#编写一桌面程序,要求可以通过串口发送指令,使用其打开LED3~LED6。命令协议可以自己定义。
二、报告内容
任务一
#include"uartGetPut.h"
#include"systemInit.h"
#include
#include
#include
#define PART_LM3S8962
#include
// 定义接收缓冲区
#define MAX_SIZE 40 // 缓冲区最大限制长度
char RxBuf[1 + MAX_SIZE]; // 接收缓冲区
int BufP = 0; // 缓冲区位置变量
tBoolean RxEndFlag = false; // 接收结束标志
// UART2中断服务函数
void UART0_ISR(void {
char c;
unsigned long ulStatus;
ulStatus = UARTIntStatus(UART0_BASE, true; // 读取当前中断状态
UARTIntClear(UART0_BASE, ulStatus; // 清除中断状态
if ((ulStatus & UART_INT_RX || (ulStatus & UART_INT_RT // 若是接收中断或者{ // 接收超时中断
for (;; {
if (!UARTCharsAvail(UART0_BASE
break; // 若接收FIFO里无字符则跳出
c = UARTCharGetNonBlocking(UART0_BASE; // 从接收FIFO里读取字符
if (c == '\r' {
UARTCharPut(UART2_BASE, '\r'; // 回显回车换行
UARTCharPut(UART2_BASE, '\n';
RxEndFlag = true; // 接收结束标志置位
break;
}
if (isprint(c // 若是可打印字符
{
if (BufP < MAX_SIZE {
UARTCharPut(UART2_BASE, c; // 回显
RxBuf[BufP++] = c;
RxBuf[BufP] = '\0';
}
}
}
}
}
// 以FIFO中断方式接收一个字符串,不回显,返回实际接收到的有效字符数int uartFIFOGets(char *s, int size {
int n;
while (!RxEndFlag
;
n = BufP;
BufP = 0;
RxEndFlag = false;
strncpy(s, RxBuf, size;
s[MAX_SIZE] = '\0';
return (n;
}
// UART初始化
void uartInit(void {
SysCtlPeripheralEnable (SYSCTL_PERIPH_UART0; SysCtlPeripheralEnable (U0TX_PERIPH; // 使能RX/TX所在的GPIO端口GPIOPinTypeUART(U0RX_PORT, // 配置RX/TX所在管脚为
U0RX_PIN; // UART收发功能
GPIOPinTypeUART(U0TX_PORT, // 配置RX/TX所在管脚为
U0TX_PIN; // UART收发功能
UARTConfigSet(UART0_BASE, // 配置UART端口
9600, // 波特率:9600
UART_CONFIG_WLEN_8 | // 数据位:8
UART_CONFIG_STOP_ONE | // 停止位:1
UART_CONFIG_PAR_NONE; // 校验位:无
UARTFIFOLevelSet(UART0_BASE, // 设置收发FIFO中断触发深度
UART_FIFO_TX2_8, // 发送FIFO为2/8深度(4B)
UART_FIFO_RX6_8; // 接收FIFO为6/8深度(12B)
UARTIntEnable(UART0_BASE, UART_INT_TX; // 使能发送中断
IntEnable (INT_UART0; // 使能UART总中断
IntMasterEnable(; // 使能处理器中断
UARTEnable (UART0_BASE; // 使能UART端口
}
// 通过UART发送一个字符
void uartPutc(const char c {
UARTCharPut(UART0_BASE, c;
}
// 通过UART发送字符串