STM32串口通信入门

本文详细介绍了串口通信协议的各个层次,包括物理层的电气特性、数据链路层的传输方式和错误检测,以及应用层的协议种类。还涵盖了USB转串口的工作原理和STM32CubeMX工程创建实例,展示了如何在STM32中实现串口通信及中断处理。
摘要由CSDN通过智能技术生成

一串口通信协议

(1)串口协议

串口协议是一种基于串行通信的数据传输协议。它通过串口接口将数据以串行的方式传输。串口协议通常包括物理层、数据链路层和应用层三个部分,其中物理层主要定义了串口接口的电气特性,数据链路层定义了数据的传输方式和错误检测机制,应用层定义了具体的数据格式和通信协议。

物理层
串口协议的物理层主要定义了串口接口的电气特性,包括传输速率、数据位、停止位、奇偶校验等。常见的串口接口有RS-232、RS-422、RS-485等。

数据链路层
串口协议的数据链路层定义了数据的传输方式和错误检测机制。串口通信采用异步传输方式,即每个数据字节之间没有固定的时间间隔。在数据传输时,每个字节都以一个起始位和一个或多个停止位作为帧定界符,以便接收端能够识别每个字节的开始和结束。
串口协议还包括奇偶校验机制和流控制机制。奇偶校验机制可以检测数据传输过程中的错误,流控制机制可以控制数据的传输速率,防止数据丢失或溢出。

应用层
串口协议的应用层定义了具体的数据格式和通信协议。常见的串口协议有Modbus、CAN协议、RS-232协议等。不同的应用场景需要使用不同的串口协议。

(2)RS-232

RS-232采取不平衡传输方式,即所谓单端通讯。由于其发送电平与接收电平的差仅为2V至3V左右,所以其共模抑制能力差,再加上双绞线上的分布电容,其传送距离最大为约15米,最高速率为20kb/s。RS-232是为点对点(即只用一对收、发设备)通讯而设计的,其驱动器负载为3~7kΩ。所以RS-232适合本地设备之间的通信。
RS-232标准主要规定了信号用途、通讯接口和信号电平标准。如下图为常见的设备间串口通讯结构图
在这里插入图片描述

(3)RS232电平与TTL电平的区别

根据通讯使用的电平标准不同,串口通讯可分为 TTL标准和 RS-232标准
在这里插入图片描述
从表格中不难看出,两种标准划分的逻辑电压不同。在电子电路中常使用 TTL 的电平标准,理想状态下,使用 5V 表示二进制逻辑 1,使用 0V 表示逻辑 0;而为了增加串口通讯的远距离传输及抗干扰能力,它使用-15V表示逻辑 1,+15V 表示逻辑 0

二USB转串口

(1)工作原理

USB转串口即实现计算机USB接口到物理串口之间的转换。可以为没有串口的计算机或其他USB主机增加串口,使用USB转串口设备等于将传统的串口设备变成了即插即用的USB设备。

USB主机检测到USB转串口设备插入后,首先会对设备复位,然后开始USB枚举过程。USB枚举时过程会获取设备描述符、配置描述符、接口描述符等。描述符中会包含USB设备的厂商ID,设备ID和Class类别等信息。操作系统会根据该信息为设备匹配相应的USB设备驱动。

USB虚拟串口的实现在系统上依赖于USB转串口驱动,一般由厂家直接提供,也可以使用操作系统自带的CDC类串口驱动等。驱动主要分为2个功能,其一注册USB设备驱动,完成对USB设备的控制与数据通讯,其二注册串口驱动,为串口应用层提供相应的实现方法。

串口收发对应的驱动数据流向一览:
在这里插入图片描述

(2)CH340模块

实物图
在这里插入图片描述
内部结构图
在这里插入图片描述
注意:RXD接收端子接外部TX发送端,TXD发送端子接外部RX接收端

三串口通信

(1)创建STM32CubeMX工程

1.设置RCC
在这里插入图片描述
2.设置SYS
在这里插入图片描述
3.设置USART
在这里插入图片描述
4.设置NVIC

在这里插入图片描述

(2)生成keil的项目文件

1.生成项目文件
在这里插入图片描述
2.在main函数前定义全局变量

char c;//指令 #:停止  *:开始
char message[]="hello Windows\n";//输出信息
char tips[]="CommandError\n";//提示1
char tips1[]="Start.....\n";//提示2
char tips2[]="Stop......\n";//提示3
char flag=0;//标志 #:停止发送 *:开始发送

3.在main函数中设置接收中断
函数说明:

  • 函数原型
 HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
  • 功能
 功能:串口中断接收,以中断方式接收指定长度数据。
 大致过程是,设置数据存放位置,接收数据长度,然后使能串口接收中断。
 接收到数据时,会触发串口中断。
 再然后,串口中断函数处理,直到接收到指定长度数据
 而后关闭中断,进入中断接收回调函数,不再触发接收中断。(只触发一次中断)
  • 参数
 UART_HandleTypeDef *huart      UATR的别名    
 huart1  *pData      			接收到的数据存放地址
 Size                      		接收的字节数
HAL_UART_Receive_IT(&huart1, (uint8_t *)&c, 1);

4.main函数中的while循环里面添加传输代码

if(flag==1){
			//发送信息
			HAL_UART_Transmit(&huart1, (uint8_t *)&message, strlen(message),0xFFFF); 
			
			//延时
			HAL_Delay(1000);
		}

5.在main函数下面重写中断处理函数

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	
	//当输入的指令为0时,发送提示并改变flag
	if(c=='0'){
		flag=0;
		HAL_UART_Transmit(&huart1, (uint8_t *)&tips2, strlen(tips2),0xFFFF); 
	}
	
	//当输入的指令为1时,发送提示并改变flag
	else if(c=='1'){
		flag=1;
		HAL_UART_Transmit(&huart1, (uint8_t *)&tips1, strlen(tips1),0xFFFF); 
	}
	
	//当输入不存在指令时,发送提示并改变flag
	else {
		flag=0;
		HAL_UART_Transmit(&huart1, (uint8_t *)&tips, strlen(tips),0xFFFF); 
	}

	//重新设置中断
		HAL_UART_Receive_IT(&huart1, (uint8_t *)&c, 1);  
}

(3)编译并烧录

1.编译
在这里插入图片描述
2.烧录
在这里插入图片描述
在这里插入图片描述
3.结果展示
发送 * 号时 开始返回"hellow windows"
在这里插入图片描述
发送 # 号时 停止返回"hello windows" 并返回"stop…"
在这里插入图片描述

(4)仿真逻辑分析仪功能观察串口输出波形

1.点击魔法棒,配置debug
在这里插入图片描述
2.然后点击debug,进行调试运行,设置逻辑分析仪,设置dispaly Type 为Bit
在这里插入图片描述
3.运行结果展示


4.结果分析
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

理论上是每秒都向windows发送信息,但是从结果可以看出,实际上是162.3256-163.3263=1.000729S ,实际上发送信息的时间为1.290375ms.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值