用dw 网站开发与设计报告网站开发服务器数据库
2026/4/10 11:12:54 网站建设 项目流程
用dw 网站开发与设计报告,网站开发服务器数据库,成都网站建设十强企业,建设银行官方投诉网站目录 一、核心定义与核心差异#xff08;先理清 “是什么”#xff09; 二、原理详解#xff08;从基础到特化#xff09; 1. UART 核心原理#xff08;异步串行通信#xff0c;三者的基础#xff09; #xff08;1#xff09;UART 帧结构#xff08;异步通信的核…目录一、核心定义与核心差异先理清 “是什么”二、原理详解从基础到特化1. UART 核心原理异步串行通信三者的基础1UART 帧结构异步通信的核心规则2UART 通信流程2. USART 核心原理同步模式补充1USART 同步模式特征2USART 同步 vs 异步对比3. LPUART 核心原理低功耗优化1时钟源优化2低功耗模式支持3低功耗唤醒功能三、典型用法与选型建议1. 典型应用场景按场景选型2. 选型核心原则四、程序案例STM32 HAL 库可直接运行前置准备案例 1UART 异步通信最常用串口收发 调试输出功能说明1. STM32CubeMX 配置2. 核心代码HAL 库3. 测试效果案例 2USART 同步通信带时钟线功能说明1. STM32CubeMX 配置2. 核心代码3. 测试说明案例 3LPUART 低功耗通信待机唤醒功能说明1. STM32CubeMX 配置2. 核心代码3. 测试效果五、避坑点新手常犯总结关键点回顾全面理解 UART、USART、LPUART 的核心工作原理明确三者的本质差异掌握各自的典型应用场景并且通过基于 STM32 的实战程序案例掌握实际使用方法 —— 核心是 “区分差异→原理解析→场景适配→代码落地”这也是嵌入式开发中串口应用的核心知识点我会从基础到实战层层拆解所有案例均基于 STM32 HAL 库新手易上手。一、核心定义与核心差异先理清 “是什么”三者均属于串行通信接口核心差异在于通信模式和功耗优化用表格快速区分接口类型全称核心特征核心差异点硬件资源UARTUniversal Asynchronous Receiver/Transmitter通用异步收发器仅支持异步串行通信无时钟线靠波特率同步只有异步模式无同步能力最少TX/RXUSARTUniversal Synchronous/Asynchronous Receiver/Transmitter通用同步异步收发器兼容 UART异步 支持同步串行通信带时钟线功能更全比 UART 多同步模式支持 SPI/I2S多 SCLK 时钟线LPUARTLow Power UART低功耗 UART属于 UART 的低功耗优化版本支持低功耗模式待机 / 休眠下的收发 / 唤醒低功耗优先异步模式唤醒功能兼容 UART 引脚时钟源可选低功耗时钟关键结论USART 包含 UART 的所有功能异步模式是 “超集”LPUART 是 UART 的 “低功耗特化版”无同步模式核心优化功耗日常说的 “串口” 大多指 UARTUSART 工作在异步模式。二、原理详解从基础到特化1. UART 核心原理异步串行通信三者的基础UART 是异步全双工串行通信“异步” 指收发双方无专用时钟线靠预设相同的波特率实现同步核心是 “帧结构” 和 “波特率匹配”。1UART 帧结构异步通信的核心规则一个完整的 UART 帧包含以下部分可配置空闲位高电平→ 起始位1位低电平→ 数据位8/9位→ 校验位0/1位奇/偶/无→ 停止位1/1.5/2位高电平起始位标识帧开始低电平触发接收端采样数据位核心传输内容如 8 位对应 1 个字节校验位用于检错小型系统常用 “无校验”简化配置停止位标识帧结束高电平波特率每秒传输的比特数如 9600、115200收发双方必须完全一致否则数据乱码。2UART 通信流程发送端将并行数据如 MCU 内部的 8 位数据按帧结构转为串行信号通过 TX 引脚发送接收端通过 RX 引脚检测起始位按波特率采样每一位数据还原为并行数据核心无需时钟线靠波特率同步硬件自动完成串并转换。2. USART 核心原理同步模式补充USART 完全兼容 UART 的异步模式额外支持同步模式核心差异是 “同步模式带时钟线”。1USART 同步模式特征新增SCLK同步时钟引脚发送端输出时钟接收端按该时钟采样数据无需波特率匹配同步通信无波特率概念同步优势传输速率更高无波特率误差、抗干扰更强适合高速 / 高精度通信同步帧结构比异步帧多了 “时钟同步位”时钟线与数据位严格对齐。2USART 同步 vs 异步对比模式时钟线同步依据速率适用场景异步无预设波特率中等≤1M普通串口通信如调试同步有发送端 SCLK 时钟高速≥1M高速数据传输如 SPI 替代3. LPUART 核心原理低功耗优化LPUART 本质是 UART仅异步针对电池供电 / 低功耗设备做了三大优化1时钟源优化支持选择低功耗时钟LSI/LSE32.768kHz作为时钟源而非高频系统时钟如 72MHz大幅降低时钟功耗2低功耗模式支持可在 MCU 的 “待机 / 休眠模式” 下工作接收端低功耗模式下仍能检测 RX 引脚的起始位触发 MCU 唤醒发送端低功耗模式下快速唤醒并发送数据完成后立即回到低功耗3低功耗唤醒功能当 RX 引脚检测到预设的 “唤醒字符”如 0x55或起始位时自动唤醒 MCU无需持续运行降低待机功耗μA 级别。三、典型用法与选型建议1. 典型应用场景按场景选型接口类型核心适用场景选型优先级举例UART普通异步通信、调试输出、低速数据传输≤115200 波特率、无低功耗需求最高串口调试、传感器异步通信、AT 指令交互USART高速同步通信、需要时钟同步的场景、兼容 SPI/I2S部分 MCU 支持、替代 UART次高高速数据采集、工业设备同步通信LPUART电池供电设备、低功耗物联网终端NB-IoT/LoRa、待机唤醒场景、长续航设备低功耗场景优先智能手环、传感器节点、电池供电检测仪2. 选型核心原则优先选 UARTUSART 异步模式满足 90% 的普通串口需求配置简单需高速 / 同步 → 选 USART 同步模式需低功耗 / 电池供电 → 选 LPUART注意STM32 中LPUART 通常只有 1 个如 STM32L 系列UART/USART 数量更多如 STM32F103 有 3 个 USART。四、程序案例STM32 HAL 库可直接运行以 STM32F103C8T6UART/USART和 STM32L431LPUART低功耗系列为例分别实现核心功能。前置准备开发环境STM32CubeMX Keil5/VS Code配置工具STM32CubeMX 配置引脚、时钟、串口参数生成 HAL 库工程硬件连接UART/USARTTX→PA2RX→PA3STM32F103 USART2USART 同步新增 SCLK→PA4LPUARTTX→PB10RX→PB11STM32L431 LPUART1。案例 1UART 异步通信最常用串口收发 调试输出功能说明实现 UART 异步通信MCU 通过 USART2异步模式即 UART向电脑串口助手发送数据接收电脑发送的数据并回显。1. STM32CubeMX 配置引脚USART2_TX→PA2USART2_RX→PA3模式Asynchronous异步参数波特率 115200、数据位 8、停止位 1、无校验、全双工时钟APB1 时钟 72MHzSTM32F103。2. 核心代码HAL 库/* 头文件包含 */ #include stm32f1xx_hal.h #include string.h /* 全局句柄 */ UART_HandleTypeDef huart2; /* 1. UART初始化CubeMX自动生成无需修改 */ void MX_USART2_UART_Init(void) { huart2.Instance USART2; huart2.Init.BaudRate 115200; // 波特率 huart2.Init.WordLength UART_WORDLENGTH_8B; // 8位数据位 huart2.Init.StopBits UART_STOPBITS_1; // 1位停止位 huart2.Init.Parity UART_PARITY_NONE; // 无校验 huart2.Init.Mode UART_MODE_TX_RX; // 收发模式 huart2.Init.HwFlowCtl UART_HWCONTROL_NONE;// 无硬件流控 huart2.Init.OverSampling UART_OVERSAMPLING_16; if (HAL_UART_Init(huart2) ! HAL_OK) { Error_Handler(); } } /* 2. 串口发送字符串封装函数方便调用 */ void UART_SendString(UART_HandleTypeDef *huart, char *str) { HAL_UART_Transmit(huart, (uint8_t*)str, strlen(str), 1000); // 阻塞发送超时1s } /* 3. 串口接收数据中断接收非阻塞 */ uint8_t uart_recv_buf[100]; // 接收缓冲区 void UART_Receive_IT_Init(void) { // 开启中断接收接收1个字节触发中断 HAL_UART_Receive_IT(huart2, uart_recv_buf, 1); } /* 4. 中断回调函数接收完成后执行 */ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if (huart-Instance USART2) { // 回显接收到的字符 HAL_UART_Transmit(huart2, uart_recv_buf, 1, 100); // 重新开启中断接收持续接收 HAL_UART_Receive_IT(huart2, uart_recv_buf, 1); } } /* 5. 主函数测试 */ int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USART2_UART_Init(); // 初始化中断接收 UART_Receive_IT_Init(); // 发送欢迎语 char welcome[] UART异步通信测试请输入字符将回显\r\n; UART_SendString(huart2, welcome); while (1) { // 主循环无需操作接收靠中断 HAL_Delay(100); } } /* 错误处理函数CubeMX自动生成 */ void Error_Handler(void) { __disable_irq(); while (1) { } }3. 测试效果硬件STM32 PA2/PA3 接 USB 转 TTL 模块连接电脑串口助手串口助手配置115200、8N1、无流控运行串口助手显示欢迎语输入任意字符STM32 回显该字符。案例 2USART 同步通信带时钟线功能说明实现 USART 同步模式通信STM32 USART1 作为主设备输出时钟SCLK和数据接收端按时钟采样此处用自环测试SCLK→PA4TX→PA9RX→PA10 短接。1. STM32CubeMX 配置引脚USART1_TX→PA9USART1_RX→PA10USART1_CK→PA4SCLK 时钟线模式Synchronous同步参数时钟极性Low、时钟相位1Edge、数据位 8、停止位 1、无校验。2. 核心代码/* 全局句柄 */ UART_HandleTypeDef huart1; /* 1. USART同步模式初始化 */ void MX_USART1_UART_Init(void) { huart1.Instance USART1; huart1.Init.BaudRate 115200; // 同步模式波特率仅为参考实际靠时钟 huart1.Init.WordLength UART_WORDLENGTH_8B; huart1.Init.StopBits UART_STOPBITS_1; huart1.Init.Parity UART_PARITY_NONE; huart1.Init.Mode UART_MODE_TX_RX; huart1.Init.HwFlowCtl UART_HWCONTROL_NONE; huart1.Init.OverSampling UART_OVERSAMPLING_16; huart1.Init.ClockPrescaler UART_PRESCALER_DIV1; // 时钟分频 huart1.AdvancedInit.AdvFeatureInit UART_ADVFEATURE_NO_INIT; // 同步模式配置 if (HAL_UART_Init(huart1) ! HAL_OK) { Error_Handler(); } // 启用同步时钟 HAL_UARTEx_EnableClock(huart1); } /* 2. 同步发送数据 */ void USART_Sync_SendData(uint8_t *data, uint16_t len) { HAL_UART_Transmit(huart1, data, len, 1000); } /* 3. 主函数测试 */ int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USART1_UART_Init(); uint8_t send_data[] USART同步通信测试\r\n; while (1) { // 同步发送数据 USART_Sync_SendData(send_data, sizeof(send_data)-1); HAL_Delay(1000); } }3. 测试说明同步模式下PA4 输出时钟信号PA9 输出数据示波器可看到时钟与数据严格对齐接收端需连接 SCLK、TX、RX、GND无需配置波特率直接按时钟采样。案例 3LPUART 低功耗通信待机唤醒功能说明STM32L431低功耗系列LPUART1 实现低功耗通信MCU 进入待机模式LPUART 检测到 RX 引脚的起始位 / 唤醒字符0x55时唤醒 MCU发送响应数据。1. STM32CubeMX 配置引脚LPUART1_TX→PB10LPUART1_RX→PB11模式Asynchronous异步、低功耗唤醒使能参数波特率 9600、8N1、唤醒字符 0x55电源启用低功耗模式Standby。2. 核心代码/* 全局句柄 */ UART_HandleTypeDef hlpuart1; /* 1. LPUART初始化低功耗配置 */ void MX_LPUART1_UART_Init(void) { hlpuart1.Instance LPUART1; hlpuart1.Init.BaudRate 9600; hlpuart1.Init.WordLength UART_WORDLENGTH_8B; hlpuart1.Init.StopBits UART_STOPBITS_1; hlpuart1.Init.Parity UART_PARITY_NONE; hlpuart1.Init.Mode UART_MODE_TX_RX; hlpuart1.Init.HwFlowCtl UART_HWCONTROL_NONE; hlpuart1.Init.OneBitSampling UART_ONE_BIT_SAMPLE_DISABLE; hlpuart1.Init.ClockPrescaler UART_PRESCALER_DIV1; hlpuart1.AdvancedInit.AdvFeatureInit UART_ADVFEATURE_WAKEUP_INIT; hlpuart1.AdvancedInit.WakeUpEvent UART_WAKEUP_ON_ADDRESS; // 唤醒字符触发 hlpuart1.AdvancedInit.AddressDetection UART_ADDRESS_DETECTION_7B; hlpuart1.AdvancedInit.Address 0x55; // 唤醒字符0x55 if (HAL_UART_Init(hlpuart1) ! HAL_OK) { Error_Handler(); } } /* 2. 进入待机模式 */ void Enter_Standby_Mode(void) { // 禁用所有中断除LPUART唤醒 HAL_NVIC_DisableIRQ(EXTI0_IRQn); // 配置LPUART唤醒中断 HAL_UART_EnableIT(hlpuart1, UART_IT_WAKEUP); // 进入待机模式 HAL_PWR_EnterSTANDBYMode(); } /* 3. LPUART唤醒回调函数 */ void HAL_UART_WakeupCallback(UART_HandleTypeDef *huart) { if (huart-Instance LPUART1) { // 唤醒后发送响应 char wakeup_msg[] LPUART唤醒成功\r\n; HAL_UART_Transmit(hlpuart1, (uint8_t*)wakeup_msg, strlen(wakeup_msg), 1000); } } /* 4. 主函数测试 */ int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_LPUART1_UART_Init(); // 初始发送提示 char init_msg[] 进入低功耗待机模式发送0x55唤醒\r\n; HAL_UART_Transmit(hlpuart1, (uint8_t*)init_msg, strlen(init_msg), 1000); // 延时后进入待机模式 HAL_Delay(2000); Enter_Standby_Mode(); while (1) { // 唤醒后执行此处 HAL_Delay(1000); Enter_Standby_Mode(); // 再次进入待机 } }3. 测试效果硬件LPUART1 RX→PB11 接 USB 转 TTL连接电脑串口助手串口助手发送 0x55十六进制STM32 从待机模式唤醒发送 “LPUART 唤醒成功”功耗待机模式下 MCU 功耗≤10μA电池供电可续航数月。五、避坑点新手常犯UART 波特率不匹配收发双方波特率 / 数据位 / 停止位 / 校验位必须完全一致否则乱码优先用 8N1 配置USART 同步模式引脚漏配同步模式必须连接 SCLK 时钟线否则无法通信LPUART 低功耗时钟配置需选择 LSI/LSE 低功耗时钟否则功耗无法降低中断接收未重新开启UART 中断接收完成后需重新调用HAL_UART_Receive_IT否则仅接收 1 次低功耗唤醒条件LPUART 唤醒需配置正确的唤醒字符 / 触发条件否则无法唤醒。总结关键点回顾核心差异UART仅异步、USART异步 同步、LPUART低功耗 UART选型普通场景选 UARTUSART 异步高速同步选 USART 同步低功耗选 LPUART编程核心UART配置波特率 / 帧结构中断 / 阻塞收发USART 同步新增 SCLK 时钟线配置无需波特率匹配LPUART低功耗时钟 唤醒条件配置支持待机唤醒避坑波特率匹配、同步时钟线、低功耗时钟是三大核心要点。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询