🔬 实验06:GPIO 与串口补课

📌 实验目标
  • 复习巩固 GPIO 的知识点
  • 了解串口通信的基本概念
  • 理解波特率、数据格式等术语
  • 为后续串口通信实验做铺垫

一、实验内容

  1. 复习 GPIO 八种工作模式
  2. GPIO 速度选择与功耗的关系
  3. 串口通信基础:异步、起始位、数据位、停止位
  4. 串口电平标准: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++);
    }
}
💡 这段代码怎么用?
  1. Uart_SendByte 是串口发送的基本单元,几乎所有串口程序都建立在它之上
  2. Uart_SendString 用它连续发送一串字符——调试时打印「运行到哪一步」非常方便
  3. 发送必须等上一个字节发完(检查 TXE 标志),否则会丢数据

三、参考资料

资料文件
GPIO与串口补课 PPT实验2 GPIO口与串口通信.pptx
📎 知识关联本实验复习大课 第2讲 GPIO 口,预习 第5讲 串口 的内容。