




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验一 串口通讯实验一、 实验目的1. 掌握ARM的串行口工作原理。2. 学习编程实现ARM的UART通讯。3. 掌握S3C2410寄存器配置方法。二、 实验内容实现查询方式串口的收发功能。接收来自串口(通过超级终端)的字符并将接收到的字符发送到超级终端。 三、 预备知识1.了解ADS集成开发环境的基本功能。 2.学习串口通讯的基本知识。3.熟悉S3C2410串口有关的寄存器。四、 实验设备硬件:2410s教学实验箱、ARM920T的JTAG仿真器、串口连接线。软件:ARM ADS1.2集成开发环境、超级终端通讯程序。五、 实验步骤 1.以实验一为模板,完成实验的1和2。 2.将接收串口数据的数组cl1改为cl256,用cli=0x0d 回车字符作为一帧结束的条件。 3.将“Exp4 电机转动控制实验” inc目录下的MotorCtrl.H 和src目录下的MotorCtrl.C拷到该工程相应目录,将MotorCtrl.C 添加到工程中。 4.在main函数里包含以下头文件 #include “./inc/MotorCtrl.h”。 5.在main函数里包含以下头文件 #include “inc/macro.h“ , #define MOTOR_COUNT 12657 6.在Main函数里执行init_MotorPort(); 7.直流电机调试的函数是 SetPWM(setspeed -512)*MOTOR_COUNT/1024),setspeed是速度指令,取值范围01023. 8.程序代码如下:/*Copyright (c) 2004-2007 , All rights reserved.by threewter2004.5.12*/* #说明: C main 函数,ucos-ii初始化等定义- Bug - TODO list -修正-2004-5-12创建*/#include./ucos-ii/includes.h /* uC/OS interface */#include ./ucos-ii/add/osaddition.h/#include ./inc/drivers.h/#include ./inc/sys/lib.h/#include ./src/gui/gui.h#include ./inc/MotorCtrl.h#include ./inc/macro.h#define MOTOR_COUNT 12657#define U8 unsigned char#include #include #define TRUE 1#define FALSE 0/#pragma import(_use_no_semihosting_swi) / ensure no functions that use semihosting #define rUTRSTAT0(*(volatile unsigned *)0x50000010)#define rUTRSTAT1(*(volatile unsigned *)0x50004010)#define WrUTXH0(ch)(*(volatile unsigned char *)0x50000020)=(unsigned char)(ch)#define WrUTXH1(ch)(*(volatile unsigned char *)0x50004020)=(unsigned char)(ch)#define RdURXH0()(*(volatile unsigned char *)0x50000024)#define RdURXH1()(*(volatile unsigned char *)0x50004024)/void Uart_SendByten(int Uartnum, U8 data);void Uart_SendByten(int,U8*);char Uart_Getchn(char* Revdata, int Uartnum, int timeout);char String2BCD(char *Revdata, char *BCDcode);char SetMotorSpeed(char *BCDcode);void ARMTargetInit(void);void hudelay(int time);void printBCD(char *BCDcode) for(int i=0;i4;i+) while(!(rUTRSTAT0 & 0x4); /Wait until THR is empty.hudelay(10);WrUTXH0(BCDcodei+0); int main(void) /int ndev; char c1256; char Bcd4; char err;ARMTargetInit(); / do target (uHAL based ARM system) initialisation / init_MotorPort(); / 执行电机初始化while(1) /Uart_SendByten(0,0xa);/换行/Uart_SendByten(0,0xd);/回车 err=Uart_Getchn(c1,0,0);/从串口采集数据 /Uart_SendByten(0,hellon); if(String2BCD(c1, Bcd) if(SetMotorSpeed(Bcd) Uart_SendByten(0,MotorSpeed = ); printBCD(Bcd); Uart_SendByten(0,rn); else Uart_SendByten(0,Too Large.); Uart_SendByten(0,c1); Uart_SendByten(0,rn); else Uart_SendByten(0,Invalid.rn); Uart_SendByten(0,c1); Uart_SendByten(0,rn); /if (err=TRUE) / Uart_SendByten(0,c10);/显示采集的数据char String2BCD(char *Revdata, char *BCDcode) int i; for(i = 0; i 4; i+) BCDcodei = 0; for(i = 0; i = 0 & Revdatai = 9) for(int j = 0; j 4 - 1; j+) BCDcodej = BCDcodej + 1; BCDcode3 = Revdatai - 0; else if(i & Revdatai = 0X0D) return TRUE; else return FALSE; if(Revdata4 = 0X0D) return TRUE; else return FALSE;char SetMotorSpeed(char *BCDcode) int speed = 0; for(int i = 0; i = 1024) return FALSE; SetPWM(speed - 512) * MOTOR_COUNT / 1024); return TRUE;void Uart_SendByten(int Uartnum, U8 *data)/ok eric rong int i = 0; if(Uartnum=0) while(datai!=0 & i=255) return FALSE; elsewhile(!(rUTRSTAT1 & 0x1);/Receive data read*Revdata=RdURXH1();return TRUE;六、 实验思考1. 232串行通讯的数据格式是什么?RS-232属于“异步传输”,在传送数据时,并不需要另外使用一条传输线来传送同步信号,不过必须在每一组数据的前后都加上同步信号,把同步信号与数据混和之后,使用同一条传输线来传输。从低位到高位的一帧数据格式为:-起始位(Start)+数据位(Data)+奇偶校验位(Parity)+停止位(Stop)-其中起始位固定为一个比特,停止位则可以是1、1.5或者是2比特(传送与接受一致),数据位可以设置为7、8或者9,奇偶校验位可以设置为无(N)、奇(O)或者偶(E),奇偶校验位可以使用数据中的比特。2. 串行通讯最少需要几根线,分别如何连接?以9芯D型插头为例,至少需要3根数据线:串口的2脚(发送数据TXD)与另一串口的3脚(接收数据RXD)连接,同时两串口的5脚(信号地)连接在一起。3. ARM的串行口有几个,相应的寄存器是什么? 2410/2330自带3个UART端口通道,每个通道都可以工作于中断或者DMA模式,且都有16字节的FIFO用于数据发送和接受。涉及的寄存器有:1)涉及的UART通道管脚设置寄存器如设置rGPHCON将GPH2、GPH3引脚的功能设为TXD0、RXD0;2)波特率设置寄存器rUBRDIVn(n=02);3)线控制寄存器rULCONn,主要用来选择每帧数据位和停止位宽度,奇偶校验模式及是否使用红外模式;4)控制寄存器rUCONn,用于选择UART时钟源、设置中断方式、接受超时时能、接受错误状态中断使能等;5)FIFO设置寄存器rUFCONn与FIFO状态寄存器rUFSTATn;6)流量控制寄存器rUMCONn与流量状态寄存器rUMSTATn;7)发送/接受状态寄存器rUTRSTATn,用来表明数据是否已经发送完毕、是否已经接受到数据;8)错误状态寄存器rUERSTATn,用来表示各种错误是否发生如溢出错误、校验错误、帧错误等;9)发送缓冲数据寄存器rUTXHn与接受数据缓冲寄存器rURXHn。4. 用中断方式实现串口驱动。 答:一种简单的利用中断方式实现的串口驱动设计:1)接受串口数据函数int recv_comData(char* dest, int count)函数流程:首先设置rINTMSK打开串口接受中断,然后挂起等待一个标识数据接受完毕的全局变量IsReady变为真,然后从全局缓冲区RxbufferMAX_LEN复制count字节数据到dest所指的目标地址并返回;当串口数据到达时,在相应的IRQ中断服务程序中,接受串口数据至缓冲区RxbufferMAX_LEN,并设置全局变量IsReady为真值,然后清除并关闭串口接受中断。2)发送串口数据函数int send_comData(char* sr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广西玉林市2022-2023学年九年级上学期期中化学试题(含答案)
- 2025医用眼科器械消毒处理标准流程
- 高级茶艺师基础知识培训课件
- 高端养老院长培训课件
- 备考三支一扶考试真题及答案
- 电焊搭棚知识培训内容课件
- 北京辅警文员考试真题及答案
- 北航安全准入考试题库及答案
- 保山学院开学考试试题及答案
- 脑筋转弯考试题及答案
- 网络安全测验题目及答案
- 2025至2030中国密封圈行业项目调研及市场前景预测评估报告
- 2025苏教版三年级上册数学教学计划 (三篇)
- 2025-2026学年湘科版(2017)小学科学四年级上册教学计划及进度表
- 微量物证检验技术
- 2025-2026学年苏教版(2024)小学数学一年级上册教学计划及进度表
- 2025年幼儿园指南考试题目及答案
- 医美行业监管趋势下2025年美容整形手术的市场需求与消费者行为分析报告
- 2025年中煤财务岗笔试题及答案
- 中西医结合医师岗位面试问题及答案
- 果场退伙协议书
评论
0/150
提交评论