基于HAL库中断方式进行串口通信

一、串口通讯协议和RS-232标准

1.简介
串口通讯是是一种设备间非常常用的串行通讯方式,简单、便捷,大部分电子设备都支持该通讯方式。
2.RS-232标准
RS-232标准主要规定了信号的用途,通讯接口以及信号的电平标准。
在这里插入图片描述
在上面的通讯方式中,两个通讯设备的“DB9接口”之间通过串口信号线建立起连接,串口信号线中用“RS-232标准”传输数据信号。由于RS-232电平标准的信号不能直接被控制器直接识别,所以这些信号会经过一个“电平转化芯片”转化成控制器能识别的“TTL校准”的电平信号,才能实现通讯。

二、RS232电平与TTL电平的区别

RS232电平和TTL电平是两种常见的串行通信电平标准。RS232电平使用正负电压表示逻辑状态,而TTL电平使用高低电压表示逻辑状态。本文将详细介绍RS232电平和TTL电平的差异,包括电压范围、信号极性、传输距离和应用领域等方面。

电压范围差异
RS232电平使用正负电压表示逻辑状态,通常为正电压表示逻辑0,负电压表示逻辑1;TTL电平使用高低电压表示逻辑状态,通常为高电压(如+5V)表示逻辑1,低电压(如+0.8V)表示逻辑0。

信号极性差异
RS232电平的信号极性与电压有关,逻辑0和逻辑1的电压极性相反;TTL电平的信号极性固定,逻辑0为低电平,逻辑1为高电平。

传输距离差异
RS232电平适用于较长距离的通信,可达数百米;TTL电平适用于短距离通信,通常限制在几十米以内。

应用领域差异
RS232电平常用于串行通信设备间的长距离通信,如计算机与调制解调器之间的通信;TTL电平常用于数字电路之间的短距离通信,如单片机与传感器之间的通信。

三、“USB/TTL转232”模块(CH340芯片为例)
1.基本工作原理
USB转串口即实现计算机USB接口到物理串口之间的转换。可以为没有串口的计算机或其他USB主机增加串口,使用USB转串口设备等于将传统的串口设备变成了即插即用的USB设备。
USB主机检测到USB转串口设备插入后,首先会对设备复位,然后开始USB枚举过程。USB枚举时过程会获取设备描述符、配置描述符、接口描述符等。描述符中会包含USB设备的厂商ID,设备ID和Class类别等信息。操作系统会根据该信息为设备匹配相应的USB设备驱动。
USB虚拟串口的实现在系统上依赖于USB转串口驱动,一般由厂家直接提供,也可以使用操作系统自带的CDC类串口驱动等。驱动主要分为2个功能,其一注册USB设备驱动,完成对USB设备的控制与数据通讯,其二注册串口驱动,为串口应用层提供相应的实现方法。
2.CH340模块介绍
1.CH340芯片

CH340 是一个USB 总线的转接芯片,实现USB 转串口、USB 转IrDA 红外或者USB 转打印口。
在串口方式下,CH340 提供常用的MODEM联络信号,用于为计算机扩展异步串口,或者将普通的串口设备直接升级到USB 总线。有关USB 转打印口的说明请参考手册(二)CH340DS2。
在红外方式下,CH340 外加红外收发器即可构成USB 红外线适配器,实现SIR 红外线通讯。
特点:
● 全速USB 设备接口,兼容USB V2.0,外围元器件只需要晶体和电容。
● 仿真标准串口,用于升级原串口外围设备,或者通过USB 增加额外串口。
● 计算机端Windows 操作系统下的串口应用程序完全兼容,无需修改。
● 硬件全双工串口,内置收发缓冲区,支持通讯波特率50bps~2Mbps。
● 支持常用的MODEM 联络信号RTS、DTR、DCD、RI、DSR、CTS。
● 通过外加电平转换器件,提供RS232、RS485、RS422 等接口。
● 支持IrDA 规范SIR 红外线通讯,支持波特率2400bps 到115200bps。
● 由于是通过USB 转换的串口,所以只能做到应用层兼容,而无法绝对相同。
● 软件兼容CH341,可以直接使用CH341 的驱动程序。
● 提供SSOP-20 无铅封装,兼容RoHS。

2.CH340模块的主要构成及其接口
在这里插入图片描述
USB转串口电路板与单片机的接线图,VCC接线是为了单片机供电,USB转串口的RXD引脚与单片机的TXD引脚相连,USB转串口的TXD引脚与单片机的RXD引脚相连,两者的GND引脚直接相连。
在这里插入图片描述

三、HAL库中断方式进行串口通信

1.通过CubeMx配置项目

1.1设置SYS
在这里插入图片描述
1.2设置RCC
在这里插入图片描述
1.3设置USART
在这里插入图片描述
1.4设置NVIC
在这里插入图片描述
1.5创建项目
在这里插入图片描述

2.在keil中完善代码

2.1在main前定义全局变量

char c;//指令 0:停止  1:开始
char message[]="hello Windows\n";//输出信息
int flag=0;//标志 0:停止发送 1.开始发送



2.2在main中设置接收中断

HAL_UART_Receive_IT(&huart1, (uint8_t *)&c, 1);



2.3修改main函数中while循环

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


2.4在main函数下方重写中断函数

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	
	//当输入的指令为0时,发送提示并改变flag
	if(c=='0'){
		flag=0; 
	}
	
	//当输入的指令为1时,发送提示并改变flag
	else if(c=='1'){
		flag=1;
	}
	
	//重新设置中断
		HAL_UART_Receive_IT(&huart1, (uint8_t *)&c, 1);  
}



3.编译并烧录

3.1编译结果
在这里插入图片描述
3.2烧录结果
在这里插入图片描述
3.3运行效果
中断模式–发送"*“开始不断输出"hello Windows”,发送"#"停止输出
在这里插入图片描述

四、观察输出波形

在这里插入图片描述
设置要观察的引脚
在这里插入图片描述

在这里插入图片描述

五、总结

本次实验了解了串口协议和RS-232标准、USB/TTL转232模块的工作原理。并在此基础上学习了用HAL库中断方式进行串口通信,实现了发送字符“”stm32开始不断输出字符“hello Windows”再发送“#”就停止输出,如果再发送“”又继续输出的功能。很形象的实现了串口通信中断功能,并用keil观察了波形图。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值