一、什么是串口通信?
1.串口就像“对讲机”
假设你和朋友用对讲机交流,一个人说话(发送数据),另一个人听(接收数据)。
你们不能同时讲话,必须等对方说完再回应,这和串口通信的半双工模式很像。
如果你们都同时说话(或者都不说话),信息就会混乱,这就是为什么通信需要协议来约定规则。
二、CC2530 串口的基本组成
CC2530 的串口主要由 发送(TX) 和 接收(RX) 两个信号线组成,还有一些控制寄存器来管理通信。
| 组件 | 作用 |
| TX(发送端) | 负责把数据从 CC2530 发送出去 |
| RX(接收端) | 负责接收外部设备传来的数据 |
| 波特率 | 规定 “说话”的速度,比如 9600bps 就是每秒 9600 个比特 |
| 数据格式 | 规定每次传输的内容格式,如 8 位数据 + 1 个停止位 |
| 寄存器(U0DBUF) | 存放要发送和接收的数据 |
| 中断(UART0_ISR) | 发生数据传输时,通知 CPU 处理 |
三、数据是怎么传输的?
1. 发送数据(从 CC2530 发给其他设备)
流程:
- CPU 把数据写入 U0DBUF(数据寄存器)。
- 串口硬件把数据转换成电信号,通过 TX 引脚 发送出去。
- 另一端的设备(比如电脑)通过 RX 引脚 接收数据。
举例:你用 CC2530 发送 “Hello” 到电脑,CC2530 会把字符 “H” 转换成二进制 01001000 发送出去,接收端再解析出来显示 “H”。
2. 接收数据(从外部设备传输给 CC2530)
流程:
- 其他设备(如电脑)通过 TX 引脚 发送数据到 CC2530 的 RX 引脚。
- CC2530 自动把数据存入 U0DBUF。
- 如果设置了中断,CC2530 会通知 CPU 来处理数据。
举例:电脑发送 “OK” 到 CC2530,CC2530 依次收到 ‘O’ 和 ‘K’,并放入 U0DBUF 供 CPU 读取。
四、简单的代码示例
1. 初始化 CC2530 串口
#include <ioCC2530.h>
void UART0_Init(void) {
PERCFG &= ~0x01; // 选择 UART0 端口
P0SEL |= 0x0C; // P0_2(TX)和 P0_3(RX)设置为串口模式
U0BAUD = 59; // 设置波特率(9600)
U0GCR = 11;
U0CSR = 0x80; // 选择 UART 模式
U0UCR = 0x02; // 设置停止位、奇偶校验等
2. 发送数据
void UART0_SendByte(unsigned char data) {
U0DBUF = data; // 把数据放入发送寄存器
while (!(U0CSR & 0x02)); // 等待发送完成
}
3. 接收数据(中断方式)
#pragma vector = URX0_VECTOR
__interrupt void UART0_ISR(void) {
unsigned char received_data = U0DBUF; // 读取收到的数据
// 这里可以处理收到的数据,比如存入缓冲区