nbhkdz.com冰点文库

学习小结--串口通信原理

时间:2011-10-19


串口通信原理 一 波特率设置

例程如下 Fdiv = (Fpclk / 16) / UART_BPS;//设置波特率 U0DLM = Fdiv / 256; 高八位 U0DLL = Fdiv % 256; 低八位

. 二. 几个寄存器 U0RBR 1,U0RBR 接收寄存器
如:RECEIVE_BUFFER[i++] = U0RBR;//把接收到的数据放到接收缓冲区

U0THR 2,U0THR 发送寄存器
如: U0THR = data; //把要发送的数据直接放在寄存器即可

3

U0LCR 线控制寄存器

特别注意的是:我们在设置波特率之前必须使能访问除数锁存 即要使 U0LCR = 0x83 0x83(除数锁存位为 1 bit 7】=1 bit【7 =1 =1)

1

4

U0LSR 线状态寄存器

2

串口中断的寄存器放到中断里面总结



lpc2136 发送数据(lpc2136 发给电脑)

1,怎么发送,发送到哪里?

U0LCR 注意:如果要访问 U0THR 线控制寄存器(U0LCR U0LCR)的第七位(除数锁存访问 位 DLAB 即 bit[7] bit[7]位)必须为 0 U0THR 为只写寄存器

2,怎么判断发送完成?

3

Hello World!” 例程 通过代码实现发送“Hello World!
/**************************************************************************** * 文件名:main.c * 功 能:向串口发送数据,在PC上用超级终端或串口助手就可以收到“Hello World!”字符串 * 说 明:使用外部.0592MHz晶振,根据CONFIG.H文件配置,Fpclk=11.0592MHz; * 通讯波特率,位数据位,位停止位,无奇偶校验。 ****************************************************************************/ #include "config.h" #define UART_BPS 115200 // 定义通讯波特率 uint8 const SEND_STRING[] = "Hello World!\r\n"; /**************************************************************************** * 名 称:DelayNS() * 功 能:长软件延时 * 入口参数:dly 延时参数,值越大,延时越久 * 出口参数:无 ****************************************************************************/ void DelayNS(uint32 dly) { uint32 i; for(; dly>0; dly--) { for(i=0; i<5000; i++); } } /**************************************************************************** * 名 称:UART0_Ini() * 功 能:初始化串口。设置为位数据位,位停止位,无奇偶校验,波特率为 * 入口参数:无 * 出口参数:无 ****************************************************************************/ void UART0_Init(void) { uint16 Fdiv; U0LCR = 0x83; // DLAB = 1,可设置波特率 Fdiv = (Fpclk / 16) / UART_BPS; // 设置波特率 U0DLM = Fdiv / 256;

4

U0DLL = Fdiv % 256; U0LCR = 0x03; } /**************************************************************************** * 名 称:UART0_SendByte() * 功 能:向串口发送字节数据,并等待发送完毕。 * 入口参数:data 要发送的数据 * 出口参数:无 ****************************************************************************/ void UART0_SendByte(uint8 data) { U0THR = data; // 发送数据 while( (U0LSR&0x40)==0 ); // 等待数据发送完毕 } /**************************************************************************** * 名 称:UART0_SendStr() * 功 能:向串口发送一字符串 * 入口参数:srt 要发送的字符串的指针 * 出口参数:无 ****************************************************************************/ void UART0_SendStr(uint8 const *str) { while(1) { if( *str == '\0' ) break; UART0_SendByte(*str++); // 发送数据 } } /**************************************************************************** * 名 称:main() * 功 能:向串口UART0发送字符串"Hello World!" ****************************************************************************/ int main(void) { PINSEL0 = 0x00000005; // 设置I/O连接到UART0 UART0_Init(); while(1) { UART0_SendStr(SEND_STRING); DelayNS(10); } return(0); } //bit[7]=0

四 接收数据(lpc2136 从电脑接收数据)
5

4.1,数据放哪里?
接收到的数据放在U0RBR 寄存器, U0RBR 是UART0 Rx FIFO 的最高字节。它包含了最早 接收到的字节,可通过总线接口读出。LSB (bit0)代表最早接收到的数据位。如果接收 到的字符小于8 位,未使用的MSB 填充为0。 如果要访问U0RBR,U0LCR 的除数锁存访问位(DLAB)必须为0。U0RBR 为只读寄存 器。

4.2 怎么知道接收到了数据?
LPC2114 是通过U0LSR(线状态寄存器)的bit[0]来指示U0RBR 接收到了数据的。 所以,我们程序就可以根据读取该位来判断是否有新的数据。 如果U0LSR[0]=1,U0RBR 包含有效数据。 U0RBR 中的数据读出后,U0LSR[0]位被清零。 例程:

#include "config.h" #include "delay.h" #define UART_BPS 115200//定义通讯波特率 #define BEEP 1<<5; #define LED1 1<<16 #define LED2 1<<17 #define LED3 1<<18 #define LED4 1<<19 int8 RECEIVE_BUFFER[4]; int8 L11[]="L11"; int8 L10[]="L10"; int8 L21[]="L21"; int8 L20[]="L20"; int8 L31[]="L31";

6

int8 L30[]="L30"; int8 L41[]="L41"; int8 L40[]="L40"; int8 B1[]="B1"; int8 B0[]="B0";

void initSystem() { IO1SET = LED1 | LED2 | LED3 | LED4; IO1DIR = LED1 | LED2 | LED3 | LED4; IO0CLR = BEEP; IO0DIR = BEEP; }

/****************************************************************************

*名称:UART0_Ini() *功能:初始化串口。设置为位数据位,位停止位,无奇偶校验,波特率为 *入口参数:无 *出口参数:无 ****************************************************************************/ void UART0_Init(void) { uint16 Fdiv;

U0LCR = 0x83;// DLAB = 1,可设置波特率 Fdiv = (Fpclk / 16) / UART_BPS;//设置波特率 U0DLM = Fdiv / 256; U0DLL = Fdiv % 256; U0LCR = 0x03;

} uint8 matchled(int8 { unsigned int i, a; for(i=0;i<3;i++) { *str1 , int8 *str2)

7

if(str1[i] == str2[i]) { a=1; } else { a=0; break; } } return a; } uint8 matchbeep(int8 { unsigned int i, a; *str1 , int8 *str2)

for(i=0;i<2;i++) { if(str1[i] == str2[i]) { a=1; } else { a=0; break; } } return a; }

/****************************************************************************

*名称:main() *功能:从串口接收数据 并实现功能 ****************************************************************************/ int main(void) { unsigned int i=0,j;

8

PINSEL0 = 0x00000005;//设置 I/O 连接到 UART0 UART0_Init(); initSystem(); while(1) { while( (U0LSR&0x01)==0 );//判断接收寄存器是否有新的数据 RECEIVE_BUFFER[i++] = U0RBR;//把接收到的数据放到接收缓冲区 if(i==2) { if((matchbeep(RECEIVE_BUFFER,B1)) == 1) { IO0SET = BEEP; i=0; for(j=0;j<2;j++) { RECEIVE_BUFFER[j]= 0; } } if((matchbeep(RECEIVE_BUFFER,B0)) == 1) { IO0CLR = BEEP; i=0; for(j=0;j<2;j++) { RECEIVE_BUFFER[j]= 0; } } } if(i==3) { if((matchled(RECEIVE_BUFFER,L11)) == 1) { IO1CLR = LED1; }

9

if((matchled(RECEIVE_BUFFER,L10)) == 1) { IO1SET = LED1; } if((matchled(RECEIVE_BUFFER,L21)) == 1) { IO1CLR = LED2; } if((matchled(RECEIVE_BUFFER,L20)) == 1) { IO1SET = LED2; } if((matchled(RECEIVE_BUFFER,L31)) == 1) { IO1CLR = LED3; } if((matchled(RECEIVE_BUFFER,L30)) == 1) { IO1SET = LED3; } if((matchled(RECEIVE_BUFFER,L41)) == 1) { IO1CLR = LED4; } if((matchled(RECEIVE_BUFFER,L40)) == 1) { IO1SET = LED4; } i=0; for(j=0;j<3;j++) { RECEIVE_BUFFER[j]= 0; } } }

10

return(0); }

11


学习小结--串口通信原理.pdf

学习小结--串口通信原理_信息与通信_工程科技_专业资料。学习小结--ARM7串口通信原理 串口通信原理 一 波特率设置 例程如下 Fdiv = (Fpclk / 16) / UART_BPS...

串口学习心得.doc

串口学习心得 - 串口通信 无论是串口 1,串口 2,串口 3,其配置完全基本相同,且 stm32 的串口和 51 的串口其发送接收原理基本相同,发送字符和字符串有一定的...

第六讲 串口通信原理及操作流程_图文.ppt

第六讲 串口通信原理及操作流程 - 第六讲串口通信原理及操作流程 曾铁军 主要内

串口通信原理及操作流程_图文.ppt

串口通信原理及操作流程 - 第六讲串口通信原理及操作流程 曾铁军 主要内容 1

有关USART的技术总结.pdf

STM32(USART)串口通信总结杨龙(10.20) 一、概述 STM32(USART)串口通信是...简单的通信方式之一, 学习 USART 串口通信学习 stm32 系列芯片通信原理的比较...

串口通信原理详解_图文.ppt

串口通信原理详解 - 串口通信是相当重要的通信方式,该文档详细讲解了其原理,学习价值很高。。

串口通信原理及操作流程概要_图文.ppt

串口通信原理及操作流程概要 - 第六讲串口通信原理及操作流程 曾铁军 主要内容

串口通讯实验报告.doc

串口通讯实验报告_学习总结_总结/汇报_实用文档。网络编程与实践实验报告 实验...通过本次实验,我对串口通信原理有了更深的认识与理解,并对 MFC 界面制作...

0--RS232串口通信原理.doc

0--RS232串口通信原理 - rs232 串口通信原理 串口是计算机上一种非

物联网通信技术心得体会.doc

特别是在学习了物联网通信这门课之后让我更加了解了物联网,更加 向往物联网的...通过实验我们理解了串口通信原理,掌握了 CC2530 单片机与 PC 机串口的 通信的...

实验一简单的异步串行通信实验报告_图文.doc

实验一 简单的异步串行通信实验一、实验目的及要求 1、了解掌握 RS-232 接口标准以及 DB9 的主要引脚功能; 2、了解掌握串口通信的基本原理; 3、学习掌握 RS-232...

STC12C5410AD串口通信调试心得.doc

STC12C5410AD串口通信调试心得_学习总结_总结/汇报_实用文档。STC12C5410AD串口通信...4、实验硬件平台: 实验硬件为自制开发板 图一:原理图 图二:PCB 图三:实物...

学习小结--ARM7中断原理.doc

学习小结--ARM7中断原理 - 中断原理(定时器中断,外部中断,串口中断) 中断原理(定时器中断,外部中断,串口中断) 一,简单介绍 VIC(向量中断控制器)包括:FIQ, IRQ...

单片机应用技能实训教案--项目9.doc

4、串行口应用举例。 5、多机通信原理简介。 项目相关基本知识学习 年月日 ...课堂小结 1、串行口波特率。 2、串行口工作方式 1、2、3 及其应用。 3、...

3、基于ARM的串行口通讯实验_图文.ppt

实验二 ARM的串行口实 ARM的串行口实 验 1 实验内容学习串行通讯原理,了

基于VC++ 6.0的串口通信实验报告.doc

B机运行如下: 五、实验心得通过本次串口通信实验,让我对串口通信原理有了更近...同时通过本课程的学习,让我了解了数据通信基础知识;计算机网络体系结 构与协议;...

通信原理 6-1 串口通信理论及编程.ppt

西安工业大学 计算机学院信控系 通信原理 概论 第六章 串口通信理论及编程 串口通信硬件原理 由于CPU与接口之间按并行方式传输,接口 与接口之间按并行方式传输, ...

通信原理2.ppt

? 学习方法: 不准备考研的同学:侧重于基本原理和...如下图所示 例如局域网通信、USB串口通信都属于这...60 第一章 绪论 本章重点小结 1、单个符号的信息...

STM32之DMA_USART部分总结_信息与通信_工程科技_专业资料.pdf

内存之间的通信原理,另一方面能够 在后续学习 STM32 的 USB 等其他通信方式时...由于之 前已经对串口通信部分做了详细的总结, 所以这篇文档只对 DMA 的工 作...

第六讲 串口通信原理及操作流程_图文.ppt

第六讲 串口通信原理及操作流程 - 第六讲串口通信原理及操作流程 主要内容 1