文章目录
前言
野火串口助手
链接: fireTools-win64-v1.0.1.5
提取码: 5x3a
STM32串口下载软件
链接: FlyMcu
提取码: 9y4c
一、 了解串口协议和RS-232标准
1.串口协议和RS-232标准
串口协议是一种用于在计算机和外部设备之间进行数据通信的协议。其中,RS-232是一种常用的串口通信标准,定义了用于串行通信的电气特性和信号传输规范。RS-232标准使用不同电平表示二进制数据,包括数据位、停止位和校验位等信息。
USART协议
USART代表通用的同步和异步发送器和接收器。它是两线协议的串口通信。数据电缆信号线标记为Rx和TX。该协议用于逐字节发送和接收数据以及时钟脉冲。这是一种全双工协议,意味着同时以不同的板速发送和接收数据。不同的设备通过此协议与微控制器通信。
RS-232标准
RS-232标准定义了两个逻辑电平:逻辑1和逻辑0。在RS-232中,逻辑1通常由负电平表示,而逻辑0通常由正电平表示。RS-232标准使用负电平表示逻辑1是因为在通信线路中,负电平更容易受到干扰,因此可以更好地保持信号的稳定性。
2.RS232电平与TTL电平的区别
RS-232电平和TTL(Transistor-Transistor Logic,晶体管-晶体管逻辑)电平是两种不同的电平标准。RS-232电平用于串口通信,而TTL电平用于数字电路和逻辑电路中。
主要区别如下:
电压级别:RS-232电平通常采用正负电压,比如正电平范围为+3V到+15V,负电平范围为-15V到-3V。而TTL电平通常使用0V和5V作为电平表示。
电流:RS-232标准定义了较高的电流要求,以便在较长距离上进行可靠的通信。而TTL电平通常具有较低的电流要求。
信号传输距离:RS-232电平可以在较长的距离上进行通信,通常达到数十米甚至更远。而TTL电平在短距离内通信更为常见。
3.了解"USB/TTL转232"模块的工作原理。
USB/TTL转RS-232模块是一种用于将USB接口转换为RS-232电平的设备,常用于连接计算机和串口设备之间的通信。以CH340芯片模块为例,它是一种常见的USB转串口芯片。
工作原理如下:
USB通信:USB/TTL转RS-232模块通过USB接口与计算机连接,通过USB通信协议与计算机进行数据交换。
芯片转换:模块中的CH340芯片负责将USB信号转换为TTL电平信号。它将计算机通过USB接口发送的数据转换为TTL电平信号,并将其发送到模块的TTL串口引脚。
RS-232转换:模块上的其他电路和芯片负责将TTL电平信号转换为RS-232电平信号。这通常涉及电平转换电路和驱动器,将TTL电平信号转换为符合RS-232标准的正负电平信号。
串口通信:通过RS-232电平信号,模块可以与外部串口设备进行通信,例如与串口打印机、串口终端或其他串口设备进行数据交换。
通过USB/TTL转RS-232模块,可以方便地将计算机与串口设备连接起来,实现数据的传输和通信。
二、简单串口通信实现
1、CubeMX创建项目
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
1)新建项目
2)选择芯片
3)配置RCC
4)配置SYS
5)配置USART
6)配置NVIC
7)生成代码
设置项目路径和名称
2、Keil配置代码
1)打开项目
2)编写main.c
定义变量
char c;//指令 #:停止 *:开始
char message[]="hello windows!\n";//输出信息
char tips[]="无效指令......\n";//提示1
char tips1[]="开始发送......\n";//提示2
char tips2[]="暂停发送......\n";//提示3
char flag='#';//标志 #:停止发送, *:开始发送
设置接受中断
//设置接受中断
HAL_UART_Receive_IT(&huart1, (uint8_t *)&c, 1);
替换原while循环
while (1)
{
if(flag=='*'){
//发送信息
HAL_UART_Transmit(&huart1, (uint8_t *)&message, strlen(message),0xFFFF);
//延时
HAL_Delay(1000);
}
}
在main函数下重写中断处理
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
//当输入的指令为#时,发送提示并改变flag
if(c=='#'){
flag='#';
HAL_UART_Transmit(&huart1, (uint8_t *)&tips2, strlen(tips2),0xFFFF);
}
//当输入的指令为*时,发送提示并改变flag
else if(c=='*'){
flag='*';
HAL_UART_Transmit(&huart1, (uint8_t *)&tips1, strlen(tips1),0xFFFF);
}
//当输入无效指令时,发送提示并改变flag
else {
flag='#';
HAL_UART_Transmit(&huart1, (uint8_t *)&tips, strlen(tips),0xFFFF);
}
//重新设置中断
HAL_UART_Receive_IT(&huart1, (uint8_t *)&c, 1);
}
3)编译并烧录
4)串口助手操作
输入*,开始发送
输入#,暂停
输入其它指令无效
参考
1.链接: https://blog.youkuaiyun.com/qq_47281915/article/details/121053903
2.链接: https://blog.youkuaiyun.com/qwert_qqq/article/details/134083704?spm=1001.2014.3001.5502
3.链接: https://zhuanlan.zhihu.com/p/464563001