嵌入式学习 | STM32 裸板驱动开发(Day04)超详细复习笔记(早测复盘|独立看门狗 IWDG|USART 异步串口通信|串口综合作业 + RS232/RS485 深度对比) 📅 2026/6/28 8:29:17 前言本篇是 STM32 裸机开发系列第四天完整复盘笔记承接 Day02 GPIO 输入输出、Day03 SysTick 系统定时器与 BitBand 位带操作内容。内容分为四大模块当日早测核心考点复盘、独立看门狗 IWDG 底层原理与密钥寄存器详解、USART 串口通信完整理论与时序解析、串口驱动实操封装与课堂作业最后拓展工业常用 RS232、RS485 电平标准对比。早测采用口述原理形式要求完整梳理前三天三大核心外设完整驱动逻辑考察底层原理理解不局限于单纯代码背诵1. LED 外设驱动原理硬件基础LED 绑定 GPIO 引脚配置为推挽输出模式通过修改 ODR 输出寄存器电平控制亮灭两种操作方式标准库 GPIO_Write、底层寄存器直接赋值、BitBand 位带简化单引脚操作配套延时摒弃精度差的 for 空循环使用 SysTick 硬件定时器实现精准毫秒 / 秒级延时组合实现流水灯效果。2. 按键 KEY 输入驱动原理GPIO 配置按键引脚配置浮空输入 / 上拉输入常态高电平按下拉低读取逻辑读取 IDR 输入寄存器对应 bit 位电平判断按键触发配套延时SysTick 延时消抖解决机械按键高低电平抖动导致的误触发。3. SysTick 系统定时器原理内核外设Cortex-M3 内核自带 24 位递减定时器独立于片上外设定时公式定时时长 重装载计数值 / 定时器工作频率实验分频后 9MHz两种开发方式标准库封装函数、直接操作 CSR/RVR/CVR 三大寄存器优缺点计时精准、无阻塞优化空间单次最大定时 1s长延时需循环叠加标准库无关闭定时器 API寄存器操作自由度更高。二、独立看门狗 IWDGIndependent Watchdog2.1 看门狗设计初衷嵌入式设备长期运行时极易出现程序跑飞、死循环、硬件干扰卡死、数组越界死机等软件故障。一旦程序卡死设备将失去控制无法自动恢复。 独立看门狗是硬件级防护模块独立内部低速时钟不受主晶振失效影响计数器持续递减程序正常运行时定期喂狗重置计数若超时未喂狗计数器归零后硬件自动触发单片机系统复位设备重启恢复正常工作状态提升产品稳定性。2.2 IWDG 定时核心公式和 SysTick 定时计算逻辑完全统一方便记忆 定时时长重装载计数值工作频率时钟参数说明时钟来源内部 RC 低速时钟 LSI查阅《stm32f103RB.pdf》时钟树章节固定基准频率40KHz关键优势LSI 独立于 HSE 高速外部晶振、HSI 内部高速时钟即使主时钟损坏、程序死机IWDG 依旧正常运行不会失效。2.3 IWDG 核心密钥寄存器 KRKey RegisterIWDG 拥有写保护机制预分频寄存器 PR、重装载寄存器 RLR 默认锁定无法修改所有配置、启停、喂狗操作均通过向 KR 写入固定密钥实现三组密钥功能不可混淆写入十六进制密钥硬件执行功能使用场景0xCCCC启动独立看门狗计数器开始从 RLR 值递减初始化最后一步开启看门狗计时0xAAAA喂狗刷新计数器将 RLR 重装载值重新加载到计数寄存器主循环定时调用防止看门狗溢出复位0x5555解除 PR、RLR 寄存器写保护允许修改分频系数、定时计数值初始化阶段配置定时参数前必须调用操作固定流程写入 0x5555 解除写保护 → 2. 配置 PR 预分频、RLR 重装载值 → 3. 写入 0xCCCC 开启看门狗 → 4. 主循环定期写入 0xAAAA 喂狗。2.4 IWDG 补充易错点拓展看门狗一旦开启无法软件关闭只能通过硬件复位彻底关闭喂狗间隔必须小于看门狗总定时时长否则会触发意外复位适合工业设备、无人值守设备调试阶段可注释看门狗初始化避免频繁复位打断调试。三、USART 通用同步异步收发器串口通信3.1 串口基础概述STM32F103 系列内置 3 路硬件 USART 外设USART1/USART2/USART3是嵌入式开发最通用的设备间通信接口常用于单片机与电脑串口助手、GPS 模块、蓝牙模块、传感器之间数据交互。USART 三大核心特性详解串行传输单根数据线分时传输数据一个字节内 8 位数据按 bit 顺序逐位发送对比并行通信多根数据线同时传输串行布线简单、成本低是设备间远距离通信主流方案。全双工通信独立两根信号线TX 发送引脚、RX 接收引脚收发通道完全分离设备可同时发送 接收数据互不阻塞半双工仅一根数据线同一时间只能收或发。异步通信无独立时钟同步信号线收发双方依靠预先约定的波特率匹配采样时序同步通信SPI/I2S额外搭载时钟线由主机输出时钟同步从机。3.2 单帧串口完整通信时序标准 8N1 格式8 数据位、无校验、1 停止位一帧完整数据传输顺序固定空闲位 → 起始位 → 数据位 → 校验位 (可选) → 停止位时序逻辑是串口收发解析底层核心空闲位总线默认持续高电平无数据传输时长期保持代表总线空闲状态。起始位发送数据瞬间拉低总线持续 1 个波特率周期作为接收方数据接收触发标志接收端检测到下降沿后开始逐 bit 采样数据。数据位传输有效业务数据工程默认配置 8bit刚好对应 1 字节 char/u8 变量总线高电平代表 bit1低电平代表 bit0低位优先传输。校验位可选可关闭用于简单数据校验排查传输过程电磁干扰导致的 bit 翻转错误分为两种模式奇校验数据位所有 bit 中 1 的总个数 校验位 1 的个数 奇数偶校验数据位所有 bit 中 1 的总个数 校验位 1 的个数 偶数 若数据传输出错接收端校验不匹配可标记数据无效丢弃。停止位数据、校验位传输完成后拉高总线维持 1~2 个波特率周期标记单帧数据传输结束总线回到空闲电平等待下一帧数据。3.3 串口通信强制匹配条件波特率定义每秒传输二进制 bit 的总数量单位 bit/s通信硬性要求发送端、接收端波特率必须完全一致否则采样错位接收数据全部乱码工程常用标准波特率9600、38400、115200单片机调试优先使用 115200传输速度更快。3.4 USART1 硬件驱动完整开发流程1. 硬件引脚分配与模式配置USART1 挂载在 GPIOA 端口TX/RX 引脚模式固定不可混用引脚编号功能定义GPIO 工作模式补充说明PA9TX 数据发送引脚复用推挽输出向外输出串口数据PA10RX 数据接收引脚浮空输入读取外部设备发送电平2. 初始化函数usart1_init()分步拆解外设时钟使能RCC 寄存器同时开启 GPIOA 端口时钟、USART1 外设时钟STM32 所有外设默认时钟关闭不开启时钟寄存器无响应外设无法工作。GPIO 引脚模式初始化配置 PA9 为复用推挽输出PA10 为浮空输入关闭上下拉电阻。USART 帧参数配置配置寄存器设置一帧格式数据位长度、停止位数量、校验位开关与校验模式计算并配置分频寄存器匹配目标波特率。外设使能开启 USART1 总开关同时使能发送、接收通道串口正式进入工作状态。3. 底层基础收发封装函数单字节发送函数void usart1_send_byte(uint8_t data);逻辑写入数据到发送寄存器循环等待发送完成标志位置 1代表单字节发送完毕后退出函数避免数据丢失。单字节阻塞接收函数uint8_t usart1_recv_byte(void);逻辑循环检测接收标志位等待外部设备发送数据标志置 1 后读取接收寄存器返回单字节数据无数据时程序阻塞等待。四、串口课堂作业 拓展问答深度解析4.1 基础功能开发作业作业 1串口发送字符串函数函数声明void usart1_send_string(const char *p);完整实现代码void usart1_send_string(const char *p) { // 循环遍历字符串直到读取到字符串结束符\0 while (*p ! \0) { usart1_send_byte(*p); p; } }原理说明C 语言字符串以\0作为结束标志逐个取出字符调用单字节发送函数实现整段文字打印调试时常用usart1_send_string(hello stm32\r\n);打印日志。作业 2串口发送自定义结构体温湿度数据示例结构体定义typedef unsigned char u8; typedef struct data_st { u8 temp; // 温度变量 u8 humi; // 湿度变量 char str[32];// 自定义文本缓存 } data_st;实现核心工具snprintf()作用格式化数字、字符串到字符数组缓存将结构体中数值转为可读文本再调用字符串发送函数输出。完整示例代码// 定义结构体变量 data_st sensor_data {26, 58, sensor data test}; // 定义打印缓存 char print_buf[64]; // 格式化结构体数据到缓存 snprintf(print_buf, sizeof(print_buf), temp:%d℃, humi:%d%%, msg:%s\r\n, sensor_data.temp, sensor_data.humi, sensor_data.str); // 串口打印 usart1_send_string(print_buf);4.2 拓展思考题完整解答问题 1为什么串口单帧有效数据默认最多 8bit硬件层面8bit 恰好对应单片机标准 1 字节存储单元所有变量、寄存器最小存储单位均为字节数据读写、存储逻辑统一通信适配层面行业通用标准电脑、各类传感器、蓝牙模块全部默认 8bit 数据位兼容性最强误差控制层面单帧数据长度固定接收端解析逻辑简单减少分段解析出错概率大幅提升通信准确度若使用 9bit 及以上通用串口助手无法适配仅特殊工业协议使用。问题 2原生 UART 通信距离很短如何实现几百米远距离数据传输UART 仅定义芯片内部电平收发逻辑传输距离由外部电平转换标准决定分为 RS232、RS485 两种工业标准二者传输能力差距极大1RS232电脑 DB9 调试串口信号传输方式单端电平传输信号电压相对公共 GND 地线判定高低电平电平标准高电平 - 12V、低电平 12V和单片机 3.3V TTL 电平不兼容需要电平转换芯片极限传输距离标准推荐 15 米波特率越高传输距离越短115200 高速下仅 3~5 米拓扑限制仅支持点对点 1 对 1 通信一条总线只能连接两个设备抗干扰能力极差工业电机、继电器电磁干扰极易造成数据乱码适用场景电脑与开发板近距离调试、实验室短距离通信无法实现几百米传输。2RS485工业远距离总线标准信号传输方式差分双线传输依靠 A、B 两根信号线电压差值判断高低电平不依赖地线抗干扰优势空间电磁干扰会同时叠加在 A、B 两根线上差值不变完美抵消干扰极限传输距离标准最大 1200 米轻松满足几百米长距离通信需求拓扑拓展总线型拓扑单条总线最多挂载 32 个通信节点支持多设备组网通信模式半双工同一时间只能单方向收发适用场景工厂传感器、远程采集设备、楼宇远距离数据传输。快速记忆区分技巧RS232短距离、点对点、电脑调试专用 RS485千米级、差分抗干扰、多节点、工业远距离通信。4.3 RS232 与 RS485 完整对比表格对比维度RS232RS485信号传输机制单端电平相对地线判断电平A/B 差分双线依靠电压差值判定信号最大传输距离约 15 米高速波特率距离大幅缩短标准最长 1200 米总线支持节点仅点对点1 对 1 两个设备总线组网最多 32 个设备节点抗电磁干扰能力弱工业环境极易乱码极强适合复杂电磁工业现场通信模式全双工半双工典型使用场景PC 串口调试、室内近距离设备通信工业传感器、远程长距离数据采集速记口诀232 短、单点、调试用485 长、差分、工业多设备。五、本章整体知识点总结IWDG 独立看门狗 独立 40KHz LSI 时钟硬件级死机复位方案依靠 KR 三组密钥控制启停、喂狗、解除寄存器写保护定时计算公式与 SysTick 完全通用适合无人值守设备提升稳定性。USART 串口核心理论 串行、全双工、异步三大特性一帧数据分为空闲位、起始位、8bit 数据位、可选校验位、停止位收发双方波特率必须完全匹配否则数据乱码。USART1 驱动开发逻辑 开启 GPIOA 与 USART1 时钟 → 配置 TX/RX 引脚模式 → 设置帧格式与波特率 → 使能串口外设 → 封装单字节、字符串、结构体格式化发送函数。远距离通信拓展 原生 TTL-UART 搭配 RS232 仅支持短距离调试项目需要几百米远距离通信时必须外接 485 电平转换芯片使用差分信号传输。补充工程拓展代码原文缺失内容补齐1. IWDG 简易初始化框架void IWDG_Init(void) { IWDG-KR 0x5555; // 解除写保护 IWDG-PR 0x03; // 预分频64 IWDG-RLR 1250; // 设置重装载值 IWDG-KR 0xCCCC; // 开启看门狗 } // 喂狗函数 void IWDG_FeedDog(void) { IWDG-KR 0xAAAA; }2. 串口完整打印封装支持数字打印void usart1_send_num(uint32_t num) { char buf[20]; snprintf(buf, sizeof(buf), %d, num); usart1_send_string(buf); }