第七篇,STM32串口通信编程

article/2025/10/14 9:35:17

1.通信的基本概念

 

(1)串行通信和并行通信

(2)单工,半双工和全双工

 (3)通信速率

    单位时间内传输的比特数表示传输速度,叫做波特率(bps)

(4)通信协议(串口)

    通信协议就是通信双方约定好的数据格式

2.串口的硬件连接

    UART ----------------- 通用异步收发器

    USART --------------- 通用同步/异步收发器

3.stm32的串口开发

(1)原理图

USB调试口连接到了CPU的PA9 PA10,它们具有串口复用的功能

(2)CPU芯片手册

 

 

(3)串口接口的编程实现

在工程中添加串口库函数源码

1)开启GPIOA和USART1的时钟

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);

2)将PA9 PA10配置为复用功能,并且映射到串口1

GPIO_Init(...); GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);

3)初始化串口

void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct); 参数: USARTx - 哪个串口

USART_InitStruct - 串口初始化结构

typedef struct

{

uint32_t USART_BaudRate; /*!< 波特率 */

uint16_t USART_WordLength; /*!< 数据位长度 @ref USART_Word_Length */

uint16_t USART_StopBits; /*!< 停止位长度 @ref USART_Stop_Bits */

uint16_t USART_Parity; /*!< 校验方式 @ref USART_Parity */

uint16_t USART_Mode; /*!< 发送/接收模式 @ref USART_Mode */

uint16_t USART_HardwareFlowControl; /*!< 硬件流控制 @ref USART_Hardware_Flow_Control */ } USART_InitTypeDef;

4)使能串口

USART_Cmd(USART1,ENABLE);

5)数据的发送和接收

发送:

//轮询

void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);

//传入往哪个串口发送什么数据

//每次发送前查询上一个数据是否发送完成

FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);

//传入哪个串口的什么标志,返回SET表示有该标志,返回RESET表示没有该标志

//USART_FLAG_TC ----- 发送完成标志

———————————————————————————————————————————

练习:

实现串口1字符串的发送

———————————————————————————————————————————

//功能函数代码

#include <stm32f4xx.h>
#include <usart.h>
#include <stdio.h>
#include <string.h>
#include <includes.h>//stm32开发板上运行程序,如果主机运行了调试器,程序就会使用主机的输入输出设备
//这是方式叫半主机模式,printf如果要通过串口打印,必须关闭半主机模式
#pragma import(__use_no_semihosting)struct __FILE{int handle;
};FILE __stdout;//定义_sys_exit函数避免使用半主机模式
void _sys_exit(int x)
{x = x;
}//重定义fputc
int fputc(int ch,FILE *F)
{//等待上一个数据发送完成while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//发送USART_SendData(USART1,ch);return ch;
}void usart1_init(void)
{GPIO_InitTypeDef GPIO_InitStruct;USART_InitTypeDef USART_InitStruct;NVIC_InitTypeDef NVIC_InitStruct;//1.开启GPIOA和USART1时钟RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//2.配置PA9 PA10为串口功能GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;//复用模式GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//推挽输出GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;//高速GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;//无上下拉GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10;GPIO_Init(GPIOA,&GPIO_InitStruct);GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);//3.初始化串口  8N1USART_InitStruct.USART_BaudRate = 115200;//波特率USART_InitStruct.USART_WordLength = USART_WordLength_8b;//8位数据位USART_InitStruct.USART_StopBits = USART_StopBits_1;//1位停止位USART_InitStruct.USART_Parity = USART_Parity_No;//无校验USART_InitStruct.USART_Mode = USART_Mode_Rx|USART_Mode_Tx;//发送接收模式USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件流控制USART_Init(USART1,&USART_InitStruct);//4.开启串口接收中断(清除中断标志)USART_ClearITPendingBit(USART1, USART_IT_RXNE);USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//5.初始化NVICNVIC_InitStruct.NVIC_IRQChannel = USART1_IRQn;//串口1中断通道NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0x2;//抢占优先级NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0x2;//响应优先级NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;//使能NVIC_Init(&NVIC_InitStruct);//.使能串口USART_Cmd(USART1,ENABLE);
}//发送一个字符(轮询)
void uart1_putc(char ch)
{//等待上一个数据发送完成while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);USART_SendData(USART1,ch);
}


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

相关文章

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

在配置USART和UART之前&#xff0c;得先明白什么是USART和UART以及它们之间有什么区别&#xff0c;其实两者是同步和异步的区别。 UART&#xff1a;universal asynchronous receiver and transmitter通用异步收发器&#xff1b; USART&#xff1a;universal synchronous asynch…

STM32_USART 串口通讯详解

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

STM32之串口通信

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

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

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

OPENMV-STM32串口通信

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

STM32——串口通信原理

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

STM32串口通信,CH340工作原理

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

STM32-串口通信

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

STM32 USART—串口通信

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

STM32 —— STM32 的串口通信

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

STM32——串口通信

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

STM32 - 串口(USART)通信详解

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

STM32-串口通信详解总结

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

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

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

STM32—串口通讯详解

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

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

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

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

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

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

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