STM32——串口(UART)使用

本文围绕STM32串口通信展开,先介绍数据通信基本概念,如串并行、单双工、同步异步通信等,接着阐述RS - 232接口标准。详细讲解STM32的USART,包括简介、框图、寄存器及配置步骤。还介绍了USART的HAL库配置方法,最后给出实验源码与现象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面:本节我们学习STM32F1串口,说实话,对于一个初学者来说,在学习这节内容的时候,牵涉的一些知识使我也很困惑。特别是利用HAL库的中断回调机制。至此,对于有些内容我依旧是感到迷惑,还是希望多看,多试尽力的有一个好的理解。

目录

一、数据通信的基本概念

1.1串并行通信

1.2单工、半双工与全双工通信

1.3同步、异步通信 

1.4通信速率 

1.5常见的串行通信接口

二、串行通信接口(RS-232)

三、STM32的USART 

3.1 USART简介

3.2 USART框图 

3.3 USART寄存器

 3.3.1控制寄存器1(USART_CR1)

3.3.2控制寄存器2(USART_CR2)

3.3.3控制寄存器3(USART_CR3)

3.3.4数据寄存器(USART_0DR)

 3.3.5状态寄存器(USART_SR)

3.3.6波特率寄存器(USART_BRR) 

3.4 USART 的配置步骤

3.5 IO引脚复用功能

四、USART的HAL库配置

 4.1 USART异步通信配置步骤

4.2配置串口工作参数:HAL_UART_Init()

4.3串口底层初始化:HAL_UART_MSPInit()

4.4  HAL_UART_Receive_IT 函数

4.5 HAL_UART_Transmit函数

4.6 中断服务函数

五、实验源码

5.1 实验说明

5.2 源码

5.3 实验现象


一、数据通信的基本概念

        在学习单片机中,数据的通信是不可缺少的一部分,比如:模块之间的数据传输,单片机同上位机之间的数据传输,而不同的数据传输拥有不同的传输协议。比如:UART、IIC、SPI、USB等等。所以在使用这些传输方式之前,我们需要对一些基本的概念做一了解。

1.1串并行通信

按照数据通信方式分为:串行通信并行通信

串行通信:数据逐位按顺序依次进行传输;

并行通信:数据各位通过多条线同时进行传输;(8位、16位、32位等)

1.2单工、半双工与全双工通信

根据数据传输方向,通信又可分为全双工、半双工和单工通信

单工:指数据传输仅能沿一个方向,不能实现反方向传输,如校园广播。

半双工:指数据传输可以沿着两个方向,但是需要分时进行,如对讲机。

全双工:指数据可以同时进行双向传输,日常的打电话属于这种情形。

1.3同步、异步通信 

根据数据同步方式,通信又可分为同步通信和异步通信

同步通信:要求通信双方共用同一时钟信号,在总线上保持统一的时序和周期完成信息传输。

异步通信:不需要时钟信号,而是在数据信号中加入开始位和停止位等一些同步信号,以便使接收端能够正确地将每一个字符接收下来,某些通信中还需要双方约定传输速率。

同步通信:共用一根时钟信号;

异步通信:没有时钟信号,通过在数据信号中加入起始位和检验位等同步信号;

1.4通信速率 

通信速率:指数据在信道中的传输速度;它分为两种:传信率和传码率。

传信率:每秒钟传输的信息量,即每秒钟传输的二进制位数,单位为 bit/s(即比特每秒), 因而又称为比特率。

传码率:每秒钟传输的码元个数,单位为 Baud(即波特每秒),因而又称为波特率。

采用二进制的时候,波特率和比特率数值上相等。我们需要知道的是,在通信时,需要保证通信双方的传输速率相同,这样才能保证数据传输过程中不会出错。

1.5常见的串行通信接口

接口名称 通信线 通信方式 数据传输方向
UART

TXD

RXD

GND

异步 全双工
I-wire DQ 异步 半双工
IIC

SCL

SDA

同步 半双工
SPI

SCK

MISO

MOSI

CS

同步 全双工

注:不是有两根数据线就是全双工,而是有输入、输出信道才为全双工;

二、串行通信接口(RS-232)

什么是串口呢?

       串口是指串行通信接口:指按位发送和接收的接口;也称为串口通信。像UART、IIC、SPI都属于串口通信,但是三者存在一定的差距也就是所谓的协议。

什么是串行通信接口标准呢?

是指用来进行串行通信的物理接口标准,它只表征了电气特性,而不涉及到接插件、电缆、协议等。

对于RS-232接口标准来说:

数据线:

TXD——串口数据输出;

RXD——串口数据输入;

电平:

逻辑1:-15到-3V;

逻辑0:+3到+15V

        显然,从电平标准来说,RS-232的电平不能同coms/TTL电平(32单片机、51单片机)进行交换信息;因此在使用该接口标准的时候需要进行转化电路。 

        电路中添加一个 USB 转串口芯片,就可以实现 USB 通信协议和标准 UART 串行通信协议的转换,而我们开发板上的 USB 转串口芯片是 CH340C 这个芯片

 串口通信协议:

     串口通信的数据包由发送设备的 TXD 接口传输到接收设备的 RXD 接口。在串口通信的协 议层中,规定了数据包的内容,它由起始位、主体数据、校验位以及停止位组成,通讯双方的数据包格式要约定一致才能正常收发数据。

1、启动位:必须占用1个位长,保持逻辑0电平;

2、有效数据位:地位在前,高位在后,可为5.6.7.8.9位长;

3、检验位:可选占1个位长也可以没有;

4、停止位:必须有,可选占0.5、1、1.5、2个位长;

三、STM32的USART 

3.1 USART简介

        stm32的usart是开发板实现串口通信的外设

USART:通用同步异步收发器;

UART:通用异步收发器;

USART/UART都可以与外部设备进行全双工异步通信,对于USAR可以同步也可以异步,我们常用的是异步。

特点:

1、全双工异步通信;2、单线半双工通信;3、单独的发送器与接收器使能位;4、可配置使用DMA的多缓冲器通信;4、多个带标志的中断源。

    STM32F1 有 3 个 USART 和 2 个 UART,其中 USART1 的时钟源来于 APB2 时钟,其最大频率为 72MHz,其他 4 个串口的时钟源可以来于 APB1 时钟,其最大频率为 36MHz。

3.2 USART框图 

### STM32冷链物流监测系统毕业设计方案 #### 1. 系统概述 基于STM32的冷链物流监测系统旨在解决冷链运输过程中温度监控和运输平稳性的需求。该系统通过集成多种传感器(如温度传感器、加速度传感器),实现了对货物运输环境的全面监测,并提供实时数据显示功能,确保货物在运输过程中的安全性和稳定性。 此方案的核心目标是利用STM32微控制器的强大处理能力,结合现代传感技术与通信手段,构建一套高效可靠的冷链物流监测解决方案[^3]。 --- #### 2. 硬件设计 ##### (1) 主控芯片选择 选用STM32系列微控制器作为核心处理器,因其具备高性能ARM Cortex-M内核、丰富的外设接口以及低功耗特性,非常适合应用于嵌入式系统开发[^1]。 ##### (2) 关键硬件模块 - **温度传感器**:采用DS18B20或其他高精度数字温度传感器,用于实时采集环境温度数据。 - **加速度传感器**:使用MPU6050等惯性测量单元,检测运输过程中的振动和倾斜角度变化。 - **显示屏**:配备OLED或LCD屏幕,直观显示当前温度及其他重要参数。 - **无线通信模块**:可选配Wi-Fi或NB-IoT模组,支持远程数据上传至云端服务器。 - **电源管理模块**:设计高效的锂电池充电电路及稳压供电机制,保障长时间运行。 | 模块名称 | 型号/规格 | 功能描述 | |----------------|--------------------|------------------------------| | 主控MCU | STM32F103RCT6 | 数据处理与逻辑控制 | | 温度传感器 | DS18B20 | 实时获取环境温度 | | 加速度传感器 | MPU6050 | 测量运输平稳性 | | 显示屏 | SSD1306 OLED | 展示监测结果 | | 无线通信模块 | ESP8266 Wi-Fi模组 | 提供网络连接功能 | 上述表格展示了主要硬件组件及其对应的功能定位。 --- #### 3. 软件架构 软件部分分为以下几个层次: ##### (1) 驱动层 编写针对各外围设备的基础驱动程序,例如IIC总线协议库、SPI通讯函数以及UART串口收发例程。这些底层代码构成了整个项目的基石[^4]。 ```c // IIC初始化函数 void IIC_Init(void){ GPIO_InitTypeDef GPIO_InitStruct; __HAL_RCC_GPIOB_CLK_ENABLE(); // 开启GPIOB时钟 GPIO_InitStruct.Pin = GPIO_PIN_6 | GPIO_PIN_7; // SDA/SCL引脚配置 GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; // 复用开漏模式 GPIO_InitStruct.Pull = GPIO_PULLUP; // 上拉电阻启用 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); } ``` ##### (2) 应用层 应用层负责实现具体业务逻辑,包括但不限于以下方面: - 定期读取温湿度数值并通过算法校准; - 记录加速度传感器输出值判断是否存在异常颠簸现象; - 将收集到的数据打包发送至上位机或者互联网服务平台存储分析。 以下是简单的定时器中断服务例程演示如何周期性调用任务调度方法: ```c void TIM2_IRQHandler(void){ if(__HAL_TIM_GET_FLAG(&htim2,TIM_IT_UPDATE)!=RESET){ __HAL_TIM_CLEAR_IT(&htim2,TIM_IT_UPDATE); Task_Scheduler(); } } void Task_Scheduler(){ static uint8_t counter=0; switch(counter++){ case 0: Read_Temperature(); break; // 获取温度信息 case 1: Check_Acceleration(); break; // 检查加速度状况 default: Send_Data_To_Server(); counter=0; break;// 向服务器提交报告 } } ``` --- #### 4. PCB布局与布线注意事项 为了提高信号质量减少干扰,在PCB设计阶段需遵循一些基本原则: - 敏感模拟输入端远离高频开关节点布置; - 地平面连续完整无分割缝裂隙存在; - 所有去耦电容器靠近相应IC放置以降低阻抗路径长度; 以上措施有助于增强电子产品的可靠性与耐用程度。 --- #### 5. 性能测试与优化建议 完成初步组装调试之后还需经历多轮严格检验环节才能投入实际应用场景当中。重点考察指标涵盖工作电流消耗水平、响应延迟时间长短等方面的表现情况。如果发现某些地方效率低下则考虑引入DMA直接内存访问操作加快数据交换速率或是调整滤波系数改善噪声抑制效果等等。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值