LPC2136串口通信详解及发送实例
4星 · 超过85%的资源 需积分: 50 160 浏览量
更新于2024-09-11
1
收藏 282KB PDF 举报
"这篇文章除了介绍串口通信的基本原理外,还提供了一段针对LPC2136微控制器的串口通讯实例,帮助初学者理解如何进行串口数据传输和设置。"
串口通信是计算机和电子设备之间进行数据交换的一种常见方式,特别是在嵌入式系统和工业自动化领域广泛应用。它基于异步通信协议,通常采用串行数据传输,数据一位一位地传输,相比并行通信,串口通信所需的硬件资源更少,但速度相对较慢。
在串口通信中,波特率是一个关键参数,决定了数据传输的速度。在LPC2136这样的微控制器中,波特率通常是通过设置除数来确定的。例如,Fdiv = (Fpclk/16) / UART_BPS,其中Fpclk是微控制器的时钟频率,UART_BPS是我们期望的波特率。设置好的波特率除数需要分别写入U0DLM(高八位)和U0DLL(低八位)寄存器。
在LPC2136中,有以下几个重要的串口控制寄存器:
1. U0RBR(接收寄存器):用于存储接收到的数据,例如RECEIVE_BUFFER[i++]=U0RBR; 将接收到的数据保存到接收缓冲区。
2. U0THR(发送寄存器):用于发送数据,如U0THR=data; 直接将要发送的数据放入该寄存器。
3. U0LCR(线控制寄存器):用于配置串口参数,如设置波特率前需将其设置为0x83,使能除数锁存位(bit7)。
4. U0LSR(线状态寄存器):用于检查串口的状态,如数据准备好、发送缓冲区空等。
在发送数据时,需要注意以下几点:
- 访问U0THR或设置波特率时,应确保U0LCR的DLAB位为0,以避免影响其他功能。
- U0THR是只写寄存器,一旦写入数据,就会立即开始发送。
- 发送完成后,通常通过检查U0LSR的特定位来判断是否可以发送下一位数据,如发送数据寄存器为空位(THRE位)。
以下是一个简单的发送"HelloWorld!"的例子:
```
#include "config.h"
void main(void) {
// 初始化串口设置,包括波特率等
...
const char *msg = "HelloWorld!\r\n";
while(*msg != '\0') {
while((U0LSR & 0x20) == 0); // 等待发送缓冲区空
U0THR = *msg++; // 发送字符并移动指针
}
}
```
这个程序首先初始化串口,然后逐个字符发送"HelloWorld!"字符串,直到发送完所有字符。在发送每个字符前,都会检查U0LSR的THRE位,确保发送缓冲区为空,以避免丢失数据。
串口通讯是一个基础且重要的技术,通过理解其工作原理和具体寄存器的使用,开发者能够有效地在不同设备间建立通信链路。这篇文章为初学者提供了宝贵的实践指导,帮助他们更好地理解和应用串口通信。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2014-03-28 上传
2016-07-12 上传
2009-08-07 上传
2024-03-13 上传
2020-08-17 上传
2012-01-31 上传
yangzhlu2006
- 粉丝: 0
- 资源: 1
最新资源
- 深入浅出:自定义 Grunt 任务的实践指南
- 网络物理突变工具的多点路径规划实现与分析
- multifeed: 实现多作者间的超核心共享与同步技术
- C++商品交易系统实习项目详细要求
- macOS系统Python模块whl包安装教程
- 掌握fullstackJS:构建React框架与快速开发应用
- React-Purify: 实现React组件纯净方法的工具介绍
- deck.js:构建现代HTML演示的JavaScript库
- nunn:现代C++17实现的机器学习库开源项目
- Python安装包 Acquisition-4.12-cp35-cp35m-win_amd64.whl.zip 使用说明
- Amaranthus-tuberculatus基因组分析脚本集
- Ubuntu 12.04下Realtek RTL8821AE驱动的向后移植指南
- 掌握Jest环境下的最新jsdom功能
- CAGI Toolkit:开源Asterisk PBX的AGI应用开发
- MyDropDemo: 体验QGraphicsView的拖放功能
- 远程FPGA平台上的Quartus II17.1 LCD色块闪烁现象解析