一、串口通讯协议和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观察了波形图。