STM32串口通信配置(USART/UART)

article/2025/10/14 9:32:59

在配置USART和UART之前,得先明白什么是USART和UART以及它们之间有什么区别,其实两者是同步和异步的区别。
UART:universal asynchronous receiver and transmitter通用异步收发器;
USART:universal synchronous asynchronous receiver and transmitter通用同步异步收发器。
一般而言,单片机中,名称为UART的接口一般只能用于异步串行通讯,而名称为USART的接口既可以用于同步串行通讯,也能用于异步串行通讯。
串口接受和发送数据的程序(USART/UART)
STM32串口引脚如下图所示
在这里插入图片描述

一、配置USART1

static unsigned char TxBuffer[256];
static unsigned char TxCounter=0;
static unsigned char count=0; 
extern void CopeSerial1Data(unsigned char ucData);
void Initial_UART1(unsigned long baudrate)
{//GPIO端口设置GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);//USART1_TX   GPIOA.9GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化   //USART1_RX   GPIOA.10GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化USART_InitStructure.USART_BaudRate = baudrate;//设置波特率USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式USART_InitStructure.USART_StopBits = USART_StopBits_1;//1个停止位USART_InitStructure.USART_Parity = USART_Parity_No ;//无奇偶校验USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//收发模式USART_Init(USART1, &USART_InitStructure); //初始化USART_ITConfig(USART1, USART_IT_TXE, DISABLE);  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //开启串口接受中断       USART_ClearFlag(USART1,USART_FLAG_TC);USART_Cmd(USART1, ENABLE);//使能NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 7;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);
}

二、配置USART2

由于和前一个配置大同小异,所以只在和前一个不同的地方加入注释

static unsigned char TxBuffer[256];
static unsigned char TxCounter=0;
static unsigned char count=0; 
extern void CopeSerial2Data(unsigned char ucData);
void Initial_UART2(unsigned long baudrate)
{GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2 | RCC_APB2Periph_GPIOA, ENABLE);//PA2为TXGPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);  //PA3为RX  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);USART_InitStructure.USART_BaudRate = baudrate;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitStructure.USART_Parity = USART_Parity_No ;USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;USART_Init(USART2, &USART_InitStructure); USART_ITConfig(USART2, USART_IT_TXE, DISABLE);    USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);USART_ClearFlag(USART2,USART_FLAG_TC);	USART_Cmd(USART2, ENABLE);NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 8;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);
}

三、配置USART3

static unsigned char TxBuffer[256];
static unsigned char TxCounter=0;
static unsigned char count=0; 
extern void CopeSerial2Data(unsigned char ucData);
void Initial_UART3(unsigned long baudrate)
{GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3 | RCC_APB2Periph_GPIOA, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);   // GPIOB时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);USART_DeInit(USART3);//PB10为TXGPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);    //PB1为RXGPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOB, &GPIO_InitStructure);USART_InitStructure.USART_BaudRate = baudrate;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitStructure.USART_Parity = USART_Parity_No ;USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;USART_Init(USART3, &USART_InitStructure); USART_ITConfig(USART3, USART_IT_TXE, DISABLE);    USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);USART_ClearFlag(USART3,USART_FLAG_TC);	USART_Cmd(USART3, ENABLE);NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 8;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);
}

配置大概就是如此,在笔者的程序中,USART1用来STM32连接电脑上串口助手,USART2、3用来连接两个传感器收发数据,有兴趣的读者可以留言或留下邮箱,笔者看到会及时回复


http://chatgpt.dhexx.cn/article/XNbAyLSx.shtml

相关文章

STM32_USART 串口通讯详解

对51单片机有了解的都知道51单片机的串口通讯工作原理,我们单片机使用的电平TTL电平,为了使我们的的单片机与PC进行通信,就需要一个电平转换芯片,把TTL电平转换为USB电平(使用的USB接口,如果使用的DB9接口&…

STM32之串口通信

串口通信原理 串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如…

STM32(六)——串口通信原理

本节为——正点原子笔记,海创电子学习笔记 我们先来看看我们学习的内容 一、 串行接口的基本知识 而我们今天主要说说 串行通信 而这些又是怎么样理解的? 接下来还有一个问题——即是串行通讯的同步与异步的问题 而 UART 是属于全双工 异步通讯 —— 即可…

OPENMV-STM32串口通信

OPENMV-STM32串口通信 目录标题 OPENMV-STM32串口通信前言硬件选择硬件的通信连接OPENMV软件分析效果展示图 前言 最近要准备工巡赛,突然要发现需要进行视觉传动,所以我最近几天又温顾了一下Openmv,以前学习Openmv都是通过电脑对其进行控制,…

STM32——串口通信原理

STM32——串口通信 一、硬件部分1、RS232标准2、USB转串口(TTL)3、原生的串口到串口(TTL->TTL) 二、串口通信协议三、STM32串口通信功能框图1、引脚2、USART通信相关寄存器(最好过一遍,或者在试验之后回…

STM32串口通信,CH340工作原理

目录 一、串口协议 1.设备间的通信方式 2.RS-232标准 1.RS232电平与TTL电平的区别 2.RS-232串口简介 二、USB转232模块(CH340为例) 1.CH340简介 2.实物接线 三、参考文献 一、串口协议 串行接口是一种可以将接收来自CPU的并行数据字符转换为连续的…

STM32-串口通信

1 串行通信接口背景知识 串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单便捷,因此大部分电子设备都支持该通讯方式,其通讯协议可分层为协议层和物理层。物理层规定通信协议中具有机械、电子功能的特性&#…

STM32 USART—串口通信

目录 一、串口通信协议物理层电平标准: 1.RS232标准: 2.USB转串口通讯(常用) 3.原生的串口到串口 二、串口通信协议软件层: 三、串口功能框图 1.引脚 2.数据寄存器USART_DR 3.字符帧组成介绍 4.发送与接收数据…

STM32 —— STM32 的串口通信

STM32 —— STM32 的串口通信 STM32的串口通信接口有两种,分别是:UART(通用异步收发器)、USART(通用同步异步收发器)。而对于大容量 STM32F10x 系列芯片,分别有 3 个 USART 和 2 个 UART 串口通信过程: 目前还处于入门阶段&#x…

STM32——串口通信

首先声明,本文是在查阅资料之后进行的一些内容总结,仅用于个人学习记录。 一、串口通信基本原理 按照数据传送方向分类 1、单工:数据传输只支持数据在一个方向上传输 2、半双工:允许数据在两个方向上传输。但是,在…

STM32 - 串口(USART)通信详解

STM32 - 串口(USART)通信 文章目录 STM32 - 串口(USART)通信1、STM32 串口简介2、串口的工作方式3、串口通信协议3.1: 物理层3.1.1: TTL、RS-232 标准3.1.2:USB 转串口(划重点&#…

STM32-串口通信详解总结

1. 串口通信方式 UART:universal asynchronous receiver and transmitter 通用异步收/发器,即串行异步全双工收发器。 USART: universal synchronous asynchronous receiver and transmitter 通用同步/异步收/发器,即串行异步/同步全双工收发…

(十三)STM32——串口通信(UART)

目录 学习目标 内容 通信方法 并行通信 串行通信 通信方向 通信方式 UART 特点 串口参数 通信流程 寄存器 USART_SR USART_DR USART_BRR 过程 代码 运行结果 运行结果 遇到的问题 总结 学习目标 本节我们要学习的的是STM32的通信部分,主要介绍…

STM32—串口通讯详解

串口通讯目录 物理层协议层USART简介开发板与上位机的连接代码讲解:一.初始化结构体二.NVIC配置中断优先级三.USART配置函数讲解四.传输数据的函数:1.发送一个字节2.发送字符串3.重定向printf函数发送字符串4.重定向getchar函数接收字符5.通过中断接收 结…

stm32实现串口通信和LED灯点亮

stm32串口通信 串口协议和RS—232标准RS232电平与TTL电平的区别USB/TTL转RS232 CH340串口安装安装stm32cubemx并编写程序实现led灯的周期闪烁 用stm32完成USART串口通信接下来进行波形观察总结 两个工程完整代码 串口协议和RS—232标准 串口通信协议:是指规定了数据…

iconCls和el-icon属性对应的图标大全(带图)

千言万语,不如直接上图效果好 element UI el-icon 直接看官网都有,很全 https://element.eleme.io/#/zh-CN/component/icon

ext 中的iconCls配置以及使用以及路径问题

使用过Ext(http://www.extjs.com)的同志都应该知道,每一个组件(Component)在初始化的时候,都会有一个配置参数(Config){在Ext2中,基本上所有的组件的构造函数只接受一个参…

EXT iconCls说明

今天学习ext 看examples中的事例,其中有一个地方是这样写的: new ButtonPanel( Icon Only, [{ iconCls: add16 },{ iconCls: add24, scale: medium },{ …