串口通信原理及应用

Content

  • [1. 前言介绍](#1. 前言介绍)
  • [2. 连接方式](#2. 连接方式)
  • [3. 数据帧格式](#3. 数据帧格式)
  • [4. 代码编写](#4. 代码编写)

1. 前言介绍

串口通信是一种设备间非常常用的串行接口,以比特位的形式发送或接收数据,由于成本很低,容易使用,工程师经常使用这种方式来调试 MCU。

串口通信应用广泛,可以实现两个设备之间的通信,例如STM32与wifi、蓝牙、4G、NB-IoT使用的都是串口通信协议。

2. 连接方式

如下图所示:

己方的RX(接收引脚)对应对方的 TX(发送引脚),而己方的 TX 则是接收对方的 RX 引脚,这种方法可以用于双向通信。

如若只需进行单向通信,采用以下方式也是可以的,此方法通常为仅接收外部设备传来的数据:

3. 数据帧格式

起始位(Start Bit):数据帧的起始位,用于标识数据传输的开始。通常为逻辑低电平。

数据位(Data Bits):数据帧中实际传输的数据位数。常见的数据位数有5位、6位、7位和8位。

校验位(Parity Bit):用于校验数据位的奇偶性,以检测和纠正传输中的错误。常见的奇偶校验方式有奇校验和偶校验,也可以选择不使用校验位。

停止位(Stop Bit):数据帧的结束位,用于标识数据传输的结束。通常为逻辑高电平。

如图所示,可以看到串口数据是低有效位优先传输(LSB)。

4. 代码编写

通过STM32F407的数据手册可以查询到,PA9和PA10引脚是具有 USART1功能的,它被挂载在 APB2 总线上:

所以我们需要 开启 GPIOA端口时钟以及启用 串口1时钟:

c 复制代码
	//开启硬件时钟:GPIO端口硬件时钟、USART硬件时钟
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);

PA9 和 PA10 是作为复用功能使用的,所以还要开启复用功能:

c 复制代码
	//配置GPIO引脚为复用功能模式
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10;	//指定9、10号引脚
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//配置为复用功能模式
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//速度越高,功耗就越高,但是响应速度也更快
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//不需要使能内部上下拉电阻
	GPIO_Init(GPIOA, &GPIO_InitStructure);	

然后依次对串口参数进行配置:

c 复制代码
	//将对应的GPIO引脚连接到串口
	GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);
	GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);
	
	
	//配置串口相关的参数:串口号,波特率,数据位,停止位,流控制
    //波特率
	USART_InitStructure.USART_BaudRate = baud;
	//接收长度
	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(USART1, &USART_InitStructure);

以下是完整的配置函数:

c 复制代码
void usart1_init(uint32_t baud)
{
	
	//开启硬件时钟:GPIO端口硬件时钟、USART硬件时钟
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
	
	
	//配置GPIO引脚为复用功能模式
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10;	//指定9、10号引脚
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//配置为复用功能模式
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//速度越高,功耗就越高,但是响应速度也更快
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//不需要使能内部上下拉电阻
	GPIO_Init(GPIOA, &GPIO_InitStructure);	
	
	
	
	//将对应的GPIO引脚连接到串口
	GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);
	GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);
	
	
	//配置串口相关的参数:串口号,波特率,数据位,停止位,流控制
	USART_InitStructure.USART_BaudRate = baud;
	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(USART1, &USART_InitStructure);
	
	
	
	//配置串口相关的中断
	
	USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
	
	NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);
	
	
	
	//使能串口工作
	USART_Cmd(USART1, ENABLE);
 
}

以下是其他配置文章
STM32F103ZET6点亮板载LED灯

STM32F103C8T6的三种延时函数

STM32使用PWM(脉冲宽度调制)

相关推荐
星辰pid5 小时前
STM32控制四自由度机械臂(SG90舵机)(硬件篇)(简单易复刻)
stm32·单片机·嵌入式硬件·机械臂
威桑6 小时前
STM32 专有名词缩写整合
stm32·单片机·嵌入式硬件
星源~7 小时前
tree 命令集成到 Git Bash:可视化目录结构的指南
git·单片机·物联网·嵌入式·项目开发
SKYDROID云卓小助手8 小时前
无人设备遥控器之自动调整编码技术篇
人工智能·嵌入式硬件·算法·自动化·信号处理
所念皆星海9118 小时前
图灵完备之路(数电学习三分钟)----数据选择器与总线
嵌入式硬件·通信·数电
智者知已应修善业9 小时前
【51单片机节日彩灯控制器设计】2022-6-11
c语言·经验分享·笔记·单片机·嵌入式硬件·51单片机
开-悟10 小时前
嵌入式编程-使用AI查找BUG的启发
c语言·人工智能·嵌入式硬件·bug
许白掰12 小时前
【stm32】HAL库开发——CubeMX配置RTC,单片机工作模式和看门狗
stm32·单片机·嵌入式硬件·学习·实时音视频
DIY机器人工房13 小时前
0.96寸OLED显示屏 江协科技学习笔记(36个知识点)
笔记·科技·stm32·单片机·嵌入式硬件·学习·江协科技
国科安芯13 小时前
【AS32系列MCU调试教程】SPI调试的常见问题解析
单片机·嵌入式硬件·性能优化·硬件架构·硬件工程