LPC1114 UART收发实验

发布者:SereneGardener最新更新时间:2016-07-15 来源: eefocus关键字:LPC1114  UART  收发实验 手机看文章 扫描二维码
随时随地手机看文章
       串口是很多实验的基础,可以作为其他实验运行的验证。在做LPC1114 UART实验时,发现的例程只有发送函数,而且是发送字符串的,所以本人完善了一些,添加了一个发送字符串的函数UARTSendByte(),一个接受字符的函数UARTReceiveByte(),一个接受字符串函数UARTReceive()。具体的代码如下:

// 发送字符函数

/*****************************************************************************
** Function name:  UARTSendByte
**
** Descriptions:  Send a block of data to the UART 0 port based
**    on the data Byte
**
** parameters:  send data
** Returned value: None
**
*****************************************************************************/
void UARTSendByte(uint8_t dat)
{
   while ( !(LPC_UART->LSR & LSR_THRE) )
   {
    ;                                // 等待数据发送完毕
   }

   LPC_UART->THR = dat;
}

 

// 接受字符函数

/*****************************************************************************
** Function name:  UARTReceiveByte
**
** Descriptions:  Receive a block of data to the UART 0 port based
**    on the data Byte
**
** parameters:  None
** Returned value: Byte
**
*****************************************************************************/
uint8_t UARTReceiveByte(void)
{
 uint8_t rcvData;

 while (!(LPC_UART->LSR & LSR_RDR))
 {
  ;                                // 查询数据是否接收完毕
 }

 rcvData = LPC_UART->RBR;             // 接收数据
 return (rcvData);
}

 

// 接收字符串函数

/*****************************************************************************
** Function name:  UARTReceive
**
** Descriptions:  Receive a block of data to the UART 0 port based
**    on the data Length
**
** parameters:  buffer pointer, and data length
** Returned value: Note
**
*****************************************************************************/
void UARTReceive(uint8_t *BufferPtr, uint32_t Length)
{
 while (Length--)
 {
     *BufferPtr++ = UARTReceiveByte();    // 把数据放入缓冲
 }
}

 

// 主函数

int main(void) {
 
 // TODO: insert code here
 uint8_t ch = 0;

 UARTInit(9600);
 LPC_UART->IER = IER_THRE | IER_RLS; // 设置中断使能寄存器

 UARTSend((uint8_t *)Buffer, 10);

 while (1)
 {
  ch = UARTReceiveByte();         // 接收字符
  if (ch != 0x00)
  {
         UARTSendByte(ch);           // 发送接收数据
  }
 }

 // Enter an infinite loop, just incrementing a counter
 volatile static int i = 0 ;
 while(1) {
  i++ ;
 }
 return 0 ;
}

实验图片如下:

IMG_3379.JPG

 IMG_3380.JPG (70.52 KB)

2010-5-14 06:54

IMG_3380.JPG

 IMG_3381.JPG (76.79 KB)

2010-5-14 06:54

IMG_3381.JPG

 IMG_3382.JPG (72.08 KB)

2010-5-14 06:54

IMG_3382.JPG

串口我用的是USB转串口进行调试的,如果先打开串口进行,再连接实验板时会提示如下:

 

LPC1114 UART收发实验(原创) - 我心永恒 - ARM-新的梦想

 

 

此时如果点击"OK",将提示如下错误:

 

 

此时应该点击如下图红圈的地方,LPC-Link,然后点击“OK”即可正常连接。

2010-5-14 07:10

3.jpg

 


关键字:LPC1114  UART  收发实验 引用地址:LPC1114 UART收发实验

上一篇:LPCXpresso 平台的使用感受
下一篇:ARM学习1-LED流水灯

推荐阅读最新更新时间:2024-03-16 15:00

STM32--UART异步通信学习
字符发送的过程描述:在UART的发送过程中先将数据输入到发送数据寄存器中(TDR)此时(TXE)被硬件置1,之后TDR寄存器将数据串行移入到发送移位寄存器中,将数据在TX端口发送,此时(TC)被硬件置1。 发送与接收是逆过程。 UART发送配置步骤: 1.通过USART_CR1寄存器上置位UE来激活USART。 2.编程USART_CR1的M位来定义字长。 3.在USART_CR2中编程停止位的位数。 4.如果采用多缓冲器通信,配置USART_CR3中的DMA使能位(DMAT)。按多缓冲器通信中的描述配置DMA寄存器。 5.利用USART_BRR寄存器选择要求的波特率。 6. 设
[单片机]
如何在keil中快速配置lpc1114主频
这里以KEIL 4.60版本为例进行说明,低于此版本,可能不适合现在我所讲的内容。 打开启动代码文件startup_LPC11xx.s,从第122行看起,代码如下所示: Reset_Handler PROC EXPORT Reset_Handler IMPORT SystemInit IMPORT __main LDR R0, =SystemInit BLX R0 LDR R0, =__main BX R0 ENDP 这是单片机复位以后执行的源头,可以看到,程序并不是先从main函数开始执行,而是先执行SystemInit函数,之后才进入main函数。SystemInit函数即时钟配置函数,此函数已经
[单片机]
如何在keil中快速配置<font color='red'>lpc1114</font>主频
LPC23XX的PCONP与UART2和UART3
LPC2368的UART2、UART3与UART0、UART1有什么区别? 同样的处理方法UART0、UART1正常,UART2、UART3死机,下面是那段程序: #include LPC23xx.h #define CR 0x0D void Delay(unsigned int cnt) { do { cnt--; } while(cnt!=0); } int sendchar0 (int ch) { if (ch == '\n') { while (!(U0LSR & 0x20)); U0THR = CR; /* OUTPUT CR */ }
[单片机]
STM32F4 UART1 DMA发送和接收不定长度数据
STM32F4 串口收发使用DMA还是很方便的。但是配置DMA时需要配置数据长度,这一点对于发送来说可以预估计自己发送的长度来配置DMA发送数据长度,但是对于接收不是很好解决,因为如果使用DMA接收中断是要配置的数据长度减到0才能出发中断。但是我们无法判断接受数据的长度,导致无法判断数据接收完成。网上有提出的解决方法是用定时器固定周期的读DMA接收的长度来判断是否接收完成,也有使用UART的空闲中断来处理的。在这里我使用UART的空闲中断来处理接收不定长数据。当然也要打开DMA接收完成中断,处理数据接收超过DMA配置的长度导致的DMA接收中断。 1.使用DMA发送时每次发送数据前需要配置发送的数据长度,此时要注意应先关闭DMA,然
[单片机]
lpc1114 adc中断
观察DR寄存器bit31位来确认是否转换完成,属于查询方式,如果没有转换完成,程序会停在检测的那条语句处,不能做其他的事情,极大的浪费了处理器的资源,这一节,介绍更为效率的中断方式。 给ADINTEN寄存器对应ADINT位写1,当ADC转换完成后,会引发ADC转换中断。 ADINTEN寄存器: 位 符号 描述 复位值 7:0 ADINT 这个位决定了哪个通道转换完成后产生中断。例如:当bit1=1,当AD1通道转换完成后,产生中断 0x00 8 ADGINT 如果这个位是1,当全局DR寄存器的DONE位置1,引发中断 注意:当BURST=1,即硬件扫描模式下,如果用中断,只能用bit7:0这个位必须为0 1 31:9
[单片机]
第4课:UART串口编程
首先明确一点:我们学习的串口是异步串口。在传输时,他们各自有各自的时钟。就是我们说的波特率。 我们学习的RS232与UART的区别是,UART使用标准的TTL/COMS电平 进过一个芯片使它的高低电平从TTL中0与3.3V 变成了 低电平5v到15v 高电平-3v到-12v。 首先说一下串口的数据帧格式。它由一个开始位,数据位,校验位和停止位组成。 平时数据处于1状态。 当要开始发送时,从UART改变TxD数据变成0状态1个位的时间,在接受端到0之后的1.5位的时间,接收端开始接受数据。 数据位分为5,6,7,8。四种类型的数据位。之后就是校验位站1位,可以设置也可以不设置。最后的是停止位。可以是1位,1.5位,2位。这个
[单片机]
第4课:<font color='red'>UART</font>串口编程
lpc1114深度掉电模式Deep power-down mode
在深度掉电模式,除了WAKUP引脚(P1.4),整个芯片都停止工作,而且只有4个32位的寄存器可供存储用户数据,内部SRAM中的数据都会丢失。 1. 怎样进入深度掉电模式 执行以下步骤进入深度掉电模式: 1. 设置PCON寄存器的DPDEN位为1; 2. 把防止丢失的数据存储到通用寄存器; 3. 设置SCR寄存器中的SLEEPDEEP位为1; 4. 在进入深度掉电模式之前,确保PDRUNCFG寄存器中的IRCOUT_PD位和IRC_PD位为0; 5. 执行WFI指令。 2. 进入深度掉电模式后,如何唤醒单片机 进入深度掉电模式,只有一种途径可以唤醒单片机,那就是通过WAKUP引脚上的下降沿唤醒。 3 示例程序 为了很容易的看到效果
[单片机]
<font color='red'>lpc1114</font>深度掉电模式Deep power-down mode
Exar推出两款内置电平转换器的通用异步收发器 (UART)
2010德国慕尼黑电子元件展上, Exar 公司 (纳斯达克: EXAR)发布两款集成了电平转换器的UART。XR16M890和XR20M1280分别是业内速率最快的8-bit/VLIO和I2C/SPIUART,最高的数据传输率可达24 Mbps。Exar公司8-bit/VLIO和 I2C/SPI接口产品备受市场肯定,而作为该系列产品的新丁,这两款产品针对手持设备的广泛应用,包括智能电话、蓝牙、PDA、GPS系统以及其它的电池式设备。 XR16M890和 XR20M1280的主要区别是CPU总线接口。XR16M890带有一个可选的8位Intel、Motorola、VLIO 总线接口。XR20M1280带有一个可选的I
[电源管理]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved