🔬 实验06:GPIO 与串口补课
📌 实验目标
- 复习巩固 GPIO 的知识点
- 了解串口通信的基本概念
- 理解波特率、数据格式等术语
- 为后续串口通信实验做铺垫
一、实验内容
- 复习 GPIO 八种工作模式
- GPIO 速度选择与功耗的关系
- 串口通信基础:异步、起始位、数据位、停止位
- 串口电平标准:TTL 与 RS-232
二、串口数据帧结构
异步串口一帧数据按以下顺序发送:起始位(1) + 数据位(8) + 校验位(0/1) + 停止位(1/1.5/2)。空闲时 TX 线为高电平,起始位拉低表示「开始传数据」。
| 组成部分 | 电平 | 说明 |
|---|---|---|
| 空闲 | 高电平 | 无数据时的默认状态 |
| 起始位 | 低电平(1位) | 接收方据此对齐采样时钟 |
| 数据位 | 低位在前(8位) | 如字符 'A'(0x41) 逐位发送 |
| 停止位 | 高电平(1位) | 一帧结束,回到空闲态 |
波特率是什么?怎么算?
// 波特率 = 每秒传输的比特数(bit/s)。115200 表示每秒传 11.52 万个二进制位。
// 发送 1 个字符 'A'(8bit) 约需 1 帧 = 起始1 + 数据8 + 停止1 = 10 位
// 耗时 ≈ 10 / 115200 ≈ 86.8 us
// 发送字符串 "Hello" 的完整流程:
void Uart_SendByte(uint8_t ch)
{
USART_SendData(USART1, ch); // 写入数据寄存器 DR
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
// ↑ 等待 TXE 置位(发送缓冲空)再发下一个字节
}
void Uart_SendString(char *str)
{
while (*str)
{
Uart_SendByte((uint8_t)*str++);
}
}💡 这段代码怎么用?
Uart_SendByte是串口发送的基本单元,几乎所有串口程序都建立在它之上Uart_SendString用它连续发送一串字符——调试时打印「运行到哪一步」非常方便- 发送必须等上一个字节发完(检查 TXE 标志),否则会丢数据
三、参考资料
| 资料 | 文件 |
|---|---|
| GPIO与串口补课 PPT | 实验2 GPIO口与串口通信.pptx |
📎 知识关联本实验复习大课 第2讲 GPIO 口,预习 第5讲 串口 的内容。